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}5.不能被清除和修改的变量通过readonly variable声明6.常用变量集中写在脚本开头,便于修改7.对变量赋空值时建议使用unset8.用ln创建软链接文件必须先判断文件是否存在存在时必须先删除然后再创建软链接9.命令替换推荐使用$()并用双引号括起来在groovy中建议使用(反撇号)四、安全清理1.环境变量和history不能有敏感信息五、建议参考文章俗话说“无规矩不成方圆”虽然Shell是一门自由度很高的语言没有严格的缩进要求、使用变量不需要事先声明、赋值即确定数据类型但是按照适当的规范会使代码看起来美观、易于维护、易于看懂下面根据个人经验总结了一些编程规范。一、注释头部注释#!/bin/bash# vim:sw4:ts4:etINFO 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键的距离举例whiletruedosleep5done2.函数函数功能注释所有的函数注释应该包含函数的描述全局变量的使用和修改使用的参数说明返回值而不是上一条命令运行后默认的退出状态示例######################################## Cleanup files from the backup dir# Globals:# BACKUP_DIR# BACKUP_SID# Arguments:# None# Returns:# None#######################################cleanup(){...}函数编写函数首字母大写并用“_”隔开如Modify_Ip函数名后面必须加小括号()第一个大括号与小括号之间保留一个空格第二个大括号顶格单独占一行同级别的代码块要左对齐举例Modify_Ip(){command1 command2if表达式;thencommand3elsecommand4fi}3.命令较长需分行书写在低优先级操作符处划分新行用\标识command1|command2\command3\||command44.一行只写一条语句command1;command2#不推荐command1#推荐command25.逻辑运算符、||和重定向、管道符前后要留空格command1command2command1|command2# 长命令管道换行连接管道放置于下一个命令开头缩进4个空格command1\|command2\|command3\|command46.一个函数只完成一个功能且不能超过100行7.case语句格式case$valueinval1)command1;;a|b)command2;;*)command3esac8.注释与上面的代码用空行隔开command1[空一行]#注释内容command29.循环和判断for循环foriin1..3doif[[$i-eq1]];thenecho等于1elif[[$i-eq2]];thenecho等于2elseecho等于3fidonewhilewhilereadlinedo...donefile.txt 或者command|whilereadlinedo...done三、变量规范1.变量名由字母、数字、下划线组成 只能以字母、下划线开头2.尽量减少全局变量可在变量前面加local使其成为局部变量localnamefornameina bdoecho${name}done全局变量仅在当前Shell有效使用export定义的全局变量在所有子进程中依然有效3.环境变量和全局变量大写局部变量小写使用下划线连接如host_ip readonlyPATH_TO_FILES/some/path#不能修改的变量添加readonly 属性declare-xrBACKUP_SIDPRODdeclare解释功能介绍声明变量的属性如果使用declare,后面没有任何参数那么bash就会主动将所有变量名与内容都调出来just as set.语 法declare [-aixr] variable参数说明-a :将后面的variable定义为数组-i :将后面的variavle定义为整数数字-x :用法与export一样就是将后面的variable变成环境变量-r :将一个variable的亦是设置成只读读变量不可更改内容也不能unset4.引用变量用${value}val${value}[[${value}test]]command15.不能被清除和修改的变量通过readonly variable声明6.常用变量集中写在脚本开头,便于修改7.对变量赋空值时建议使用unsetunsetsum8.用ln创建软链接文件必须先判断文件是否存在存在时必须先删除然后再创建软链接[-h/data]rm-rf/dataln-sf/home/data /data9.命令替换推荐使用$()并用双引号括起来在groovy中建议使用(反撇号)local_ip$(ipaddr|grep......)四、安全清理1.环境变量和history不能有敏感信息五、建议判断推荐使用[[ ]]判断命令是否存在用command -v代替which(command是内部命令系统自带如果命令不存在不会输出任何信息)路径尽量保持绝对路径不易出错如果非要用相对路径最好用./修饰简单的if尽量使用 ||写成单行。比如[[ x 2]] echo x使用rm删除目录的时候建议先cd到父目录再删除子目录参考文章Linux Shell 脚本编程最佳实践在线检查shell的工具