我有一个bash shell脚本,应该:
1)检查是否存在文件
2)如果文件存在退出脚本,否则创建文件
3)启动流程
4)检查进程是否正确运行 - 并将结果发送到日志文件
5)删除文件
6)退出脚本
if [ -f $PROPERTIES_HC ]
then
# lockfile/propertiesfile exists so exit the script
log --------- lockfile exists so operation cancelled at `date` ---------
exit 1
else
# no lockfile/propertiesfile so continue
# create the lockfile/propertiesfile
input="./$PROPERTIES_VAR"
while IFS= read -r line || [ -n "$line" ]; do
eval "echo $line" >> $PROPERTIES_HC
done < $PROPERTIES_VAR
#Run Process
RUN_MY_PROCESS --overridefile $PROPERTIES_HC >> $LOG_FILE
#Check Process Ran Okay
if [ "$?" = "0" ]; then
echo "RAN WITHOUT ERROR" >> $LOG_FILE
else
echo "SOME ERROR!" >> $LOG_FILE
fi
# Remove the lockfile/propertiesfile
rm -rf $PROPERTIES_HC
fi
这个脚本似乎一直运行正常,但是最近我遇到了脚本的“RUN_MY_PROCESS”元素失败的情况,并且脚本似乎只是退出了保存锁文件。
据我理解,除非我设置类似#!/bin/sh -e
的内容,否则无论错误如何,脚本都应该运行。我是否误解了shell脚本/ shell错误处理是如何工作的(我是新手!),还是我的shell脚本已经崩溃了 - 因此它没有完成运行?
提前感谢您的帮助。
答案 0 :(得分:3)
处理脚本内错误的正确方法(即导致脚本崩溃的错误)是traps。
您可以按照以下步骤修改脚本:
if [ -f $PROPERTIES_HC ]
#your regular script here
#...
#Run Process
trap 'echo "SOME ERROR" >> $LOG_FILE && rm -rf $PROPERTIES_HC' ERR
RUN_MY_PROCESS --overridefile $PROPERTIES_HC >> $LOG_FILE
#rest of your script here
#....