bash 抓捕异常_shell - Bash中是否有TRY CATCH命令

shell - Bash中是否有TRY CATCH命令

我正在编写一个shell脚本,需要检查是否已安装终端应用程序。 我想使用TRY / CATCH命令来执行此操作,除非有更简洁的方法。

10个解决方案

351 votes

Bash中有TRY CATCH命令吗?

没有。

Bash并没有像许多编程语言中那样多的奢侈品。

bash中没有if...else; 但是,使用command2或command1可以实现类似的行为。

使用if...else:

如果if...else失败,则command2运行如下

command1 || command2

同样,如果command1成功,将使用if...else,command2

最接近if...else如下

{ # try

command1 &&

#save your output

} || { # catch

# save log for exception

}

bash也包含一些错误处理机制

set -e

如果简单命令失败,它将立即停止您的脚本。 我认为这应该是默认行为。 由于这些错误几乎总是意味着意外的事情,因此继续执行以下命令并不是“理智”。

而且为什么不是if...else.这是你最好的朋友。

Jayesh Bhoi answered 2019-03-05T20:59:35Z

73 votes

基于我在这里找到的一些答案,我为自己的项目提供了一个小帮手文件:

trycatch.sh

#!/bin/bash

function try()

{

[[ $- = *e* ]]; SAVED_OPT_E=$?

set +e

}

function throw()

{

exit $1

}

function catch()

{

export ex_code=$?

(( $SAVED_OPT_E )) && set +e

return $ex_code

}

function throwErrors()

{

set -e

}

function ignoreErrors()

{

set +e

}

这是一个如何使用的示例:

#!/bin/bash

export AnException=100

export AnotherException=101

# start with a try

try

( # open a subshell !!!

echo "do something"

[ someErrorCondition ] && throw $AnException

echo "do something more"

executeCommandThatMightFail || throw $AnotherException

throwErrors # automaticatly end the try block, if command-result is non-null

echo "now on to something completely different"

executeCommandThatMightFail

echo "it's a wonder we came so far"

executeCommandTh

你可能感兴趣的:(bash,抓捕异常)