Linux Shell 返回码详解:命令执行的隐形信号
在 Linux Shell 编程中,返回码(Exit Status)是判断命令执行结果的核心机制。它不仅用于错误处理,还能驱动条件分支、日志记录、自动重试等逻辑。理解并合理使用返回码,是编写健壮脚本的基础。
🧠 什么是返回码?
每个命令执行后,都会返回一个整数值(范围 0–255),用于表示执行结果:
0:表示命令执行成功非 0:表示失败或特定错误类型可通过 $? 获取上一条命令的返回码
这种机制让脚本可以根据执行结果做出智能判断。
📋 常见返回码一览表
以下是一些常见的返回码及其含义:
返回码含义示例命令说明0成功ls /etc命令执行成功1通用错误false未指定类型的失败2错误用法grep 无参数命令参数错误126无执行权限./script.sh(无执行权限)文件存在但不可执行127命令未找到nosuchcommand命令不存在128非法退出码exit 300超出范围(被截断为 44)130被 Ctrl+C 中断sleep 10 → Ctrl+C收到 SIGINT137被 SIGKILL 杀死kill -9
这些返回码不仅反映命令执行状态,还能揭示系统信号(如 SIGINT、SIGKILL)对进程的影响。
🧪 实战示例:判断返回码
在脚本中,我们常用返回码进行条件判断:
ping -c 1 192.168.1.10
if [[ $? -eq 0 ]]; then
echo "✅ 网络正常"
else
echo "❌ 网络异常,返回码:$?"
fi
这种方式可以用于网络检测、文件校验、服务状态判断等场景。
🧩 自定义返回码建议
你可以在脚本中使用 exit 自定义返回码,以便调用者识别错误类型:
if [[ ! -f config.yaml ]]; then
echo "❌ 配置文件缺失"
exit 3 # 自定义错误码
fi
建议使用分层设计:
0:成功1–99:脚本内部错误(参数、逻辑)100–199:外部依赖错误(网络、权限、文件)200–255:致命错误或未处理异常
这种结构有助于后续自动化工具或监控系统快速定位问题。
🧭 高级技巧:信号与返回码的映射
当进程被信号终止时,返回码通常为 128 + 信号编号:
信号编号返回码含义SIGINT2130用户中断(Ctrl+C)SIGKILL9137强制终止SIGSEGV11139段错误
这类返回码可以帮助你识别进程是否因系统信号而异常退出。