Shell:如何确定Linux和UNIX命令的退出状态

时间:2020-01-09 10:43:39  来源:igfitidea点击:

问题描述:您能否解释Linux/UNIX操作系统下shell和命令的退出状态?

解决方法:所有UNIX和Linux命令都有几个参数或者变量,可用于查找命令的退出状态。
请注意,这些参数或者变量只能被引用,不允许对其进行分配。
您可以使用$?找出命令的退出状态。

$?始终扩展为最近执行的前台命令或者管道的状态。
例如,您运行命令cal:

$ cal

现在查看以下命令的cal命令的退出状态:

$ echo $?

输出:

0

零表示命令成功执行,如果退出状态返回非零值,则您的命令执行失败。
例如,运行命令theitroad

$ theitroad

输出:

bash: theitroad: command not found

显示命令的退出状态:

$ echo $?

输出:

127

值127(非零)表示命令theitroad无法执行。
您也可以在shell脚本中使用退出状态。
您可以将退出状态的结果存储在变量中。
考虑以下shell脚本:

#!/bin/bash
echo -n "Enter user name : "
read USR
cut -d: -f1 /etc/passwd | grep "$USR" > /dev/null
OUT=$?
if [ $OUT -eq 0 ];then
   echo "User account found!"
else
   echo "User account does not exists in /etc/passwd file!"
fi

保存并执行脚本,如下所示:

$ chmod +x script.sh
$ ./script.sh

输出:

Enter user name : jradmin
User account does not exists in /etc/passwd file

再试一次:

$ ./script.sh

输出:

Enter user name : Hyman
User account found

如您所见,我已经使用grep命令找出存储在USR变量中的用户名。
如果grep命令在/etc/passwd命令输出中找到用户名,它将返回退出状态0。
这存储在OUT变量中。
接下来,if命令根据存储在OUT变量中的退出状态进行决策。