从 if...else 退出 Shell 脚本

从 if...else 退出 Shell 脚本

我有一个 shell 脚本,我想根据变量的值退出它ERROR_COUNT。我可以写

if [ ${ERROR_COUNT} -gt 0 ]
then
    echo "Exiting unsuccessfully";
    exit 1;
fi
echo "Exiting successfully";
exit;

或者

if [ ${ERROR_COUNT} -gt 0 ]
then
    echo "Exiting unsuccessfully";
    exit 1;
else
    echo "Exiting successfully";
    exit;
fi

这两种方法有什么问题吗?

答案1

就将发生的情况而言,两种编写分支的方式之间没有技术差异。这是风格和个人喜好的问题。

else如果第一个分支正在退出,一些开发人员不喜欢在 if 语句的分支中无条件退出。

我可能会把代码写成

if [ "$ERROR_COUNT" -ne 0 ]; then
    echo 'There were errors' >&2
    exit 1
fi
# echo 'No errors' >&2

请注意删除的分号、引用的变量扩展和删除的最后一个exit(在脚本末尾隐式)。我将测试更改为-ne 0from-gt 0因为它更清晰(至少对我来说)。

我还更改了两条诊断消息的输出,以便它们进入标准错误流(并以对用户更有用的方式改进它们)。最后一个是否echo应该存在是有争议的,因为除了成功执行之外实际上没有什么可报告的(我将其注释掉了)。

相关内容