所有语言都有异常处理机制,shell 也不例外。java 的异常处理,经常被人们吐槽,那么 shell 的异常处理机制又是怎样的呢?通过本文我们一起来看看。
如果脚本里面有运行失败的命令(返回值非0),Bash 默认会继续执行后面的命令。
#!/usr/bin/env bash foo echo bar
上面脚本中,foo是一个不存在的命令,执行时会报错。但是,Bash 会忽略这个错误,继续往下执行。
$ bash script.sh script.sh:行3: foo: 未找到命令 bar
可以看到,Bash 只是显示有错误,并没有终止执行。
这种行为很不利于脚本安全和除错。实际开发中,如果某个命令失败,往往需要脚本停止执行,防止错误累积。这时,一般采用下面的写法。
command || exit 1
上面的写法表示只要command
有非零返回值,脚本就会停止执行。
如果停止执行之前需要完成多个操作,就要采用下面三种写法。
# 写法一 command || { echo "command failed"; exit 1; } # 写法二 if ! command; then echo "command failed"; exit 1; fi # 写法三 command if [ "$?" -ne 0 ]; then echo "command failed"; exit 1; fi
另外,除了停止执行,还有一种情况。如果两个命令有继承关系,只有第一个命令成功了,才能继续执行第二个命令,那么就要采用下面的写法。
command1 && command2
: » Shell Bash 的错误处理
原创文章,作者:wure,如若转载,请注明出处:https://blog.ytso.com/252572.html