Bash Exit 命令 和 退出代码


通常,在写 Bash 脚本的时候,你需要在某个特定条件下终止脚本,并且基于退出代码来采取行动。
在本文中,我们将会涉及 Bash exit
内建命令,以及执行命令后的退出状态。
一、退出状态
每一个 Shell 在退出时,都会返回一个状态代码。成功或者不成功。
按照惯例,退出代码为0显示命令成功地执行,而非0意味着有错误发生。
特殊变量$?
返回最后执行命令的状态。
date &> /dev/null
echo $?
date
命令成功完成,退出代码为0:
0
如果你尝试在一个不存在的目录上运行ls
,退出代码为非0:
ls /nonexisting_dir &> /dev/null
echo $?
2
状态代码可以被用来查找命令是否失败。每一个命令的手册页面包含退出代码的信息。
当执行多个命令组成的管道时,管道的退出状态是最后一个命令的:
sudo tcpdump -n -l | tee file.out
echo $?
在上面的例子中echo $?
将会打印tee
命令的退出代码。
二、Bash exit
命令
exit
命令以状态N
退出 shell。它有下面的语法:
exit N
如果N
没有给出,退出状态代码是最后一个命令的退出状态代码。
在 shell 脚本中使用的时候, 提供给exit
命令的参数将会作为退出代码返回给 shell。
三、示例
命令的退出状态可以被用在条件命令中,例如if
。在下面的例子中,如果“search-string” 在filename
文件中被找到,grep
以状态0(在 shell 脚本中意味着 true)退出:
if grep -q "search-string" filename then
echo "String found."
else
echo "String not found."
fi
在运行一系列由&&
(AND)或者||
(OR)分隔的命令,命令的退出状态取决于列表中的下一个命令是否会被执行。这里,如果cd
返回0,那么mkdir
命令将会被执行:
cd /opt/code && mkdir project
如果一个脚本以exit
结尾并且不指定参数,这个脚本的退出代码将会是脚本中最后一个命令执行的退出状态:
#!/bin/bash
echo "doing stuff..."
exit
仅仅使用exit
和exit $?
或者省略exit
是一样的。
下面是一个例子,显示如果是非 root 用户运行,应该如何终止脚本:
#!/bin/bash
if [[ "$(whoami)" != root ]]; then
echo "Only user root can run this script."
exit 1
fi
echo "doing stuff..."
exit 0
如果以 root 身份运行脚本,退出代码将会是0.否则,脚本将会以状态1
退出。
四、总结
每一个 shell 命令在终止时都会返回一个退出代码。exit
命令被用来以指定状态退出 shell。

如果你有任何疑问,请通过以下方式联系我们:
微信:

微信群: 加上面的微信,备注微信群
QQ: 3217680847

原文 :https://linuxize.com/post/bash-exit/
版权声明:本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
