如何在Bash中抛出错误?

时间:2015-12-04 20:20:23

标签: bash

如何在bash中抛出错误以获取 catch 子句(我不确定这个表达式实际上是什么叫)

{
  # ...
  if [ "$status" -ne "200" ]
    # throw error
  fi
} || {
  # on error / where I want to get if status != 200
}

我知道我可以使用一个功能但这个案例让我很好奇是否有可能做到这一点

3 个答案:

答案 0 :(得分:3)

一种方法是使用exit作为shellter提及,但你必须为该工作创建一个子shell(存在于出口处)。为此,请用括号替换大括号。

代码将是

(
 # ...
 if [ "$status" -ne "200" ]
    exit 1
 fi
) || {
   # on error / where I want to get if status != 200
}

答案 1 :(得分:2)

有多种方法可以做类似的事情:

使用子shell (如果您想设置参数等,可能不是最佳解决方案......)

(
if [[ "$status" -ne "200" ]]
then
    exit 1
fi 
) || (
  # on error / where I want to get if status != 200
  echo "error thrown"
)

使用中间错误变量(您可以通过设置不同的数字来捕获多个错误。另外:缩进深度更少)

if [[ "$status" -ne "200" ]]
then
    error=1
fi

if [ $error != 0 ]
then
    echo "error $error thrown"
fi

立即使用测试的退出值(请注意,我已将-ne更改为-eq

[[ "$status" -eq "200" ]] || echo "error thrown"

答案 2 :(得分:1)

大括号的返回码是大括号中执行的最后一个语句的返回码。所以,这里有一个使用shell-builtin false的方法:

{
  # ...
  if [ "$status" -ne "200" ]; then
    false # throws "error" (return code=1)
  fi
} || {
  echo "Caught error" # on error / where I want to get if status != 200
}

在这种特殊情况下,if语句是多余的。测试语句[ "$status" -ne "200" ]会抛出您需要的退出代码:

{
  # ...
  ! [ "$status" -ne "200" ]
} || {
  echo "Caught error" # on error / where I want to get if status != 200
}