shell脚本能够很好的让系统配置自动化,但是shell本身不能保密,也就是任何人都能看到你的shell程序。

但是通过C语言实现,编译为二进制将很好的避免这个问题。

typedef int (* MAINFUN_T)(int ,char*[]);
typedef struct funitem{
    int id;
    char *name;
    MAINFUN_T fun;
}FUNITEM_T;
                                                                                                                                                                                                                                             
#define FUNLIST { \
        {1, "test.sh", test_sh}, \
        {0} \
}
int test_sh(int argc, char *argv[]);

这是h文件,开始定义一个函数指针类型,定义一个脚本结构体,成员包括ID号,脚本的名字,脚本对应的C函数。

最后定义了一个数组,实例话脚本,举个例子,我门注册了一个test.sh的脚本,对应的函数为test_sh函数,下面有定义。


#include <stdio.h>
#include <string.h>
#include "main.h"
#include "sys_utility.h"
FUNITEM_T funlist[] = FUNLIST;
int test_sh(int argc, char *argv[])
{
    printf("this is test.sh\n");
        //在这个函数内实现具体的脚本。
}
//在数组内查找对应脚本名字的函数实现执行
MAINFUN_T search_sub_function(const char *prgname)
{
    const char *p=NULL;
    for(p=prgname; *p; p++){
        if(*p=='/'){
            prgname = p+1;
        }
    }
    FUNITEM_T *pt;
    for(pt=&funlist[0]; pt->name; pt++){
        if(strcmp(prgname, pt->name) == 0){
            return pt->fun;
        }
    }
    return NULL;
}
int main(int argc, char *argv[])
{
    int ret=0;
    MAINFUN_T subfun = search_sub_function(argv[0]);//查找函数并返回,函数入口。
    if(subfun)
    {
         ret = subfun(argc, argv);
    }
    return ret;
}


主函数实现如上。


C语言实现shell脚本的想法。_脚本

编译程序生成二进制文件 run

ls -s run test.sh 生成软连接文件test.sh

执行./test.sh


C语言实现shell脚本的想法。_C_02


完成。