《Shell 编程》13_Shell 脚本规范及调试
Shell
13.1 Shell 脚本规范
13.1.1 Shell 脚本基本规范
1)在 Shell 脚本里,第一行通常用于指定脚本解释器:
#!/bin/bash 或 #!/bin/sh
- 在 Shell 脚本的开头处解释器代码后,最好加上版本版权等信息:
#Date: 15:00 2018-11-02
#Author: ylt
#Mail: 1622320046@qq.com
#Bolg: https://blog.csdn.net/weixin_42061048
#Function: ...
#Version: 1.0
此外
- Shell 脚本中尽量不要用中文注释,应用英文注释。
- Shell 脚本命名应以 “.sh” 为扩展名。
- Shell 脚本应存放在固定的路径下。
- 成对的符号应一次写出来,然后退格在符号里增加内容,以防遗漏。
{} [] () '' `` ""
- 中括号两端至少要有 1 个空格。
- 流程控制语句(if、for、while、until、case 等)应一次将格式写完,再添加内容。
- 字符串赋值给变量时应加双引号,并且等号前后不能有空格。
13.1.2 Shell 脚本变量命名及引用变量规范
1)全局变量定义
- 全局变量也称环境变量,它的定义应全部大写,名字对应的语义要尽量清晰,能够正确表达变量内容的含义。
- 对于过长的英文单词可用前几个字符代替。
- 多个单词间用下划线 “_” 连接。
- 全局变量的定义一般放在系统的全局路径中,并且最好采用 export 定义。
- 全局变量一般可在任意子 Shell 中直接使用(特殊情况除外,如定时任务执行 Shell 时就最好在 Shell 时就最好在 Shell 里重新定义这些全局变量,否则可能会出现问题)
2)局部变量定义
- 局部变量也称为普通变量,在常规脚本中,普通变量的命名也要尽可能统一,可以使用驼峰语法,即第二个单词的首字母大写,或者每个单词首字母大写。
- Shell 函数中的变量可以使用 local 方式进行定义,使之只在本函数作用域内有效,防止函数中的变量名称与外部程序中的变量相同,从而造成程序异常。
3)变量的引用规范
- 在引用变量时,若变量前后都有字符,则需要使用 ${var}(加大括号的方式)引用变量,以防产生歧义。
- 当变量内容为字符串时,需要使用 "${var}"(外面加双括号的方式)引用变量。
- 当变量内容为整数时,则最好直接使用 $var 来引用变量。
13.1.3 Shell 函数的命名及函数定义规范
- Shell 函数命名可采用单词首字母大写的形式,并且语义要清晰,也可以使用小写形式。
- 可以加前后缀,如
- 后缀为 Max 则为最大值,为 Min 则表示最小值
- 前缀 Is 为判断型函数,Get 为取值函数,Do 为处理函数
13.1.4 Shell 脚本(模块)命名规范
1)常规 Shell 脚本使用统一的后缀:.sh。
2)模块的启动和停止脚本统一命名为 start_模块名.sh 和 stop_模块名.sh。
3)监控脚本通常以 *_mon.sh 为后缀。
4)控制脚本一般以 *_ctl.sh 为后缀。
13.1.5 Shell 脚本代码框架
- 易变的信息(如报警的收件人,机器名、端口、用户名密码、URL等)最好都定义为变量或使用特殊位置的参数。
- 把 Shell 的通用变量以配置文件的形式单独存放,以 "功能.cfg" 来命名。
- 将程序的功能分段、分模块采用函数等来实现,并存放到单独的函数文件里,如果是通用的公共函数可以存放在 /etc/init.d/functions 下,调用时采用 source 文件全路径即可。
- 把脚本中的功能和配置明确分开,主脚本只用于实现程序主干,加载配置及加载函数等功能实现应尽量封装在子函数中。
13.1.6 Shell 脚本的变量及文件检查规范
- 脚本中要检查配置项是否为空、是否可执行等,尤其对于一些重要的、会影响下面脚本正常运行的配置项,必须进行是否为空等的检查,避免配置文件中出现遗漏等问题。
13.2 Shell脚本的调试
13.2.1 常见的 Shell 脚本错误范例
1)if 条件语句缺少结尾关键字
- 当执行脚本时提示输出错误后,不要只看提示的错误行,而是要观察整个相关的代码段。
- Shell 脚本解释器一般不会对脚本错误进行精确定位,而是在试图结束一个语句时进行错误统计。
2)循环语句缺少关键字
- for、while、until、case 语句是指实际语句段不正确,也许是漏写或拼错了固定结构中的一个保留字。
3)成对的符号落了单
4)中括号两端没有空格
13.2.2 Shell 脚本调试技巧
1)使用 dos2unix 命令处理在 Windows 下开发的脚本
- 对于在 Windows 下开发的脚本,明明经检查没有发现问题,但就是在执行时会出现莫名其妙的语法错误。这时,最好执行 dos2unix 格式化一下。
[root@web001 scripts]# dos2unix 266.sh
dos2unix: converting file 266.sh to Unix format ...
2)使用 echo 命令调试
- 一般应在可能出现问题的脚本的重要部分加入 echo 命令,例如在变量读取或修改操作的前后加入 echo 命令,并紧挨着退出命令 exit。
3)利用 bash 命令参数调试
sh [-nvx] scripts.sh
参数说明如下:
- -n:不会执行该脚本,仅检查脚本语法是否有问题,并给出错误提示。
- -v:在执行脚本时,先将脚本的内容输出到屏幕上,然后执行脚本,如果有错误,也会给出错误提示。
- -x:将执行的脚本内容及输出显示到屏幕上。
4) 使用 set 命令调试部分脚本内容
- set -n:读命令但不执行
- set -v:显示读取的所有行
- set -x:显示所有命令及其参数
- 通过 set -x 命令开启调试功能,通过 set +x 关闭调试功能
set -x #<== 开启调试
代码段
set +x #<== 结束调试