Shell多行命令脚本,当发生错误时自动退出

当写一个多行的shell脚本,发现前一个脚本发生错误,后面的脚本依旧会执行。

如果我们在控制台通过一行脚本完成多个命令可以这么写

1
> ls erroooooooooooor && echo 'not exec'

将会输出

1
>> ls: cannot access 'erroooooooooooor': No such file or directory

如果erroooooooooooor,后面的命令不会执行

那如果我们写成脚本文件test.sh, 写成多行命令

1
2
3
4
#/bin/bash

ls erroooooooooooor
echo 'not exec'

执行test.sh将会输出

1
2
>> ls: cannot access 'erroooooooooooor': No such file or directory
>> not exec

上面的脚本将会输出一行错误和一行not exec, 没有在错误发生时结束后面的脚本

那么我们将如何确保错误发生时,结束后续脚本呢?
我可以添加前面set -e 命令

1
2
3
4
5
6
#/bin/bash

set -e

ls erroooooooooooor
echo 'not exec'

这次我们将得到和控制台执行命令一样的结果

1
>> ls: cannot access 'erroooooooooooor': No such file or directory

发生错误的后续命令脚本将不会执行
顺便说一下,如果在后续脚本控制流中取消错误退出命令,可以执行set +e命令