📜  bash 错误退出 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:29:35.928000             🧑  作者: Mango

Bash 错误退出 - Shell-Bash

当您在运行Bash脚本时,可能会遇到各种错误。 在某些情况下,这些错误可能导致脚本提前退出。 在本文中,我们将讨论错误退出和如何在Bash脚本中处理它们。

错误退出

当一个脚本在其执行期间遇到了一个错误,它会尝试打印有关错误的信息并退出。 通常,退出代码非零。 这是错误的标志。

以下是一个简单的脚本示例,该脚本尝试删除一个不存在的文件:

#!/bin/bash

rm /path/to/non-existent/file
echo "Script complete"

这将是输出:

rm: cannot remove '/path/to/non-existent/file': No such file or directory
Script complete

在这种情况下,脚本并没有退出,而是继续执行。 但是,即使出现错误,脚本也应该退出。 可以通过将以下命令添加到脚本中来实现此目标:

set -e

这条命令告诉Bash,如果在执行命令时遇到错误,那么应该立即退出。 让我们修改我们的示例脚本以使用set -e:

#!/bin/bash

set -e

rm /path/to/non-existent/file
echo "Script complete"

现在,当我们运行脚本时,输出如下,并且脚本已经退出:

rm: cannot remove '/path/to/non-existent/file': No such file or directory
转义错误退出

在某些情况下,可能希望阻止set -e终止脚本。 例如,如果我们正在测试脚本,则可能想要在出现错误时保留脚本运行。 这可以通过以下方式完成:

#!/bin/bash

set -e

# 以下是您的命令
rc=0
rm /path/to/non-existent/file || rc=$?

# 如果不支持set -e,则可以执行以下推出命令
if [ "$rc" -ne 0 ]; then
    echo "Error: Failed to remove file"
    exit $rc
fi

echo "Script complete"

在这个示例中,我们设置了rc变量来存储命令的退出代码。 如果rm命令成功,则rc保持为零。 如果命令失败,则退出代码被存储在rc中。

然后我们使用if语句检查rc值。 如果它与零不同,则脚本退出,并输出错误消息。 否则,脚本继续运行。

结论

在Bash脚本中处理错误退出非常重要。 通过设置set -e,可以确保在脚本中遇到错误时立即退出。 但是,如果您需要在某些情况下继续运行脚本,则可以使用条件语句进行转义错误退出。