2013-06-18 27 views
1

,當我跑我的bash腳本,我收到此錯誤意外結束小時,仍然會出現這個錯誤。語法錯誤:</p> <p><strong>語法錯誤:文件意外結束</strong></p> <p>真的不能找到錯誤所在,一直在尋找文件

這裏是腳本希望有一個斜面點我在正確的方向:

#!/bin/bash 


BACKUPDIR=~/backup 
SCRIPTDIR=~/respaldar 
BACKUPFILE=/respaldo.$(date +%F).bz2 
BACKUPHOST=199.21.112.70 
COUNT=$(ls $BACKUPDIR | wc -l) 
TRESHOLD=7 




if [[ ! -e $BACKUPDIR ]] 
then 
    echo "Creating Backup Directory because it doesn\'t exist !" 
    mkdir ~/backup 
    COUNT=0 
# exit 0 
else 
    COUNT=$(ls $BACKUPDIR | wc -l) 
fi 




if [[ $COUNT -le $THRESHOLD ]] 
then 
     tar -cjvf $BACKUPDIR/$BACKUPFILE $SCRIPTDIR 
     if [[ $? -ne 0 ]]; then echo "Problems Creating Backup File;" fi 
     scp $BACKUPDIR/$BACKUPFILE $BACKUPHOST: 
     if [[ $? -ne 0 ]]; then echo "Problems Copying Backup File to Backup Host;" fi 
fi 







#END 

欣賞的幫助。

+6

'如果[[$? -ne 0]];然後回顯「創建備份文件的問題」;在fi之前,fi應該有一個分號。 – fedorqui

+0

請參閱http://www.shellcheck.net/以獲取自動化測試工具。 –

+1

'COUNT = $(ls $ BACKUPDIR | wc -l)'該死的愚蠢。 'files =(「$ backupdir」/ *); count = $ {#files [@]}'具有相同的效果,不需要執行所有在管道中產生'ls'所需的所有fork和exec調用的開銷......並且不依賴於實現定義的行爲'ls'。 ('ls'輸出應該保證每行只有一行,但是隻有當它沒有到達終端時,在這種情況下它是實現定義的...所以如果你依賴於'ls'看起來像當你將它運行到你的屏幕時,給定的平臺,它可能會給完全不同的輸出到一個管道!) –

回答

3

我拷入整個東西並發現了同樣的事情fedorqui

if [[ $? -ne 0 ]]; then echo "Problems Creating Backup File;" fi 
... 
if [[ $? -ne 0 ]]; then echo "Problems Copying Backup File to Backup Host;" fi 

;"前,後應。

我建議在兩種情況下使用較短的解決方案:

[ $? -ne 0 ] && echo "Problems Creating Backup File">&2 && exit 1 

如果失敗,這將退出。甚至更健談的版本:

tar -cjvf $BACKUPDIR/$BACKUPFILE $SCRIPTDIR || \ 
    { echo "Problems Creating Backup File">&2;exit 1;} 

,或者如果你想看到錯誤消息只在整個過程中失敗:

tar -cjvf $BACKUPDIR/$BACKUPFILE $SCRIPTDIR && \ 
    scp $BACKUPDIR/$BACKUPFILE $BACKUPHOST: || \ 
    { echo "Backup failed">&2;exit 1;} 
+0

甚至更​​短:'tar -cjvf「$ BACKUPDIR/$ BACKUPFILE」「$ SCRIPTDIR」||回聲「創建備份文件的問題」&& exit 1' – doubleDown

+0

我的意思是腳本會更短,而不是行... – doubleDown

+2

@doubleDown:'... || ...&&exit「不正確!即使'tar'完成了無問題,'exit'也會完成。 – TrueY

相關問題