语法错误:shell脚本中的意外文件结束

时间:2014-10-22 08:50:43

标签: bash shell

我写下面的代码:

. smtp.config
SEND_MAIL(){
cat $BODY |mailx -s "report_`date '+%Y%m%d%H%s'`"  $TO_LIST -c $CC_LIST << $REPORTS_PATH ;
};
if [ ${#REPORTS_PATH[@]} -gt 0 ] then
SEND_MAIL;
echo  MAIL SENT : `date`  >> $LOG_FILE ;
mkdir $REPORTS_ARCHIVE/report_`date '+%Y%m%d%H%s'` ;
mv $REPORTS_PATH/* $REPORTS_ARCHIVE/report_`date '+%Y%m%d%H%s'` ;
echo done ;
fi

当我运行脚本时,它给了我:

./mail.sh: line 13: syntax error: unexpected end of file

另一件事是我可以用另一种语法替换这部分:if [ ${#REPORTS_PATH[@]} -gt 0 ] (这部分我用来检查目录是否包含文件或空。

1 个答案:

答案 0 :(得分:0)

. smtp.config
SEND_MAIL(){
cat $BODY |mailx -s "report_`date '+%Y%m%d%H%s'`"  $TO_LIST -c $CC_LIST << $REPORTS_PATH
}
if [ ${#REPORTS_PATH[@]} -gt 0 ]; then
SEND_MAIL
echo  MAIL SENT : `date`  >> $LOG_FILE
mkdir $REPORTS_ARCHIVE/report_`date '+%Y%m%d%H%s'`
mv $REPORTS_PATH/* $REPORTS_ARCHIVE/report_`date '+%Y%m%d%H%s'`
echo done
fi

如果为新命令创建新行,则不需要分号。如果在同一行上运行多个命令,则只需要它。

但这不是问题,它只是可选的。您的问题是在if语句的结束]括号后忘记的分号。如果你想避免使用分号,只需在下一行写下then solo。

. smtp.config
SEND_MAIL(){
cat $BODY |mailx -s "report_`date '+%Y%m%d%H%s'`"  $TO_LIST -c $CC_LIST << $REPORTS_PATH
}
if [ ${#REPORTS_PATH[@]} -gt 0 ]
then
SEND_MAIL
echo  MAIL SENT : `date`  >> $LOG_FILE
mkdir $REPORTS_ARCHIVE/report_`date '+%Y%m%d%H%s'`
mv $REPORTS_PATH/* $REPORTS_ARCHIVE/report_`date '+%Y%m%d%H%s'`
echo done
fi