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

如何提取命令退出码?及如何将其用于脚本条件判断?

嘿,这两个问题在写shell脚本的时候真的是高频需求,我给你一步步讲明白~

1. 如何提取命令的退出码?

在shell环境里,每执行完一条命令,系统都会自动把它的退出码存在特殊变量$?里。命令执行成功时退出码是0,执行失败时是非0值(不同错误对应不同的非0数字)。

举个实际例子:

# 执行一个存在的目录的ls命令,肯定成功
ls /home
# 打印上一条命令的退出码,会输出0
echo $?

# 执行一个不存在的目录的ls命令,会报错
ls /this-dir-does-not-exist
# 打印退出码,会输出非0值(比如2,具体数值取决于shell和命令)
echo $?

⚠️ 注意:$?只会保存上一条命令的退出码,如果你执行了其他命令,它的值就会被覆盖。如果需要后续多次使用这个退出码,最好先把它存到一个普通变量里:

ls /nonexistent
EXIT_CODE=$?
# 之后可以随时用EXIT_CODE这个变量,不用担心被覆盖
echo "刚才的命令退出码是:$EXIT_CODE"
2. 如何提取命令的退出码并用于条件判断?

这里分两种常用场景,尤其是你说的「两个条件都满足才执行操作」的情况,我们来逐个看:

方式一:直接在条件中执行命令(更简洁)

shell的if语句本质上就是判断命令的退出码——如果命令退出码是0,就认为条件成立。结合&&逻辑运算符,可以轻松实现「多个条件都满足」的判断:

比如你的需求:第一个条件是某个变量等于特定值,第二个条件是某个命令执行成功(通过退出码判断),示例脚本如下:

# 假设第一个条件是当前用户是admin
current_user=$(whoami)

# 用&&连接两个条件:左边判断用户是否为admin,右边执行mkdir命令
if [ "$current_user" = "admin" ] && mkdir /tmp/admin-only-dir; then
    echo "两个条件都满足!现在执行指定操作~"
    # 这里写你要执行的操作,比如创建配置文件、启动服务等
    touch /tmp/admin-only-dir/config.ini
fi

解释一下:

  • 只有左边的[ "$current_user" = "admin" ]执行成功(退出码0),才会执行右边的mkdir命令
  • 如果mkdir也执行成功(退出码0),整个if的条件就成立,会执行大括号里的操作

方式二:先保存退出码再判断(更灵活)

如果你需要在判断前对退出码做一些处理,或者要复用这个退出码,就先把它存起来再判断:

current_user=$(whoami)
# 先执行目标命令,保存退出码
mkdir /tmp/admin-only-dir
mkdir_exit=$?

# 同时判断两个条件:用户是admin,且mkdir的退出码为0
if [ "$current_user" = "admin" ] && [ "$mkdir_exit" -eq 0 ]; then
    echo "两个条件都满足!执行指定操作~"
    touch /tmp/admin-only-dir/config.ini
fi

这里用[ "$mkdir_exit" -eq 0 ]来判断命令是否执行成功,-eq是shell里的「等于」比较运算符,用来判断数字是否相等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:34:17