0
点赞
收藏
分享

微信扫一扫

Shell脚本编程规范


文章目录

  • ​​一、注释​​
  • ​​`头部注释`​​
  • ​​`单行注释与多行注释`​​
  • ​​二、排版规范​​
  • ​​`1.程序块采用缩进,缩进为4个空格`​​
  • ​​修改vim中Tab键的距离​​
  • ​​`2.函数`​​
  • ​​函数功能注释​​
  • ​​函数编写​​
  • ​​`3.命令较长需分行书写,在低优先级操作符处划分新行,用'\'标识`​​
  • ​​`4.一行只写一条语句`​​
  • ​​`5.逻辑运算符&&、||和重定向、管道符前后要留空格`​​
  • ​​`6.一个函数只完成一个功能,且不能超过100行`​​
  • ​​`7.case语句格式`​​
  • ​​`8.注释与上面的代码用空行隔开`​​
  • ​​`9.循环和判断`​​
  • ​​for循环​​
  • ​​while​​

  • ​​三、变量规范​​
  • ​​`1.变量名由字母、数字、下划线组成, 只能以字母、下划线开头`​​
  • ​​`2.尽量减少全局变量,可在变量前面加local使其成为局部变量`​​
  • ​​`3.环境变量和全局变量大写,局部变量小写(使用下划线连接,如host_ip )`​​
  • ​​declare解释​​
  • ​​`4.引用变量用\${value}`​​
  • ​​`4.不能被清除和修改的变量通过readonly variable声明`​​
  • ​​`5.常用变量集中写在脚本开头,便于修改`​​
  • ​​`6.对变量赋空值时,建议使用unset`​​
  • ​​`7.用ln创建软链接文件,必须先判断文件是否存在,存在时必须先删除,然后再创建软链接`​​
  • ​​`8.命令替换推荐使用$(),并用双引号括起来,在groovy中建议使用``(反撇号)`​​
  • ​​四、安全清理​​
  • ​​`1.环境变量和history不能有敏感信息`​​
  • ​​五、建议​​
  • ​​参考文章​​

俗话说“无规矩不成方圆”,虽然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
函数名后面必须加小括号()
第一个大括号与小括号之间保留一个空格
第二个大括号顶格单独占一行
同级别的代码块要左对齐
举例

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到父目录,再删除子目录

参考文章

​​Linux Shell 脚本编程最佳实践​​​​在线检查shell的工具​​


举报

相关推荐

Shell脚本编程规范与变量

shell脚本的编程规范与变量

shell 脚本规范

Shell编程规范

Shell 编程规范与变量

Shell编程规范与变量

Shell编程规范及变量

shell编程规范与变量

0 条评论