在if bash语句中检查命令的返回值

时间:2020-02-09 11:36:48

标签: bash if-statement return-value

我有一个简单的脚本,它尝试卷曲和URL,并在失败或成功的情况下回显字符串。但是我会收到以下警告,具体取决于我如何形成此if语句。

根据我在下面的语句中使用的引号,我会收到以下警告:

: -ne: unary operator expected
: integer expression expected

使用替代检查(作为注释),出现以下错误

((: != 0 : syntax error: operand expected (error token is "!= 0 ")

脚本:

c=`curl -s -m 10 https://example.com` || ce=$?

#if (( ${je} != 0 )); then 
if [ ${ce} -ne 0 ]; then 
        echo "Failed"
else
        echo "Succeeded"
fi

如何在bash if语句中正确检查curl命令的返回值?

1 个答案:

答案 0 :(得分:2)

问题在于,仅在curl命令失败时设置退出状态。 如果命令成功执行,则未设置变量ce(并且也未加引号),并且测试执行if [ -ne 0 ]; then并显示错误消息。 在这种情况下,仅引用变量无济于事,您只会得到其他错误消息。

要解决此问题,无论curl命令的退出状态是什么,都在curl命令之后设置变量ce

c=$(curl -s -m 10 https://example.com)
ce=$?
if [ "$ce" -ne 0 ]; then 
  echo "Failed"
else
  echo "Succeeded"
fi

或更短,没有退出状态变量:

c=$(curl -s -m 10 https://example.com)
if [ $? -ne 0 ]; then 
  echo "Failed"
else
  echo "Succeeded"
fi
相关问题