12.1 什么是 Shell scripts
shell script 是利用 shell 的功能所写的一个“程序 (program)”,这个程序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面, 搭配正则表达式、管线命令与数据流重导向等功能,以达到我们所想要的处理目的。
简单的说, shell script 就像是早期 DOS 年代的批处理文件 (.bat) ,最简单的功能就是将许多指令汇整写在一起, 让使用者很轻易的就能够 one touch 的方法去处理复杂的动作 (执行一个文件 "shell script" ,就能够一次执行多个指令)。 而且 shell script 更提供阵列、循环、条件与逻辑判断等重要功能,让使用者也可以直接以 shell 来撰写程序,而不必使用类似 C 程序语言等传统程序撰写的语法。
shell script 可以简单的被看成是批处理文件, 也可以被说成是一个程序语言,且这个程序语言由于都是利用 shell 与相关工具指令, 所以不需要编译即可执行,且拥有不错的除错 (debug) 工具,所以,他可以帮助系统管理员快速的管理好主机。
12.1.1 干嘛学习 shell scripts
自动化管理的重要依据
追踪与管理系统的重要工作
简单入侵侦测功能
连续指令单一化
简易的数据处理
12.1.2 第一支 script 的撰写与执行
shell script 其实就是纯文本文件,我们可以编辑这个文件,然后让这个文件来帮我们一次执行多个指令, 或者是利用一些运算与逻辑判断来帮我们达成某些功能。所以,要编辑这个文件的内容时,当然就需要具备有 bash 指令下达的相关认识。在 shellscript 的撰写中需要用到下面的注意事项:
1. 指令的执行是从上而下、从左而右的分析与执行;
2. 指令的下达就如同第四章内提到的: 指令、选项与参数间的多个空白都会被忽略掉;
3. 空白行也将被忽略掉,并且 [tab] 按键所推开的空白同样视为空白键;
4. 如果读取到一个 Enter 符号 (CR) ,就尝试开始执行该行 (或该串) 命令;
5. 至于如果一行的内容太多,则可以使用“ [Enter] ”来延伸至下一行;
6. “ # ”可做为注解!任何加在 # 后面的数据将全部被视为注解文字而被忽略!
如此一来,我们在 script 内所撰写的程序,就会被一行一行的执行。现在我们假设你写的这个程序文件名是 /home/dmtsai/shell.sh 好了,那如何执行这个文件?很简单,可以有下面几个方法:
直接指令下达: shell.sh 文件必须要具备可读与可执行 (rx) 的权限,然后:
绝对路径:使用 /home/dmtsai/shell.sh 来下达指令;
相对路径:假设工作目录在 /home/dmtsai/ ,则使用 ./shell.sh 来执行变量“PATH”功能:
将 shell.sh 放在 PATH 指定的目录内,例如: ~/bin/
以 bash 程序来执行:通过“ bash shell.sh ”或“ sh shell.sh ”来执行
12.1.3 撰写 shell script 的良好习惯创建
每个 script 的文件开始处记录好:
script 的功能;
script 的版本信息;
script 的作者与联络方式;
script 的版权宣告方式;
script 的 History (历史纪录);
script 内较特殊的指令,使用“绝对路径”的方式来下达;
script 运行时需要的环境变量预先宣告与设置。
12.2.2 script 的执行方式差异 (source, sh script, ./script)
利用直接执行的方式来执行 script
利用 source 来执行脚本:在父程序中执行
12.3 善用判断式
12.3.1 利用 test 指令的测试功能
当我要检测系统上面某些文件或者是相关的属性时,利用 test 这个指令来工作真是好用得不得了, 举例来说,我要检查 /dmtsai 是否存在时,使用: