shell脚本中的exception处理?

我正在寻找shell脚本中的exception处理机制。 有没有尝试,在shell脚本中捕获等价的机制?

在bash中没有真正的try/catch (我假设你正在使用bash),但是你可以使用&&或者||来实现一个非常相似的行为。 。

在本例中,如果a_command 失败 (返回非零值), a_command运行fallback_command

 a_command || fallback_command 

在这个例子中,如果a_command 成功 (返回0),你想执行second_command

 a_command && second_command 

它们可以很容易地通过使用子shell混合在一起,例如,下面的命令将执行a_command ,如果成功则会运行other_command ,但是如果a_commandother_command失败,则会执行fallback_command

 (a_command && other_command) || fallback_command 

if / else结构和退出代码可以帮助你伪造一些。 这应该在Bash或Bourne(sh)中工作。

 if foo ; then else e=$? # return code from if if [ "${e}" -eq "1"]; then echo "Foo returned exit code 1" elif [ "${e}" -gt "1"]; then echo "Foo returned BAD exit code ${e}" fi fi 

这里有两个简单的bashfunctions可以在bash 中进行事件处理 :

你可以像这样使用它来进行基本的exception处理:

 onFoo(){ echo "onFoo() called width arg $1!" } foo(){ [[ -f /tmp/somefile ]] || throw EXCEPTION_FOO_OCCURED "some arg" } addListener EXCEPTION_FOO_OCCURED onFoo 

在bash中不支持使用try / catch块的exception处理,但是,你可能想试试看支持它的BANGSH框架(它有点像bash中的jquery)。

然而 ,没有级联try / catch-blocks的exception处理类似于事件处理 ,几乎在任何支持数组的语言中都是可能的。

如果你想让你的代码保持整洁(没有if / else的冗长),我会build议使用事件。

MatToufoutu推荐的build议(使用||和&&)不build议用于function,但可以使用简单的命令 。 (请参阅关于风险的BashPitfalls )

  { # command which may fail and give an error } || { # command which should be run instead of the above failing command }