我的bash脚本崩溃了吗?

时间:2017-07-24 10:26:29

标签: bash shell error-handling

我有一个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脚本已经崩溃了 - 因此它没有完成运行?

提前感谢您的帮助。

1 个答案:

答案 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
    #....