如何设置 shell 脚本的退出状态?

如何设置 shell 脚本的退出状态?

最近,我想知道如何在 中更改脚本的退出状态或结束状态bash。例如,假设我们运行程序test.sh,程序内部使用 退出exit 0… 我想知道将此退出状态更改为 的正常程序是什么1?我知道您可以使用,exit 1但这是设置退出状态的实际标准吗?

答案1

脚本的退出状态是执行的最后一个命令的退出状态。例如,如果最后一个语句尝试使用 创建目录mkdir some/path,并且命令失败,则脚本本身的退出代码将是失败的 的退出代码mkdir

如果您想设置不同的退出代码,您可以使用exit内置函数:

exit: exit [n]
    Exit the shell with a status of N.  If N is omitted, the exit status
    is that of the last command executed.

如果您的脚本检测到出现错误,则建议您使用非零代码退出。通常使用 1,这已经足够好了,直到您想向调用程序发出不同的信号,以便能够对不同类型的错误做出不同的响应。除非您有特定的想法,否则只需使用exit 1

答案2

非零退出表示错误。零表示成功。尝试删除不存在的文件虽然失败,但在大多数情况下与实际删除文件一样好,因此由您的脚本决定是否应将这些事情视为失败或成功。

那么你应该使用什么数字呢?在我使用 Unix 的 30 多年里,我从未见过标准。如果其他人正在使用你的脚本,为了清楚起见,重要的是你要么只使用一个失败的退出代码,要么定义该退出代码的含义。定义可以通过多种方式包含。一种方法是将退出代码与标准错误的可能原因列表一起回显,如下所示

echo -e "Return code Error: " $Error "\n Possible errors are\n" \
"1 = missing parameter\n" \
"2 = Could not do what you wanted \n" >&2

当然还有很多其他选择,比如用注释记录代码中的错误(最好把它放在脚本的前面,而不是分散在各处),或者像下面这样将脚本设为可选参数

$myscript -error [other parameters if any]

打印所有可能的错误。

我已使用其他脚本调用的脚本的错误代码作为返回信息:

0 表示成功,正数表示错误,负数表示无错误但需要采取特殊措施

如果直接运行被调用的脚本,那就不好了,因为它可能会让用户感到困惑,但被调用的脚本可以检查该情况。

相关内容