Bash 在 Linux/Unix 上获取命令的退出代码
我是 Linux 系统新用户。如何获取命令的退出代码?如何获取 Linux 或 Unix shell 命令的退出代码或状态并将其存储到 shell 变量中?
简介– 每个 Linux 或 Unix shell 命令在正常或异常终止时都会返回状态。例如,如果 backup.sh 脚本失败,它会返回一个代码,告诉 shell 脚本向系统管理员发送电子邮件。
从以上输出中可以清楚地看出,退出代码为 0 表示 date 命令成功。此外,退出代码为 127(非零),因为 nonexistant-command 不成功。
简介– 每个 Linux 或 Unix shell 命令在正常或异常终止时都会返回状态。例如,如果 backup.sh 脚本失败,它会返回一个代码,告诉 shell 脚本向系统管理员发送电子邮件。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 不 |
要求 | Linux 或 Unix 终端 |
类别 | Linux shell 脚本 |
先决条件 | Unix 上的 bash |
操作系统兼容性 | BSD • Linux • macOS • Unix |
预计阅读时间 | 4 分钟 |
bash shell 中的退出代码是什么?
shell 脚本或用户执行的每个 Linux 或 Unix 命令都有退出状态。退出状态是一个整数。0 退出状态表示命令成功执行且没有任何错误。非零(1-255 个值)退出状态表示命令失败。
如何找出命令的退出代码
您需要使用特定的 shell 变量$?来获取先前执行的命令的退出状态。要打印$?变量,请使用 echo 命令或 printf 命令:
$ date
$ echo $?
$ date-foo-bar
$ printf '%d\n' $?
如何获取 date 和 date-foo-bar 等命令的退出代码
Bash 获取命令的退出代码 – 如何在 Shell 脚本中使用退出代码
那么如何将命令的退出状态存储在 shell 变量中?只需将 $? 分配给 shell 变量即可。语法如下:
command status=$? ## 1. Run the date command ## cmd="date" $cmd ## 2. Get exist status and store into '$status' var ## status=$? ## 3. Now take some decision based upon '$status' ## [ $status -eq 0 ] && echo "$cmd command was successful" || echo "$cmd failed"
如何为自己的 shell 脚本设置退出代码?
exit 命令导致正常的 shell 脚本终止。它以状态 N 退出 shell。语法为:
exit N exit 1 exit 999
例如:
#!/bin/bash /path/to/some/command [ $? -eq 0 ] || exit 1
Bash 脚本末尾的退出代码是什么?
如果没有使用退出命令,则退出状态是 bash 脚本末尾默认执行的最后命令的退出状态。
获取命令退出代码的 Shell 脚本示例
#!/bin/bash # # Sample shell script to demo exit code usage # # ## find ip in the file ## grep -q 192.168.2.254 /etc/resolv.conf ## Did we found IP address? Use exit status of the grep command ## if [ $? -eq 0 ] then echo "Success: I found IP address in file." exit 0 else echo "Failure: I did not found IP address in file. Script failed" >&2 exit 1 fi
您可以直接使用例如“if command”语法检查退出代码。无需间接使用 $? ,如下所述:
#!/bin/bash # # Sample shell script to demo exit code usage # # ## find ip in the file ## ## Did we found IP address? Use exit status of the grep command ## if grep -q 192.168.2.254 /etc/resolv.conf then echo "Success: I found IP address in file." exit 0 else echo "Failure: I did not found IP address in file. Script failed" >&2 exit 1 fi
为你的 shell 脚本推荐退出代码
退出状态 | 描述 |
---|---|
1 | 解决一般错误 |
2 | 滥用 shell 内置命令(根据 Bash 文档) |
126 | 调用的命令无法执行 |
127 | 未找到命令 |
128 | 退出命令的参数无效 |
128+n | 致命错误信号“n” |
130 | Bash 脚本通过 Control-C 终止 |
255* | 退出状态超出范围 |
如何处理所有管道命令的退出代码
请参阅“ Bash 找出所有管道命令的退出代码”以了解更多信息。
结论
本页展示了如何在基于 Linux 或 Unix 的系统上使用退出代码以及如何获取命令的退出状态/代码。通过键入 man 命令或 help 命令查看手册页:
从bash 版本 5.0.xx开始:
$ man bash
$ help exit
exit: exit [n] Exit the shell. Exits the shell with a status of N. If N is omitted, the exit status is that of the last command executed.
更多信息请参阅:
- 命令的退出状态
- Bourne Shell 退出状态示例