在bash shell脚本中,如何获取上一个命令的退出状态码

时间:2019-11-20 08:53:00  来源:igfitidea点击:

问题

在Linux中,如何获得命令的退出状态代码?
如何获得Linux或Unix shell命令的退出代码或状态并将其存储到shell变量中?

解决方案

每个Linux或Unix shell命令正常或异常终止时都会返回一个状态。
成功返回0,其他异常情况返回非0值。

bash shell中的退出状态码是什么?

Shell脚本或用户执行的每个Linux或Unix命令都具有退出状态。
退出状态是整数。退出状态为0表示命令成功执行,没有任何错误。
非零(1-255值)的退出状态表示命令失败。

如何获取命令的退出状态码?

可以使用一个特殊shell变量$?来获取先前执行的命令的退出状态。

要打印$?变量的值,可以使用echo命令或printf命令:

[ritter@theitroad ~]$ echo $?
0
[ritter@theitroad ~]$ date-foo-bar
bash: date-foo-bar: command not found...
[ritter@theitroad ~]$ printf '%d\n' $?
127

从以上输出中可以清楚地看出,退出代码为0表示date命令已成功执行。
此外,由于命令不存在,所以没有成功执行,因此退出代码为127(非零)。

如何在Shell脚本中使用退出状态码

在脚本中,可以将$?的值保存到一个shell变量中。以便之后使用。

语法为:

command
status=$?

例如:

cmd="date"
$cmd

## 获取状态
status=$?

## 根据状态进行进一步操作
[ $status -eq 0 ] && echo "$cmd command was successful" || echo "$cmd failed"

如何为自己的Shell脚本设置退出状态代码?

exit命令用于终止正常运行的Shell脚本。

在退出时,可以指定退出状态。

语法为:

exit N
exit 1
exit 999

例如:

#!/bin/bash
/path/to/some/command
[ $? -eq 0 ]  || exit 1

总结

本教程介绍了如何在基于Linux或Unix的系统上使用退出代码,以及如何获取命令的退出状态/代码。