Shell脚本书写规范

在日常的运维工作中,Shell脚本肯定是必不可少的工作内容。为方便问题排查、脚本执行历史问题追踪、方便大家共同维护,从网上搜罗结合以往的经验教训拟定以下Bash脚本书写规范。欢迎各位同学指正或补充。

代码风格规范

开头有“蛇棒”
所谓shebang其实就是在很多脚本的第一行出现的以”#!”开头的注释,他指明了当我们没有指定解释器的时候默认的解释器,一般可能是下面这样:

#!/bin/bash

当然,解释器有很多种,除了bash之外,我们可以用下面的命令查看本机支持的解释器:

[root@thatsit 00:20:11 ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/dash /bin/tcsh /bin/csh /usr/bin/tmux [root@thatsit 00:28:32 ~]#

当我们直接使用./a.sh来执行这个脚本的时候,如果没有shebang,那么它就会默认用$SHELL指定的解释器,否则就会用shebang指定的解释器。

不过,上面这种写法可能不太具备适应性,一般我们会用下面的方式来指定:

#!/usr/bin/env bash 代码有注释

注释,显然是一个常识,不过这里还是要再强调一下,这个在shell脚本里尤为重要。因为很多单行的shell命令不是那么浅显易懂,没有注释的话在维护起来会让人尤其的头大。
注释的意义不仅在于解释用途,而在于告诉我们注意事项,就像是一个README。
具体的来说,对于shell脚本,注释一般包括下面几个部分:

shebang

脚本的参数

脚本的用途

脚本的用法及注意事项

脚本试用平台

脚本的写作时间,作者,版权等

各个函数前的说明注释

一些较复杂的单行命令注释

简单脚本头样例

#!/bin/bash ######################################################### # Function :Rotate application logs # # Platform :All Linux Based Platform # # Version :1.0 # # Date :2017-07-28 # # Author :Stephen.Shi # # Contact :sp@meitu.com # # Company :MeiTu # ######################################################### 参数要规范

这一点很重要,当我们的脚本需要接受参数的时候,我们一定要先判断参数是否合乎规范,并给出合适的回显,方便使用者了解参数的使用。
最少,最少,我们至少得判断下参数的个数吧:

args judgement 姿势1

if [[ $# != 2 ]];then echo "Parameter incorrect." exit 1 fi

args judgement 姿势2

# Uasge help_msg(){ echo "Usage: $0 <server_group_to_operate>" } # arg judge if [[ $# -ne 1 ]] then help_msg else xxoo_func fi 环境变量和魔数

一般情况下我们会将一些重要的环境变量定义在开头,确保这些变量的存在。

source /etc/profile export PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/apps/bin/"

这种定义方式有一个很常见的用途,最典型的应用就是,当我们本地安装了很多java版本时,我们可能需要指定一个java来用。那么这时我们就会在脚本开头重新定义JAVA_HOME以及PATH变量来进行控制。

同时,一段好的代码通常是不会有很多硬编码在代码里的“魔数”的。如果一定要有,通常是用一个变量的形式定义在开头,然后调用的时候直接调用这个变量,这样方便日后的修改。

变量的定义和引用

变量的定义和引用需要遵循一定的规范:

名称长的变量尽量使用驼峰写法或者使用小写字母+下划线的方式进行命名

常量的定义推荐使用大写字母进行命名

在引用变量时为了避免不必要的麻烦,尽量使用${变量名}的方式进行引用

变量名引用的坑的样例

[root@thatsit scripts]$ cat var_test.sh #!/bin/bash xx="heiheihei" xx_="123" oo="666" echo $xx$oo echo "----" echo $xx_$oo echo "----" echo ${xx}_${oo} [root@thatsit scripts]$ sh var_test.sh heiheihei666 ---- 123666 ---- heiheihei_666 [root@thatsit scripts]$ 缩进有规矩

对于shell脚本,缩进是个大问题。因为很多需要缩进的地方(比如if,for语句)都不长,所有很多人都懒得去缩进,而且很多人不习惯用函数,导致缩进功能被弱化。
其实正确的缩进是很重要的,尤其是在写函数的时候,否则我们在阅读的时候很容易把函数体跟直接执行的命令搞混。
常见的缩进方法主要有”soft tab”和”hard tab”两种。

所谓soft tab就是使用n个空格进行缩进(n通常是2或4)

所谓hard tab当然就是指真实的”\t”字符,这里不去撕哪种方式最好,只能说各有各的优劣。反正我习惯用四个空格(美剧《硅谷》中的男主执着于用tab,并因此跟习惯使用空格的女友分手,哈哈)。

命名有标准

所谓命名规范,基本包含下面这几点:

文件名规范,以.sh结尾,方便识别

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwxdxg.html