You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

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

咱们先拆解你遇到的问题根源:你的脚本里,当curl请求成功时,||后面的ce=$?根本不会执行,导致ce变量是空的。这时候不管用[ ${ce} -ne 0 ]还是写错变量名的(( ${je} != 0 )),都会因为缺少有效操作数而报错。

下面给你几种靠谱的解决办法,按推荐程度排序:

方法1:直接用if判断curl的退出状态(最简洁)

Bash的if语句本质就是检查命令的退出码——命令执行成功(退出码0)就走then分支,失败(非0退出码)走else分支。所以完全不需要额外变量,直接写:

if curl -s -m 10 https://example.com > /dev/null; then
    echo "Succeeded"
else
    echo "Failed"
fi

这里加> /dev/null是因为你只关心请求是否成功,不需要把curl的输出打印出来;如果需要保留输出,可以把它存到变量里:

if c=$(curl -s -m 10 https://example.com); then
    echo "Succeeded"
    # 这里可以用$c处理返回内容
else
    echo "Failed"
fi

方法2:提前初始化返回值变量(如果需要保存退出码)

如果你确实需要把curl的退出码存起来后续使用,一定要先给变量赋初始值,避免空值问题:

# 先初始化ce为0(curl成功时的退出码)
ce=0
c=$(curl -s -m 10 https://example.com) || ce=$?

# 用[ ]判断时记得给变量加双引号,防止空值引发语法错误
if [ "$ce" -ne 0 ]; then
    echo "Failed"
else
    echo "Succeeded"
fi

或者用(( ))的写法(适合数值判断,语法更简洁):

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

if (( ce != 0 )); then
    echo "Failed"
else
    echo "Succeeded"
fi

注意(( ))里不需要给变量加${},直接写变量名就行。

为什么你的原写法会报错?

  • 当curl成功时,||短路,ce=$?不执行,ce是空变量。[ ${ce} -ne 0 ]展开后变成[ -ne 0 ],Bash会把-ne当成单目操作符,但缺少对应的操作数,所以抛出-ne: unary operator expected或integer expression expected。
  • 你注释里的(( ${je} != 0 ))不仅变量名写错(je应该是ce),同样因为ce为空,展开后变成(( != 0 )),缺少左边的操作数,导致syntax error: operand expected。

内容的提问来源于stack exchange,提问作者boolean.is.null

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 14:57:40