Linux shell 编程笔记一
Linux的shell编程是最受欢迎的一种软件开发方式,他可以给你省去很多麻烦,比如在开发过程中要用到的库,不需要像VS那样建立项目时导入,在shell编程当中, 体现出了编程的模块化与组件化,我们单独封装的函数可以对他进行单独编译,编译通过之后与其他模块进行链接使用,形成一个完整的程序。
工具准备
开始shell编程之前你需要一个安装了linux系统的电脑,比如ubantu,SUSE,arch等等,目前linux的分之已经有上百个,都是源自于linux内核的开源免费精神,个人觉得李纳斯为世界互联网发展做出了巨大的贡献,之前研究过华为的路由器,他的系统设计绝对参考了linux的内核;linux还是全世界用的最多的服务器系统;扯远了,之后你还需要编译工具GCC,所有工作将围绕它来进行;用什么来写代码呢?这里推荐vim,这是一个黑客工具哦。如果没有这些工具,使用包管理工具进行安装。
基础知识篇
- grep命令
1 | $ grep EXIT_ *.h |
使用grep命令来搜索包含某些特定定义和函数原型的头文件,以上命令意思是在所有头文件当中搜索包含EXIT_这几个关键字的代码段;提示:在搜索的时候,要切换至相应的目录。
- 指定头文件位置
1 | $ gcc -I /usr/local/lib/include fred.c |
这个命令除了编译fred.c文件之外,还指出要在/usr/local/lib/include路径下搜索它的头文件。
- 共享库与静态库
(1).a代表传统的静态函数库
(2).so代表共享函数库1
$ gcc -o fred fred.c /usr/lib/libm.a
或1
$ gcc -o fred fred.c -lm
这条命令除了编译fred.c文件之外,-o参数指定编译之后的文件名,还指定了搜索数学函数库,/usr/lib/libm.a与-lm效果产生效果一样。
- 静态函数库 .a
静态库,也称归档文件(archive),它是以.a为后缀,如果你有windows编程经验,那么他对应的就是以.lib结尾的文件名,这是windows的静态链接库。那么.o文件又是什么呢?我们很容易将它和.o文件混淆,.o文件是目标模块文件,与windows系统对应的是以.OBJ为后缀名的文件,主要的功能是很多个.o文件共同组成一个完整的程序,是由单个.c文件编译而成;而.a文件是一个包含可重用函数的库文件,它可以给你提供编程上的方便。
- 共享库 .so
静态库的一个缺点就是:当你同时运行许多应用程序并且他们都使用来自同一个函数库的函数时,内存中就会有同一函数的多个副本,而且在程序自身也会有多份同样的副本,这将消耗大量的内存和磁盘空间。这也是共享库和静态库最大的不同,共享库是这样工作的:程序本身不再包含函数代码,而是引用运行时可访问的共享代码,当编译好的程序被装载到内存中执行时,函数引用被解析并产生对共享库的调用,如果有必要,共享库才被加载内存中;通过这样的方法,程序系统可以只保留共享库的一份副本供许多应用程序同时使用它,并且在磁盘上也仅保存一份。