2013-10-23 55 views
0

我使用下面的shell腳本代碼來上傳一個大的.tar文件。有時會發生服務器無法將域解析爲IP或其他服務器不可用的情況。所以我不想重試一些時間,如果它沒有工作。我怎樣才能做到這一點?我無法在互聯網上找到這樣的東西。shell bash腳本 - 上傳一個大的tar文件,重試?

ftp -inv << EOF 
    open $FTP_SERVER 
    user $FTP_USER $FTP_PASS 
    cd $FTP_VERZEICHNIS 
    mkdir ultimate_$DATE 
    cd ultimate_$DATE 
    mput *.tar 
    quit 
EOF 

編輯:

對不起,我有殼無真實經歷,怎麼會是這個樣子?

FTP_SUCCESS_MSG="226 Transfer complete" 
while [fgrep "$FTP_SUCCESS_MSG" $FTPLOG] 
do 
FTPLOG=/temp/ftplogfile 
ftp -inv <<! > $FTPLOG 
    open $FTP_SERVER 
    user $FTP_USER $FTP_PASS 
    cd $FTP_VERZEICHNIS 
    mkdir ultimate_$DATE 
    cd ultimate_$DATE 
    mput *.tar 
    close 
    quit 
! 
fi 
exit 0 
sleep 10s 
else  
    echo "Upload completed" 
done 
+0

像'而[$ I -le 5]。做...睡10; (第(i ++)); done'? – fedorqui

+0

是的,如果連接失敗,我該如何得到? – user2693017

+0

你可以檢查http://stackoverflow.com/questions/4899316/getting-exit-status-code-from-ftp-command-in-linux-shell – fedorqui

回答

1

從您的代碼和一個在Getting exit status code from 'ftp' command in linux shell我做了這個適應:

#!/bin/bash 

FTP_SUCCESS_MSG="226 Transfer complete" 
FTPLOG=/temp/ftplogfile 

i=0 
while [ $i -le 5 ]; do 

ftp -inv <<! > $FTPLOG 
    open $FTP_SERVER 
    user $FTP_USER $FTP_PASS 
    cd $FTP_VERZEICHNIS 
    mkdir ultimate_$DATE 
    cd ultimate_$DATE 
    mput *.tar 
    close 
    quit 
! 

    if fgrep "$FTP_SUCCESS_MSG" $FTPLOG ;then 
    i=10 #stupid way of saying: exit the "while" 
    else 
    sleep 5 
    i=expr $i + 1  # ((i++)) not working 
    fi 

done 
+0

謝謝你,但我得到一個意想不到的fi:語法錯誤:「fi」意外(期待「完成」) – user2693017

+0

哦,有一個'fi'太多。再次檢查並查看。 – fedorqui

+0

該死的,我刪除它,但執行錯誤.sh:/ – user2693017