俗话说“无规矩不成方圆”,虽然Shell是一门自由度很高的语言,没有严格的缩进要求、使用变量不需要事先声明、赋值即确定数据类型,但是按照适当的规范会使代码看起来美观、易于维护、易于看懂,下面根据个人经验总结了一些编程规范。
一、注释
头部注释
#!/bin/bash
<<INFO
SCRIPYT:test.sh
AUTHOR:anqixiang<邮箱号>
DATE:2021-09-12
DESCRIBE:描述脚本主要功能
SYSTEM:适配哪些操作系统
WARNING:警告信息
VERSION:1.1.0<可选>
MODIFY:记录修改信息,方便查看和维护
INFO
单行注释与多行注释
单行注释以#号开头,如
多行注释表示方法(INFO可以用别的标识代替,但需与结尾保持一致)
<<INFO
SCRIPYT:test.sh
AUTHOR:anqixiang<邮箱号>
DATE:2021-09-12
INFO
二、排版规范
1.程序块采用缩进,缩进为4个空格
举例
while true
do
sleep 5
done
2.函数编写
函数首字母大写,并用“_”隔开,如Modify_Ip; 函数名后面必须加小括号() 第一个大括号紧接小括号后面 第二个大括号顶格单独占一行 同级别的代码块要左对齐 举例
Modify_Ip(){
command1
command2
if 表达式;then
command 3
else
command 4
fi
}
3.命令较长需分行书写,在低优先级操作符处划分新行,用'\'标识
command 1 | command 2 \
&& command 3 \
|| command 4
4.一行只写一条语句
command 1;command 2
command 1
command 2
5.逻辑运算符&&、||和重定向、管道符前后要留空格
command 1 && command 2
command 1 | command 2
6.一个函数只完成一个功能,且不能超过100行
7.case语句格式
case $value in
val1)
command 1
;;
*)
command 2
esac
8.注释与上面的代码用空行隔开
command 1
[空一行]
command 2
三、变量规范
1.变量名由字母、数字、下划线组成, 只能以字母、下划线开头
2.尽量减少全局变量,可在变量前面加local使其成为局部变量
local num=0
全局变量仅在当前Shell有效,使用export定义的全局变量在所有子进程中依然有效
3.环境变量和全局变量大写,局部变量小写(使用下划线连接,如host_ip ),函数名首字母大写(建议使用动词_名字组合,如Modify_Ip)
4.引用变量用\${value}
val=${value}
[[ ${value} == "test" ]] && command 1
4.不能被清除和修改的变量通过readonly variable声明
5.常用变量集中写在脚本开头,便于修改
6.对变量赋空值时,建议使用unset
unset sum
7.用ln创建软链接文件,必须先判断文件是否存在,存在时必须先删除,然后再创建软链接
[ -h /data ] && rm -rf /data
ln -sf /home/data /data
8.命令替换推荐使用$(),在groovy中建议使用``(反撇号)
local_ip=$(ip addr | grep ......)
四、安全清理
1.环境变量和history不能有敏感信息
五、建议
- 判断推荐使用[[ ]]
- 判断命令是否存在用command -v代替which(command是内部命令,系统自带;如果命令不存在不会输出任何信息)
- 路径尽量保持绝对路径,不易出错,如果非要用相对路径,最好用./修饰
- 简单的if尽量使用&& ||,写成单行。比如[[ x > 2]] && echo x
|