$?
变量查看,执行echo $?
可立即获取上一个命令的结果:0表示成功,非0表示失败或错误代码。,“bash,ls /nonexistent,echo $? # 输出2(目录不存在),
“命令返回值的核心规则
- 0:表示成功(Success)
- 非0:表示失败(错误类型因命令而异)
1
为通用错误,127
为命令未找到,130
表示进程被Ctrl+C
终止
查看返回值的3种方法
变量(最常用)
ls /nonexistent_directory # 故意执行错误命令 echo $? # 输出非0值(如2)
注意:
仅保存上一条命令的结果,执行后立即重置:
echo $? # 输出0(因为上一条echo成功)
脚本中直接捕获返回值
#!/bin/bash grep "pattern" file.txt status=$? # 将返回值赋给变量 if [ $status -eq 0 ]; then echo "搜索成功" else echo "失败!错误码: $status" fi
trap
命令(高级场景)
在脚本退出时自动捕获返回值:
#!/bin/bash trap 'echo "退出状态: $?"' EXIT false # 故意执行失败命令(返回1)
执行后输出:退出状态: 1
**三、实际应用示例
案例1:检查文件是否存在
test -f /etc/passwd echo "文件存在? $?" # 存在则输出0
案例2:管道命令的返回值
默认返回最后一条命令的结果:
cat /tmp/file | grep "error" echo $? # 显示grep的结果
如需获取管道中所有命令的状态,启用 pipefail
:
set -o pipefail cat /tmp/file | grep "error" echo $? # 任意命令失败则返回非0
案例3:与逻辑运算符结合
make && echo "编译成功" # 仅当make返回0时执行&&后命令 make || echo "编译失败" # make非0时执行||后命令
注意事项
- 时效性: 在每次命令执行后更新,立即使用避免覆盖。
- 脚本退出码:用
exit N
自定义脚本返回值(e.g.exit 101
)。 - 特殊返回值:
126
:命令无权执行137
:进程被kill -9
终止255
:超出范围(仅0-255有效)
为什么需要返回值?
- 自动化运维:脚本通过返回值决定后续操作(如失败时发送告警)。
- 调试效率:精确识别错误来源(如
127
=命令未安装)。 - 流程控制:与
if
、while
、&&/||
结合实现条件逻辑。
经验提示:
常用命令的返回值含义可通过手册查询:man <命令> | grep -A 10 "EXIT STATUS"
通过系统性地利用返回值,Linux用户可构建健壮的脚本和高效的运维流程,实践建议:在关键操作后添加 echo $?
验证结果,逐步积累错误码应对策略。
引用说明:参考 Bash 官方文档(GNU Bash Manual)
- 退出状态码标准依据 IEEE Std 1003.1-2017(POSIX.1)规范
- 示例测试环境:Linux Kernel 5.10+ / Bash 5.0+
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/12638.html