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

如何在Bash中基于命令退出码编写if条件判断语句?

Bash中基于命令退出码的条件判断实现

嘿,我来帮你搞定这个问题!你现在的代码里用[ ./success.sh ]的方式其实不是在判断脚本的执行结果,而是在检查这个文件是否存在且非空——只要脚本文件存在,这个条件就会返回true,所以不管脚本执行成功还是失败,都会走if分支,这就是为什么你的预期输出没达到。

要实现基于命令退出码的判断,其实Bash的if语句本身就支持直接把命令作为条件:当命令执行的退出码为0(成功)时,进入if分支;非0(失败)时进入else分支,这正好符合你的需求。

修改后的正确代码

#!/bin/bash
# 直接执行脚本作为if条件
if ./success.sh; then
    echo "First: success!"
else
    echo "First: failure!"
fi

if ./failure.sh; then
    echo "Second: success!"
else
    echo "Second: failure!"
fi

为什么这样有效?

Bash的if语法规则是:if <命令>; then ...,它会执行<命令>,然后根据命令的退出状态码来决定分支:

  • 退出码0:代表命令执行成功,进入if块
  • 非0:代表命令执行失败,进入else块

你的success.sh返回exit 0,所以第一个if会输出First: success!;failure.sh返回exit 1,第二个if会进入else分支,输出Second: failure!,完美匹配你的预期。

另一种方式:用$?获取退出码

如果你需要显式判断具体的退出码数值(比如区分不同的错误码),可以用$?变量获取上一个命令的退出码,再用test命令(也就是[ ])判断:

#!/bin/bash
./success.sh
# 判断上一个命令的退出码是否为0
if [ $? -eq 0 ]; then
    echo "First: success!"
else
    echo "First: failure!"
fi

./failure.sh
# 判断上一个命令的退出码是否为1
if [ $? -eq 1 ]; then
    echo "Second: failure!"
else
    echo "Second: success!"
fi

不过第一种直接把命令作为if条件的写法更简洁,也是Bash脚本中推荐的常规写法。

内容的提问来源于stack exchange,提问作者Luke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:02:46