shell代码规范
1.注释
(1)文件注释:每个Shell Script文件应该包含文件注释,文件用途、版本、作者、生成日期
(2)函数注释:每个函数应该包含注释,说明函数用途、参数及返回值,函数添加时间(修改原有代码情况下)
(3)代码段注释:函数体中的代码段应该包含必要的注释,方便理解相应逻辑
2.缩进(空格 空行)
空格
保持缩进4个空格,应该缩进有以下基本情形:
(1)函数体开始的位置
(2)条件、循环、分支的执行部分
(3)程序转行
(4)管道、重定向、逻辑连接符前后建议加空格
command1 | command2 > /dev/null 2>&1
command1 || command2
command1 && command2
(5)运算符、判断符前后建议加空格,有语法限制的除外
if [[ -d dir1 ]]
then
command
fi
空行起着分隔程序段落的作用,使得程序看起来成"块状",逻辑结构清晰。建议:
(1)每个函数定义结束后要加空行
(2)逻辑块之间要有空行分隔,且添有简短说注释
(3)逻辑紧密的语句之间不加空行
3.长度
(1)一个函数的长度应该在20-50行之间比较合适,如果太长或者太短则建议对函数进行分割或合并
(2)每行的代码应该控制在80个字符内,否则使用"\"将其分成多行,如:
echo "aaa bbb ccc ddd eee fff ggg hhh iii jjj kkk lll mmm"\
>>$tempfile
4.变量
命名规则:
(1)使用英文字母,数字和下划线命名
(1)变量加双引号引用,使用"${var}"
(2)引用所有变量,使用"$@"
(3)将全局变量写在脚本开头或独立函数中
(4)全局变量使用大写,但不得与系统变量冲突,局部变量使用下划线命名法
(5)function内的局部变量使用local限定符,但应避免下列情况:
local tag=$(echo "aaa")
[ $tag = "0" ] || exit 1
5.函数
函数的命名推荐使用下划线分割小写字母的方式,命名结构形如:
(1)设备名_操作名():表达的意思是要对什么设备进行什么操作,例如array_handle()表示对一个数组进行操作。
(2)操作名():一些简单的操作,可以直接用操作名来做函数名,但不与系统命令冲突
(3)返回值:显式函数返回使用return,脚本退出使用exit;返回值为成功或失败时,使用全局变量${SUCC}、${FAIL}
(4)函数的边界大括号单独占一行,缩进与函数名一致,函数体内缩进一次,例如:
function exam()
{
commands
}
6.部分指令使用风格
shell版本,无特殊情况,一般使用/bin/bash
(1)命令替换使用$()
(2)创建目录使用mkdir –p
(3)脚本中尽量避免使用*匹配
(4)远程执行指令一定要设置超时,防止挂死
(5)test采用 [[ ]]格式,避免变量为空错误
(6)避免拷贝错误:cp file dir/ 一定记住最后的“/”
(7)判断时,使用[ "x${var}" = "xsomething" ]进行判断
(8)在使用cat $file、grep $reg file、rm -rf $file/*等指令时,必须做变量为空的判断
(9)如果采用后台运行使用wait等待后台进程结束: ( command1 ; command2 ) & wait或设置超时
(10)匹配字符串数量时,使用$(command | grep -ic "reg"),而不是$(command | grep -i "reg" | wc -l)
(11)匹配多个字符串时,建议使用 egrep "reg1|reg2" regfile,而不是grep -e "reg1" -e "reg2" regfile
(12)多个条件判断时,建议使用
if [ condition1 ] && [ condition2 ] if [ condition1 -a condition2 ]
then then
command command
fi fi
阅读(2738) | 评论(0) | 转发(0) |