2014-10-22 85 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

相關問題