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
重定向到 stderr
和 stdout
。也可以在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 和其他现代语言内置了 多 更复杂的错误处理。
我正在清理脚本的输出。例如:
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
重定向到 stderr
和 stdout
。也可以在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
- POSIXrm
在使用-f
时忽略丢失的文件。 - 如果可以避免,请不要使用 shell。 Python 和其他现代语言内置了 多 更复杂的错误处理。