首页 > 解决方案 > 在 if bash 语句中检查命令的返回值

问题描述

我有一个简单的脚本,如果它失败或成功,它会尝试 curl 和 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 命令的返回值?

标签: bashif-statementreturn-value

解决方案


问题是您仅在 curl 命令失败时设置退出状态。如果命令成功,则变量ce未设置(也未引用),测试执行if [ -ne 0 ]; then并打印错误消息。在这种情况下,单独引用变量无济于事,您只会收到不同的错误消息。

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

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

推荐阅读