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 | 参数列表太长 |
| 8 | Exec格式错误 |
| 9 | 错误的文件描述符 |
| 10 | 无子进程 |
| 11 | 资源暂时不可用 |
| 12 | 无法分配内存 |
| 13 | 权限被拒绝 |
| 14 | 地址错误 |
| 15 | 需要阻止装置 |
| 16 | 设备或资源繁忙 |
| 17 | 文件存在 |
| 18 | 无效的跨设备链接 |
| 19 | 没有这样的设备 |
| 20 | 不是目录 |
| 21 | 是目录 |
| 22 | 无效的参数 |
| 23 | 系统中打开的文件过多 |
| 24 | 打开的文件过多 |
| 25 | 设备不适当的ioctl |
| 26 | 文本文件忙 |
perror命令说明错误代码,它是MySQL/MariaDB软件包的一部分:
##代码##
