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#include #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;}
主函数实现如上。
编译程序生成二进制文件 run
ls -s run test.sh 生成软连接文件test.sh
执行./test.sh
完成。