Alex_McAvoy

想要成为渔夫的猎手

Shell 脚本的编写原则与执行

【Shell 脚本编写原则】

Shell 脚本

Shell 脚本(Shell scirpt),是利用 Shell 功能写的程序,是使用纯文本文件,其包含一些 Shell 的语法与命令,搭配正则表达式、管道命令、数据流重定向等

简单来说,Shell 脚本可以被看作批处理文件,一次执行多个命令,不需要编译即可执行,能够帮助管理员快速管理好主机

注意事项

在编写 Shell 脚本时,有以下几个注意事项:

  1. 命令从上到下、从左到右分析与执行
  2. 命令、参数间的多个空白都会被忽略掉
  3. 空白行将被忽略掉
  4. [Tab] 所得的空白被视为空格键
  5. 读取到一个 [Enter] 符号(CR),就会尝试执行该行命令
  6. 若一行命令太多,可以使用 \[Enter] 来将命令扩展到下一行
  7. # 为注释符号
  8. 第一行声明该脚本所使用的 Shell 名称,对于 bash 来说,一般为 #!/bin/bash
  9. 后缀名为 .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
2
scriptname opt1 opt2 opt3 opt4
$0 $1 $2 $3 $4

此外,还有一些特殊的变量可在 Shell 脚本内来调用:

  • $#:代表参数总数
  • $@:代表 "$1""$2""$3""$4" 等,每个变量是独立的
  • $*:代表 "$1c$2c$3c$4",其中 c 为分隔字符,默认为 [Space]

【Shell 脚本的追踪与调试】

在将 Shell 脚本文件通过 sh 命令执行时,可以附加一些选项,来对要执行的 Shell 脚本进行追踪与调试

  • -n:不执行该脚本,仅查询语法是否出现问题
  • -v:在执行该脚本前,先将脚本的内容输出到屏幕上
  • -x:在执行该脚本时,将使用到的内容输出到屏幕上

感谢您对我的支持,让我继续努力分享有用的技术与知识点!