Linux bash退出状态以及如何在bash中设置退出状态

时间:2020-01-09 10:41:14  来源:igfitidea点击:

您能解释一下bash退出状态代码吗?
如何在Linux Shell脚本中设置bash退出状态?
每个Linux或Unix命令正常或异常终止时都会返回一个状态。
您可以在shell程序脚本中使用退出状态的值来显示错误消息或运行命令。
例如,如果tar命令不成功,它将返回一个代码,该代码告诉Shell脚本向sysadmins发送电子邮件。

有关Linux bash shell退出状态代码的更多信息

  • Shell脚本或用户执行的每个Linux或Unix命令都具有退出状态。
  • 退出状态是整数。
  • 出于bash shell的目的,成功执行了以零(0)退出状态退出的命令。
  • 非零(1-255)退出状态表示失败。
  • 如果找不到命令,则为执行该命令而创建的子进程将返回状态127。如果找到但不能执行该命令,则返回状态为126。
  • 如果所有Bash内置程序成功,返回的退出状态为零,失败时返回的状态为非零。

如何显示shell命令的退出状态?

您可以使用特殊的shell变量$来获取先前执行的命令的退出状态。
要打印$?变量,请使用echo命令/printf命令。
语法为:

command
echo $?

或者

/path/to/script.sh
command
date
echo $?
## OR use the printf command ##
printf "%d\n" $?
## run non-existence command ##
foobar13535
## display status code ##
echo $?

如何将命令的退出状态存储在shell变量中

分配$?到一个shell变量。
语法为:

date
status=$?
echo "The date command exit status : ${status}"

Linux退出状态和条件/列表构造

一个简单的Shell脚本来查找主机名(findhost.sh)

#!/bin/bash
# set var 
FILE="/etc/hosts"
 
# get host name 
read -p "Enter a hostname : " hostname
 
# try to locate hostname/computer name in $FILE
grep -q -w "${hostname}" "${FILE}"
 
# store exit status of grep
# if found grep will return 0 exit status
# if not found, grep will return a nonzero exit status
status=$?
 
if test $status -eq 0
then
	echo "Host '$hostname' found in $FILE file."
else
	echo "Host '$hostname' not found in $FILE file."
fi

如何使用&&和||退出代码的操作员

语法为:

command && echo "success"
command || echo "failed"
command && echo "success" || echo "failed"

如果找不到名为/tmp/foo的目录,请创建它:

[ ! -d "/tmp/foo" ] && mkdir -p "/tmp/foo"

例如,当未将文件名作为命令行arg传递时,显示用法语法:

#!/bin/Bash
_files="$@"
 
## fail safe ##
[[ "$_files" == "" ]] && { echo "Usage: 
#!/bin/bash
set -e
I=~/bin/tags.deleted.410
O="/tmp/https.www.theitroad.local.410.url.conf"
t=""
[ ! -f "$I" ] && { echo "$I file not found."; exit 10; }
[ "$t" == "" ] && { echo "Usage: 
perror 0
perror 1
number-of-urls-to-purge-from-$I"; exit 11; }   >$O   cat "$I" | sort | uniq | while read -r u do uu="${u##https://www.theitroad.local}" echo "~^$uu 1;" >>"${O}" done echo "* Config file created at ${O} ..." echo "* Installing ${O} file on utls-wp-mg-www ..." ~/bin/install.py "${O}" echo "* Send config to rest of cluster nodes ... " ~/bin/install.py --sync --cluster --reload cbz-www echo "* Building list purge urls for Cloudflare CDN ..." sleep 1 url="" while IFS= read -r u do url="$url $u" done <<<"$(tail -${t} ${I})" [ "$url" != "" ] && ~/bin/cloudflare.purge.urls.sh "$url" [ -f "$O" ] && rm -f "$O"
file1.png file2.png"; exit 1; }   ## continue below ##

这是另一个显示用法的shell脚本:

##代码##

GNU/Linux的常见退出代码列表

退出代码说明
0成功
1不允许操作
2没有这样的文件或目录
3没有这样的过程
4系统调用中断
5输入/输出错误
6没有此类设备或地址
7参数列表太长
8Exec格式错误
9错误的文件描述符
10无子进程
11资源暂时不可用
12无法分配内存
13权限被拒绝
14地址错误
15需要阻止装置
16设备或资源繁忙
17文件存在
18无效的跨设备链接
19没有这样的设备
20不是目录
21是目录
22无效的参数
23系统中打开的文件过多
24打开的文件过多
25设备不适当的ioctl
26文本文件忙

perror命令说明错误代码,它是MySQL/MariaDB软件包的一部分:

##代码##