bash脚本小技巧之一:set -e和set -u

今天一朋友问我一个bash脚本在开头出现了set -u 和 set -e 两行是什么作用,我也纳闷没见过这样的写法啊于是百度了一下,才发现原来这两个bash的选项这么有用,这边记录下方便以后查阅。

   set -e     设置该选项后,当脚本中任何以一个命令执行返回的状态码不为0时就退出整个脚本(默认脚本运行中某行报错会继续往下执行),这样就不必设置很多的判断条件去判断每个命令是否执行成功,特别那些依赖很强的地方,脚本任何一处执行报错就不应继续执行其他语句的时候就特别有用,之前写的一些像LAMP的安装脚本就深有体会。。。

   简单的写个脚本测试下,在不使用set -e 的时候执行如下脚本:

11

   执行结果,可以看到报错后继续运行,输出了 End 

12

   在脚本中加入set -e 后,执行结果:

13

   set -u     设置该选项后,当脚本在执行过程中尝试使用未定义过的变量时,报错并退出运行整个脚本(默认会把该变量的值当作空来处理),这个感觉也非常有用,有些时候可能在脚本中变量很多很长,疏忽了把某个变量的名字写错了,这时候运行脚本不会报任何错误,但结果却不是你想要的,排查起来很是头疼,使用这个选项就完美的解决了这个问题。

  同样来简单测试下:

1

   在不加set -u 时,执行不会有任何问题,会把$GOOD变量当作空值来处理:

2

   当加上set -u时的运行结果:

3

   还有其他一些可以设置的bash选项,个人感觉作用不是很大,就不再一一介绍,有兴趣的可以百度。


原文地址:https://www.cnblogs.com/djwhome/p/12757725.html