Shell开发在运维中的经验总结
但是,当$var以 - 开头时依然会有问题。在较新的bash中你可以用下面的方法来代替,[[ ]]关键字能正确处理空白、空格、带横线等问题。 另注意,[[适用于字符串,如果是数值,要用如:(( $var > 8 )) 9)管道操作中不要同时读写文件 你不能在同一条管道操作中同时读写一个文件。根据管道的实现方式,file要么被截断成0字节,要么会无限增长直到填满整个硬盘。如果想改变原文件的内容,只能先将输出写到临时文件中再用mv命令。 10)cd的易错问题 cd 有可能会出错,导致要执行的命令就会在你预想不到的目录里执行了。所以一定要记得判断cd的返回值。 如果你要根据cd的返回值执行多条命令,可以用 ||。 关于目录的一点题外话,假设你要在shell程序中频繁变换工作目录,如下面的代码: 不如这样写: 括号会强制启动一个子shell,这样在这个子shell中改变工作目录不会影响父shell(执行这个脚本的shell),就可以省掉cd - 的麻烦。 目前行里自动化工具越来越多,无论是应用的MAOP或系统的SMDB,自动化实现都还是日常运维脚本的调用,结合日常运维的一些经验,脚本中就更需要考虑周全和控制风险。这里介绍一些结合运维场景的脚本应用,希望规避以前犯过的错,重点在控制风险。 1) 支持交互式脚本的应用 很多脚本中需要进行交互,在规避风险的同时,需要通过自动化工具发布来支持交互,可以使用expect,示例如下 也可以使用curl工具来替代简单的交互: #FTP SFTP下载
#FTP SFTP上传
2)脚本规范执行和日志追溯 直接执行的脚本很危险,要提示用户如何使用脚本,并记录日志以便跟踪。 示例如下: 3)脚本的并发锁控制 避免多人同时执行或并发同时执行的异常问题,建议增加锁机制,示例如下: 4)控制脚本不退出的风险 周期频繁执行的脚本,需要防止脚本hang住不退出,导致后续脚本再次执行。 5)避免集中发布脚本造成的风险 使用ftp、sftp传输、下载文件,或者集中访问存储端口时,尽量增加发布对象散列,避免集中操作造成存储端口拥堵,跨防火墙流量超限报警等影响。 6)避免文件无限增长的风险 向一个文件中追加数据时,一定要设置阀值,必要时清空,避免文件无限增大: (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |