2.1 什么是shell
- 解释型语言,不适合用来完成对执行时间比较挑剔或者处理器符合比较大的工作
- shell是一个做为用户与UNIX系统之间的操作接口的程序,文件的重定向只要使用"<"和"》"就行,管道用一个"|"就能代表,子进程的输出是"$(...)",所有这些的具体细节都早已为用户准备好了。
2.2 管道和重定向
2.2.1 对输出数据进行重定向
- $ls -l > lsoutput.txt,这条命令将ls命令的输出保存到一个名为lsoutput.txt的文件里去
- $ps >> lsoutput.txt,这条命令将把ps命令的输出追加到文件尾部
- 文件描述符0代表一个程序标准输入,文件描述符1代表一个程序标准输出,而文件描述符2代表一个程序标准错误输出
2.2.2 对输入数据进行重定向
- 不仅能重定向输出信息,还可以重定向输入数据,如$ more < killout.txt
2.2.3 管道
- 可以用管道操作符"|"把进程连接在一起,UNIX不同于DOS,用管道连接在一起的进程可以同时运行,并会随着数据流在它们之间的流动而自动协调
2.3 可以被视为程序设计语言的shell
2.3.1 交互式程序
2.3.2 编写脚本程序
- 程序中的注释以一个"#"符号开始,一直持续到该行的结束
- 在shell程序设计里,exit命令返回"0"表示成功
- UNIX一般很少通过文件的扩展名来确定文件的类型,可以完全省略".sh",或者给它加上一个不同的扩展名,shell是不关心的,要想知道它们是否是脚本程序,最好的方法就是使用file命令,比如 "file first.sh"
2.3.3 把脚本设置为可执行程序
- 用chmod命令对已写好的脚本文件的状态(mode)进行修改,是这个文件能够被全体用户执行,$ chomd +x first.sh
2.4 shell程序设计的语法
2.4.1 变量
- 在shell里,使用变量之前并不需要事先对它们做出声明。在默认情况下,所有变量都被认为是并保存为字符串,即使它们被赋值为数值时也是如此。shell和其它一些工作程序会把"数值"型字符串依次转换为正确的数值,并且按照正确的方式对它们进行操作。
- 因为UNIX是一个区分字母大小写的系统,shell中依旧如此
- 在shell里,在变量名前面加上一个"$"字符就可以获得它的内容,echo命令就可以输出它的内容。只要用到变量,我们就可以在它前面加上一个"$"字符,除非我们是在对该变量进行赋值操作。注意,如果字符串里包含着空格,就必须用引号把它们括起来,还要注意等号两边不能有空格。
$salutation=Hello
$echo $salutation
Hello
$salutation="Year Dear"
$echo $salutation
Year Dear
$salutation=7+5
$echo $salutation
7+5
2.4.2 条件测试
2.4.3 控制结构
2.4.4 函数
2.4.5 命令
2.4.6 命令的执行
2.4.7 即时文档
2.4.8 调试脚本程序
2.5 shell程序设计示例
2.5.1 工作需求
2.5.2 设计
2.6 本章总结