shell编写规范有哪些

70次阅读
没有评论

共计 2678 个字符,预计需要花费 7 分钟才能阅读完成。

这篇文章主要介绍了 shell 编写规范有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。

shell 编写规范,编写时严格遵守这些规范,不仅使编写人受益,同时也能提高使用者的执行效率。

1)脚本开头部分应有脚本功能说明、参数使用说明、作者姓名、创建 / 修改日期、版本信息,格式为:

2)脚本编写时,注意格式对齐,如所有的循环或者判断语句前后的语句进行对齐,以及 case 的选取完全,如:

3)脚本开头执行时,执行如下命令,在执行过程中若遇到使用了未定义的变量或命令返回值为非零,将直接报错退出:

4)建议将命令行的每个参数放在单引号、双引号中,特别是 rm、mv 等可能对生产现有数据造成修改的操作,建议使用垃圾箱策略:rm 操作转意为 mv 操作,制定文件保存目录,以防回退,并定期清理:

5)命令行中参数需要使用 lsquo;* rsquo;、lsquo;? rsquo; 通配符的,应依据最精确匹配原则,如能确定文件、目录名称的前缀、后缀、扩展名及其他可识别关键字的,须在参数中包含该信息,如能确定文件、目录的长度应使用 lsquo;? rsquo; 通配符,不得使用 lsquo;* rsquo;,推荐的使用方式:

不推荐使用的方式:

禁止使用的方式:

6)给数值型变量的赋值后,需由手段保证变量的值为数值型,避免在后续的处理中出现异常:

7)在判断条件中使用的变量,必须包含在双引号中,如:

禁止使用的方式:

​shell 编写规范有哪些

8)对文件进行打包备份时,必须使用相对路径进行打包,如:

​shell 编写规范有哪些

严禁将全路径打入 tar 包,如:

​shell 编写规范有哪些

9)对于打包后还需进行压缩的文件,建议使用管道进行处理,如:

​shell 编写规范有哪些

不建议两部分分开执行:

​shell 编写规范有哪些

10)使用 ps 命令筛选进程时,如能确定进程所属用户,必须在参数中指定用户名称,如其输出作为 kill 命令的输入,则必须指定进程所属用户,如:

​shell 编写规范有哪些

​shell 编写规范有哪些

这里介绍的主要是日常 shell 编写中遇到比较隐蔽或看似简单,却难以发现的“坑”,编写中应尽量避免使用,使用更优的方法避免重蹈覆辙。

1)更新文件使用 不用 cp

使用 修改和回退文件时,保留原文件的属组和权限,避免使用 cp 时权限属组被修改。

​shell 编写规范有哪些

2)使用 kill 前确认

关键字用 -w 精确匹配字段;

kill 前后都保留现场, 两次 ps -ef|grep -w 关键字 |grep -v grep   /tmp/kill_进程名_.backup;

删除前要校验,获取进程号是否唯一,避免多杀或误杀的情况。

​shell 编写规范有哪些

3)使用 rm 前确认

删除前备份删除对象信息,避免使用变量,直接使用文件和目录名;

如果必须使用时,删除前,建议检查避免误删,删除目录和文件信息保留:

​shell 编写规范有哪些

建议禁用 find 遍历根目录进行查找,同时删除前进行确认,避免多删或误删的情况。

4)For 循环的坑

for 循环的 in 条件按空格来区分,避免进入不正确或死循环。

​shell 编写规范有哪些

5)while 循环的禁忌

如果还想使用循环中的变量,不要 while 结合管道使用。

​shell 编写规范有哪些

6)慎用 cp

这句话基本上正确,但同样有空格分词的问题。所以应当用双引号:

​shell 编写规范有哪些

但是如果凑巧文件名以 – 开头,这个文件名会被 cp 当作命令行选项来处理。

可以试试下面这个:

​shell 编写规范有哪些

但也可能再碰上一个不支持 — 选项的系统,所以 *** 用下面的方法:

​shell 编写规范有哪些

7)慎用 cd

避免使用 cd 到操作目录再操作的方式,可能导致进入目录失败,误删除,如:

​shell 编写规范有哪些

建议如下:

​shell 编写规范有哪些

8) 用 [[]] 代替[]

​shell 编写规范有哪些

当 $var 为空时,上面的命令就变成了[= bar]

类似地,当 $var 包含空格时:

[space words here = var]两者都会出错。所以应当用双引号将变量括起来:

[$var = var] 几乎 *** 了。

但是,当 $var 以 – 开头时依然会有问题。在较新的 bash 中你可以用下面的方法来代替,[[]]关键字能正确处理空白、空格、带横线等问题。

​shell 编写规范有哪些

另注意,[[适用于字符串,如果是数值,要用如:(( $var 8))

9)管道操作中不要同时读写文件

​shell 编写规范有哪些

你不能在同一条管道操作中同时读写一个文件。根据管道的实现方式,file 要么被截断成 0 字节,要么会 *** 增长直到填满整个硬盘。如果想改变原文件的内容,只能先将输出写到临时文件中再用 mv 命令。

​shell 编写规范有哪些

10)cd 的易错问题

cd 有可能会出错,导致要执行的命令就会在你预想不到的目录里执行了。所以一定要记得判断 cd 的返回值。

​shell 编写规范有哪些

如果你要根据 cd 的返回值执行多条命令,可以用 ||。

​shell 编写规范有哪些

关于目录的一点题外话,假设你要在 shell 程序中频繁变换工作目录,如下面的代码:

​shell 编写规范有哪些

不如这样写:

​shell 编写规范有哪些

括号会强制启动一个子 shell,这样在这个子 shell 中改变工作目录不会影响父 shell(执行这个脚本的 shell),就可以省掉 cd – 的麻烦。

​shell 编写规范有哪些

目前行里自动化工具越来越多,无论是应用的 MAOP 或系统的 SMDB,自动化实现都还是日常运维脚本的调用,结合日常运维的一些经验,脚本中就更需要考虑周全和控制风险。这里介绍一些结合运维场景的脚本应用,希望规避以前犯过的错,重点在控制风险。

1) 支持交互式脚本的应用

很多脚本中需要进行交互,在规避风险的同时,需要通过自动化工具发布来支持交互,可以使用 expect,示例如下

​shell 编写规范有哪些

也可以使用 curl 工具来替代简单的交互:

#FTP SFTP 下载

curl-u ftpuser:ftppassword -O  sftp://ftp_ip:ftp_port/pathfile

#FTP SFTP 上传

curl-u ftpuser:ftppassword --ftp-create-dirs-T upfile  sftp://ftp_ip:ftp_port/filepath/upfile

2)脚本规范执行和日志追溯

直接执行的脚本很危险,要提示用户如何使用脚本,并记录日志以便跟踪。

示例如下:

​shell 编写规范有哪些

3)脚本的并发锁控制

避免多人同时执行或并发同时执行的异常问题,建议增加锁机制,示例如下:

​shell 编写规范有哪些

4)控制脚本不退出的风险

周期频繁执行的脚本,需要防止脚本 hang 住不退出,导致后续脚本再次执行。

​shell 编写规范有哪些

5)避免集中发布脚本造成的风险

使用 ftp、sftp 传输、下载文件,或者集中访问存储端口时,尽量增加发布对象散列,避免集中操作造成存储端口拥堵,跨防火墙流量超限报警等影响。

​shell 编写规范有哪些

6)避免文件 *** 增长的风险

向一个文件中追加数据时,一定要设置阀值,必要时清空,避免文件 *** 增大:

​shell 编写规范有哪些

目录增加清理过期文件策略,避免产生的文件越来越多,造成文件节点用尽:

​shell 编写规范有哪些

目录中的文件过多,会报参数太长错误无法删除,建议放在循环中遍历删除:

​shell 编写规范有哪些

感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“shell 编写规范有哪些”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-04发表,共计2678字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)