Bash在Linux/Unix上获取命令的退出代码

时间:2020-01-09 10:37:22  来源:igfitidea点击:

如何获得命令的退出代码?
如何获得Linux或Unix shell命令的退出代码或状态并将其存储到shell变量中?
简介每个Linux或Unix shell命令正常或异常终止时都会返回一个状态。
例如,如果backup.sh脚本不成功,它返回一个代码,该代码告诉Shell脚本向sysadmin发送电子邮件。

bash shell中的退出代码是什么?

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

如何找出命令的退出代码

您需要使用一个名为$的特殊shell变量来获取先前执行的命令的退出状态。
要打印$?变量,请使用echo命令或printf命令:

date
echo $?
date-foo-bar
printf '%d\n' $?

如何获取命令的退出代码,例如date和date-foo-bar

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

Bash获取命令的退出代码如何在Shell脚本中使用退出代码

那么,如何将命令的退出状态存储在shell变量中?
只需分配$?
到一个shell变量。
语法为:

command
status=$?
## run date command ##
cmd="date"
$cmd
## get status ##
status=$?
## take some decision ## 
[ $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

一个示例shell脚本,用于获取命令的退出代码

#!/bin/bash
#
# Sample shell script to demo exit code usage #
#
set -e
 
## 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