linux – 如何在shell脚本中处理错误/异常?

前端之家收集整理的这篇文章主要介绍了linux – 如何在shell脚本中处理错误/异常?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
下面是我在bash中执行的脚本.它工作正常.
fileexist=0
for i in $( ls /data/read-only/clv/daily/Finished-HADOOP_EXPORT_&processDate#.done); do
  mv /data/read-only/clv/daily/Finished-HADOOP_EXPORT_&processDate#.done /data/read-only/clv/daily/archieve-wip/
  fileexist=1
done

问题陈述:-

在上面的shell脚本中,必须每天使用cron job运行,我没有任何错误/异常处理机制.假设如果出现任何问题,我不知道发生了什么?

在执行上述脚本之后,还有一些其他脚本将依赖于上述脚本提供的数据,因此我总是得到其他人的抱怨,这些人依赖于我的脚本数据发生了错误.

如果我的脚本中发生了任何错误,我有什么方法可以得到通知吗?假设集群正在进行一些维护,那时我正在运行我的脚本,所以肯定会失败肯定,所以如果上面的脚本失败,我可以得到通知,这样我就可以确定发生了什么错误.

希望我的问题很清楚.

任何想法将不胜感激.

解决方法

您可以检查每个命令的退出状态,如freetx所述,但这是手动错误检查而不是异常处理.在sh中获得等效异常处理的标准方法是使用set -e启动脚本.一旦任何执行的命令失败(即以非零退出状态退出),这告诉sh以非零状态退出.

如果打算让这样的脚本中的某些命令(可能)失败,可以使用构造命令|| true,这将强制该表达式的零退出状态.例如:

#!/bin/sh

# if any of the following fails,the script fails
set -e
mkdir -p destdir/1/2
mv foo destdir/1/2
touch /done || true    # allowed to fail

确保在cron调用的脚本中出现问题时通知您的另一种方法是遵守Unix约定printing nothing unless an error ocurred.成功运行将在不事先通知的情况下通过,并且不成功运行将导致cron守护程序通知错误通过电子邮件.请注意,必须在系统上正确配置本地邮件传递才能使其正常工作.

猜你在找的Linux相关文章