2014-10-22 86 views
0

我写了下面的代码:语法错误:在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 ] (这部分我用来检查目录是否包含文件或空的。

+2

请看:http://www.shellcheck.net/ – Cyrus 2014-10-22 08:53:55

+0

感谢,但还是它给人意外的文件结尾没有修复 – 2014-10-22 09:02:34

+0

删除'$ << REPORTS_PATH'。 – Cyrus 2014-10-22 09:11:19

回答

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独奏。

. 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 
+0

@Mohamed Yasser你有没有试过我的解决方案呢?或者,您的问题是通过评论回答的? – 2014-11-26 13:14:20

相关问题