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