【Shell 脚本编写原则】
Shell 脚本
Shell 脚本(Shell scirpt),是利用 Shell 功能写的程序,是使用纯文本文件,其包含一些 Shell 的语法与命令,搭配正则表达式、管道命令、数据流重定向等
简单来说,Shell 脚本可以被看作批处理文件,一次执行多个命令,不需要编译即可执行,能够帮助管理员快速管理好主机
注意事项
在编写 Shell 脚本时,有以下几个注意事项:
- 命令从上到下、从左到右分析与执行
- 命令、参数间的多个空白都会被忽略掉
- 空白行将被忽略掉
- [Tab] 所得的空白被视为空格键
- 读取到一个 [Enter] 符号(CR),就会尝试执行该行命令
- 若一行命令太多,可以使用
\[Enter]
来将命令扩展到下一行 #
为注释符号- 第一行声明该脚本所使用的 Shell 名称,对于 bash 来说,一般为
#!/bin/bash
- 后缀名为
.sh
文件头
除第一行为加载 bash 相关环境配置文件的而写入的 #!/bin/bash
外,通常为了便于 Shell 脚本的说明与维护,会根据实际情况在每个 Shell 脚本的文件头写入如下注释:
- Shell 脚本的功能
- Shell 脚本的版本信息
- Shell 脚本的作者与联络方式
- Shell 脚本的版权声明方式
- Shell 脚本的 History
- Shell 脚本内较为特殊的命令
- Shell 脚本执行时需要的环境变量预先声明与设置
【Shell 脚本的执行】
对于 Shell 脚本文件 *.sh
,必须要具备可读与可执行的权限(rx)
若想执行一个 Shell 脚本文件,其有两种基本的执行方式:
- 直接命令执行:输入 Shell 脚本的绝对路径、输入 Shell 脚本的相对路径、将 Shell 脚本写入 PATH 环境变量
- 以 Shell 进程执行:将 Shell 脚本文件通过
sh
命令执行,例sh test.sh
采用上述两种方式执行 Shell 脚本时,该脚本都会使用一个新的 Shell 环境来执行脚本内的命令,也就是说,Shell 脚本其实是在子进程内执行的,此时,在 Shell 脚本内的各项变量与操作在脚本结束后并不会传回到父进程
若想令 Shell 脚本在父进程中执行,此时直接使用 source 脚本名
命令即可
【Shell 脚本的默认变量】
就像命令带有参数一样,Shell 脚本同样可以带有参数
如下所示,执行的脚本文件名就是 $0
这个变量,后接的参数依次为 $1
、$2
、$3
、$4
等
1 | scriptname opt1 opt2 opt3 opt4 |
此外,还有一些特殊的变量可在 Shell 脚本内来调用:
$#
:代表参数总数$@
:代表"$1"
、"$2"
、"$3"
、"$4"
等,每个变量是独立的$*
:代表"$1c$2c$3c$4"
,其中c
为分隔字符,默认为 [Space]
【Shell 脚本的追踪与调试】
在将 Shell 脚本文件通过 sh
命令执行时,可以附加一些选项,来对要执行的 Shell 脚本进行追踪与调试
- -n:不执行该脚本,仅查询语法是否出现问题
- -v:在执行该脚本前,先将脚本的内容输出到屏幕上
- -x:在执行该脚本时,将使用到的内容输出到屏幕上