Shell 脚本错误处理

Shell script error handling

我正在清理脚本的输出。例如:

rm -f ./file

No such file or directory

我想为这个命令实现一些错误检查,相当于一个try/catch语句。换句话说,如果命令失败,我想捕获错误。

使用 set -e 或者您可以使用 &&||

实现相同的行为

为什么不用简单的脚本呢?

file=
if [ ! -f $file ]; then
    echo "File not found!"
else 
    rm -f $file
fi

当你运行它时,脚本会告诉你给定的文件是否不存在。

您还可以在 echo 命令后使用 2>&1 重定向到 stderrstdout。也可以在if语句末尾加一个exit 1,因为退出状态为1一般表示命令没有执行成功。

这不会按照您预期的方式工作,但在 bash 中,这是检测错误的最接近方法。

Python:

try:
    os.remove('./file')
    champagne_for_everybody
except:
    throw_myself_in_the_river

Shell:

if rm ./file
then
    champagne_for_everybody
else
    throw_myself_in_the_river
fi

备注:

  • 不要使用 -f - POSIX rm 在使用 -f 时忽略丢失的文件。
  • 如果可以避免,请不要使用 shell。 Python 和其他现代语言内置了 更复杂的错误处理。