文中摘自微信公众平台「编程珠玑」,作者守望老先生 。转截文中请联络编程珠玑微信公众号。
假如秉持着能跑就可以了的心态写shell脚本,是很自得的,可是当你要想写下健硕,靠谱的shell脚本,可不容易。那麼有哪些可使用的工作经验或是方式吗?
语法检查
第一个有效的方法便是利用专用工具对脚本开展查验,这一部分早已在《有了这个神器,再也不怕shell写不对了》中详细介绍过去了,它能最高水平地发觉shell脚本中具有的拼写错误,假如你还不知道,提议你肯定不可以错过了。
而为了确保脚本健硕靠谱,那麼就要确保脚本在一些独特的状况尽早发生,防止散兵游勇。一起来看看有什么行得通的方法。
脚本不成功时即退出
可以在脚本的开始设定如下所示:
举例说明:
这样的事情下,运作一旦出差错便会退出,绝不放过一个问题:
当然,这也是有不行的地区,有时指令执行原本就可能是不成功的,你或是期待它再次,可以临时性再加上|| true:
但是本人感觉这种的设定用途并不是尤其大,由于许多情况下也是必须解决差异的不正确状况,而那样只有要不碰到不正确退出,要不觉得恰当,造成没法来到出现异常支系。
根据set e设定回家:
打印出脚本执行全过程
调节环节,你也许想要知道整个过程是执行了什么指令,每条命令都实际执行了哪些,可以利用下边的方法执行:
或是,和上边相近,在开始再加上set -x:
执行时,輸出如下所示:
前边带 的信息便是指令具体执行的,你能见到较为标准是啥,自变量被进行变成主要内容,走到了哪个支系,十分清晰。
表明未声明的自变量
shell中变量沒有界定,依然是可以采用的,可是它的效果很有可能不是你所预计的。举例说明:
这儿原本想分辨var的信息是不是为abc,事实上var并沒有界定,可是在这儿应用并沒有出错,如果我们想尽早发觉这类问题,防止在错综复杂的脚本中问题被遮盖,那麼可以在开始再加上
:
再度运作便会提醒:
再遐想一下,你原本想删掉:
随后dir是空的情况下,变成了哪些?
是否有一种后背发麻的觉得?
管路指令一个不成功时全部不成功
有时大家也许会执行相近那样的指令:
三条命令一行执行,如果我们期待之中一条不成功,全部指令就不成功,而防止执行后边无意义的指令,那麼可以在逐渐设定:
不设置的情形下,cat test.sh即使执行失败了,后边的grep事实上还会执行,很有可能会致使一些意想不到的状况产生,假如不愿意那样的状况产生,那麼那样设定是有幫助的。
针对静态变量应用readonly
通常大家会在脚本开始界定一些静态变量:
而为了防止MY_PATH被出现意外改动,可以那样:
那样的话,一旦后边有指令试着改动,便会出错。
运作一下试一下:
看,给你提示了!
给变量设置可选的初始值
例如:
这儿让name为$1,即第一个主要参数,而当它为空时,令name为shouwang。
好几条指令实行应用&&
例如:
这儿假如cmd0失败了,后边的指令依然会实行,而如果不期待后边的指令实行,可以应用:
使用函数公式
脚本制作自身较为短还行,而脚本制作一旦拉长,不应用函数公式,将促使脚本制作难以维护保养,易读性也很差。
汇总
事实上最初详细介绍的脚本制作查验专用工具就己经十分合理了,基本上的失误都能查验出去,而其余的內容,大量的是关心于脚本制作调节,绝不放过一切一个有可能的不正确。
最终,或是优先选择强烈推荐shellcheck专用工具。详细地址:https://www.shellcheck.net
创作者:守望,linux运用开发人员,现阶段在微信公众号【编程珠玑】?共享Linux/C/C /算法设计与优化算法/专用工具等原创设计技术性文章内容和教学资源。
全文连接:https://mp.weixin.qq.com/s/EpCoiHHpCdPcj8kkeRjHjw