第九章 可编程的shell、shell变量和环境:编写自己的shell
shell本身就是一种编程语言,shell程序通常被称之为shell脚背。本章先学习shell的编程特征,然后再在第八章中编写的shell程序中加入一些特征,将if..then控制语句、局部变量和全局变量添加到要实现的shell程序中。
1. 什么是以及为什么要使用shell脚本语言
shell是一个编程语言解释器,既可以 解释从键盘读入的命令,也可以解释存储在脚本中的命令
1) shell脚本包含一系列命令
shell脚本实例;shell脚本的执行(作为sh的参数、chmod后像程序一样执行);
2) shell语法:script2中的语法(变量、I/O、if..then、环境变量的引用)
3) 自编shell的改进:加入命令解析(在一行中输入命令和参数)、加入if..then、加入局部变量和全局变量
2. smsh1---命令解析
命令解析的过程可以复用。
3. shell中的流程控制
1) if语句做些什么:脚本中的if基于以0退出表示成功这个假设。Unix中exit(0)表示成功。
2) if如何工作:与C语言中的if相似
3) 在smsh中添加if(*):关键字的区分可以复用
4. shell变量:局部和全局
1) shell中有两类变量:局部变量和环境变量。
2) 使用shell变量:
a) 变量名
b) 变量的值是字符串。没有数值类型的变量,所有操作都是字符串操作
c) 列出所有的变量使用set命令(列出包括在登陆的时候设置的变量)
3) 变量的存储
模型;接口;实现;程序实现的问题(*)
5. 环境:个性化设置
环境不是shell的一部分,但是shell提供了一些读取和修改环境的命令。
1) 使用环境:
列出环境#env
2) 更新环境
a) var = value
b) export var
3) 在C程序中读入环境
char *cp = getenv(“LANG”);//换取环境变量LANG字符串
4) 什么是环境,以及它是如何工作的
环境是每个程序都可以读取的一个字符串数组。
a) showenv.c的功能就像#env,读取环境
b) changeenv.c说明了environ全局变量在不同程序间的传递
c) exec家族会复制父进程的environ给子进程,但是子进程对env的修改不会影响父进程。
6. 在smsh中添加环境处理(*)
7. 已实现的shell功能:未实现的shell功能(read变量、输入/输出重定向)
8. 小结
1) shell脚本可以运行程序、接受用户输入、使用变量和使用复杂的逻辑控制
2) if..then依赖于Unix程序返回0表示成功
3) 每个程序都会从调用它的进程中继承一个字符串列表,这个列表称为环境。
----------------------------------------------------------------------------------------
本文链接http://blog.csdn.net/yongchurui/article/details/27588873
2014.05.21