bash - 在 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 命令的返回值?
解决方案
问题是您仅在 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
推荐阅读
- javascript - 将 div 放在 input 的右下角
- android - 实施 AppBrain 横幅广告 - 我做对了吗?
- amazon-web-services - 从假定角色中假定角色?
- java - 如何列出所有默认音乐播放器并打开一个
- c# - 如何让 Prism 报告它捕获的异常?
- javascript - 如何更新 Django 表单中的隐藏字段
- azure - 在 WebApp 中托管的 .Net core 2.1 MVC 中的推送通知
- google-chrome - 在 chrome 扩展中使用 DOMFormHasPassword 和 DOMInputPasswordAdded 事件
- reactjs - 从反应原生导航返回给我在 this.props.navigation.state.params.filePath 中未定义
- python - 如何在 Python 中可视化集群数据?