文章目录
- 一、注释
- 二、排版规范
- 三、变量规范
- 四、安全清理
- 五、建议
- 参考文章
俗话说“无规矩不成方圆”,虽然Shell是一门自由度很高的语言,没有严格的缩进要求、使用变量不需要事先声明、赋值即确定数据类型,但是按照适当的规范会使代码看起来美观、易于维护、易于看懂,下面根据个人经验总结了一些编程规范。
一、注释
头部注释
#!/bin/bash # vim:sw=4:ts=4:et <<INFO SCRIPYT:test.sh AUTHOR:anqixiang
<邮箱号>
DATE:2021-09-12 DESCRIBE:描述脚本主要功能 SYSTEM:适配哪些操作系统 WARNING:警告信息 VERSION:1.1.0
<可选>
MODIFY:记录修改信息,方便查看和维护 INFO
可选>
邮箱号>
单行注释与多行注释
单行注释以#号开头,如
#修改IP地址
多行注释表示方法(INFO可以用别的标识代替,但需与结尾保持一致)
<<INFO SCRIPYT:test.sh AUTHOR:anqixiang
<邮箱号>
DATE:2021-09-12 INFO
邮箱号>
二、排版规范
1.程序块采用缩进,缩进为4个空格
修改vim中Tab键的距离
举例
while true do sleep 5 done
2.函数
函数功能注释
所有的函数注释应该包含:
- 函数的描述
- 全局变量的使用和修改
- 使用的参数说明
- 返回值,而不是上一条命令运行后默认的退出状态
示例:
# Cleanup files from the backup dir # Globals: # BACKUP_DIR # BACKUP_SID # Arguments: # None # Returns: # None cleanup() {
... }
函数编写
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 # 长命令管道换行连接,管道放置于下一个命令开头,缩进4个空格 command1 \ | command2 \ | command3 \ | command4
6.一个函数只完成一个功能,且不能超过100行
7.case语句格式
case $value in val1) command 1 ;; a|b) command 2 ;; *) command 3 esac
8.注释与上面的代码用空行隔开
command 1 [空一行] #注释内容 command 2
9.循环和判断
for循环
for i in 1..3 do if [[ $i -eq 1 ]];then echo "等于1" elif [[ $i -eq 2 ]];then echo "等于2" else echo "等于3" fi done
while
while read line do ... done < file.txt 或者 command | while read line do ... done
三、变量规范
1.变量名由字母、数字、下划线组成, 只能以字母、下划线开头
2.尽量减少全局变量,可在变量前面加local使其成为局部变量
local name="" for name in a b do echo ${name} done
全局变量仅在当前Shell有效,使用export定义的全局变量在所有子进程中依然有效
3.环境变量和全局变量大写,局部变量小写(使用下划线连接,如host_ip )
readonly PATH_TO_FILES='/some/path' #不能修改的变量添加readonly 属性 declare -xr BACKUP_SID='PROD'
declare解释
功能介绍:声明变量的属性,如果使用declare,后面没有任何参数,那么bash就会主动将所有变量名与内容都调出来,just as set.
语 法:declare [-aixr] variable
参数说明:
-a :将后面的variable定义为数组
-i :将后面的variavle定义为整数数字
-x :用法与export一样,就是将后面的variable变成环境变量
-r :将一个variable的亦是设置成只读,读变量不可更改内容,也不能unset
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
- 使用rm删除目录的时候建议先cd到父目录,再删除子目录
参考文章
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229852.html原文链接:https://javaforall.net
