shell script 是利用 shell 的功能所写的一个“程序 (program)”,这个程 序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面, 搭配正则表达 式、管线命令与数据流重导向等功能,以达到我们所想要的处理目的。
干嘛学习 shell scripts
如果你是想要玩清楚 Linux 的来龙去脉, 那么 shell script 就不可不知,为什么呢?因为:
-
自动化管理的重要依据
-
追踪与管理系统的重要工作
-
简单入侵侦测功能
-
连续指令单一化
-
简易的数据处理
-
跨平台支持与学习历程较短
第一支 script 的撰写与执行
在 shell script 的撰写中还需要用到下面的注意事项:
- 指令的执行是从上而下、从左而右的分析与执行;
- 指令、选项与参数间的多个空白都会被忽略掉;
- 空白行也将被忽略掉,并且[tab]按键所推开的空白同样视为空白键;
- 如果读取到一个Enter符号(CR),就尝试开始执行该行(或该串)命令;
- 至于如果一行的内容太多,则可以使用“[Enter]”来延伸至下一行;
- “#”可做为注解!任何加在#后面的数据将全部被视为注解文字而被忽略!
-
直接指令下达: shell.sh 文件必须要具备可读与可执行 (rx) 的权限,然后:
- 绝对路径:使用 /home/dmtsai/shell.sh 来下达指令;
- 相对路径:假设工作目录在 /home/dmtsai/ ,则使用 ./shell.sh 来执行
- 变量“PATH”功能:将 shell.sh 放在 PATH 指定的目录内,例如: ~/bin/
-
以 bash 程序来执行:通过“ bash shell.sh ”或“ sh shell.sh ”来执行
-
撰写第一支 script
先写一支 script 给大家 瞧一瞧:
[dmtsai@study ~]$ mkdir bin; cd bin
[dmtsai@study bin]$ vim hello.sh
#!/bin/bash
# Program:
# This program shows "Hello World!" in your screen.
# History:
# 2015/07/16 VBird First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "Hello World! \a \n"
exit 0
整个程序的撰写分成数段,大致是这样:
-
第一行#!/bin/bash在宣告这个script使用的shell名称:因为我们使用的是bash,所 以,必须要以“ #!/bin/bash ”来宣告这个文件内的语法使用 bash 的语法!那么当这个程 序被执行时,他就能够载入 bash 的相关环境配置文件 (一般来说就是 non-login shell 的 ~/.bashrc), 并且执行 bash 来使我们下面的指令能够执行。
-
程序内容的说明:整个script当中,除了第一行的“#!”是用来宣告shell的之外,其他的 # 都是“注解”用途! 所以上面的程序当中,第二行以下就是用来说明整个程序的基本数 据。一般来说, 建议你一定要养成说明该 script 的:1. 内容与功能; 2. 版本信息; 3. 作者与联络方式; 4. 创建日期;5. 历史纪录 等等。这将有助于未来程序的改写与 debug 呢!
-
主要环境变量的宣告:建议务必要将一些重要的环境变量设置好, 如此一来,则可 让我们这支程序在进行时,可以直接下达一些外部指令,而不必写绝对路径。
-
主要程序部分就将主要的程序写好即可!
-
执行成果告知(定义回传值)是否记得我们在第十章里面要讨论一个指令的执行成功与 否,可以使用 $? 这个变量来观察~ 那么我们也可以利用 exit 这个指令来让程序中断, 并且回传一个数值给系统。
撰写 shell script 的良好习惯创建
一定要养成良好的 script 撰写习惯,在每个 script 的文件开始处记录好:
- script 的功能;
- script 的版本信息;
- script 的作者与联络方式;
- script 的版权宣告方式;
- script 的 History (历史纪录);
- script 内较特殊的指令,使用“绝对路径”的方式来下达;
- script 运行时需要的环境变量预先宣告与设置。