Bash退出命令和退出代码

通常,在编写Bash脚本时,您需要在满足特定条件时终止脚本,或者根据命令的退出代码采取措施。

在本文中,我们将介绍Bash exit 内置命令和已执行命令的退出状态。

退出状态编号

每个shell命令成功终止都会失败时返回退出代码。

按照惯例,退出代码为零表示命令已成功完成,而非零则表示遇到错误。

特殊变量 $? 返回最后执行的命令的退出状态:

date &> /dev/nullecho $?

date 命令成功完成,并且退出代码为零:

0

如果您尝试跑步 ls 在不存在的目录上,退出代码将为非零:

ls /nonexisting_dir &> /dev/nullecho $?
2

状态代码可用于找出命令失败的原因。 每个命令的手册页都包含有关退出代码的信息。

当执行多命令管道时,管道的退出状态为最后一条命令的退出状态:

sudo tcpdump -n -l | tee file.outecho $?

在上面的例子中 echo $? 将打印出的退出代码 tee 命令。

重击 exit 命令#

exit 命令以以下状态退出外壳 N。 它具有以下语法:

exit N

如果 N 如果没有给出,则退出状态代码是最后执行的命令的退出状态代码。

在shell脚本中使用时,该值作为参数提供给 exit 命令作为退出代码返回到外壳。

例子 #

命令的退出状态可用于条件命令,例如 if 。 在下面的例子中 grep 如果在以下位置找到“搜索字符串”,则将以零退出(这在shell脚本中为true)。 filename

if grep -q "search-string" filename then
  echo "String found."
else
  echo "String not found."
fi

运行命令列表时,用 && (AND)或 || (OR),命令的退出状态确定是否将执行列表中的下一个命令。 在这里 mkdir 仅在以下情况下执行命令 cd 返回零:

cd /opt/code && mkdir project

如果脚本以 exit 在不指定参数的情况下,脚本退出代码是脚本中最后执行的命令的退出代码。

〜/ script.sh

#!/bin/bash

echo "doing stuff..."

exit

仅使用 exit 是相同的 exit $? 或省略 exit

这是显示非脚本用户调用脚本时如何终止脚本的示例:

#!/bin/bash

if [[ "$(whoami)" != root ]]; then
  echo "Only user root can run this script."
  exit 1
fi

echo "doing stuff..."

exit 0

如果您以root用户身份运行脚本,则退出代码将为零。 否则,脚本将以状态退出 1

结论#

每个shell命令终止时都会返回退出代码。 的 exit 命令用于退出具有给定状态的Shell。

如果您有任何疑问或反馈,请随时发表评论。

bash终端

Sidebar