2017-06-05 33 views
2

我想寫一個代碼來檢查一個特定的日期文件,如果它存在,它會把它到我的本地主路徑,如果它不存在,那麼將檢索其他文件不同的日期。unix ftp腳本中的條件

#!/bin/ksh 

FILE1="CAS_20170604.txt" 
FILE2="CAS_20170603.txt" 

/usr/bin/ftp -n 93.45.148.9 << EOF 
    user usr passwd 
    cd "/abc/def" 
    bin 
    get $FILE1 

if [ ! -f $FILE1 ]; 
then 
    cd "/abc/def" 
    bin 
    get $FILE2 
fi 
    bye 
    !EOF! 

雖然在執行該腳本,我得到兩個文件,這是不需要的,下面的錯誤:

?Invalid command 
?Invalid command 

請有人可以幫助我在這裏。

+0

你有任何命令行客戶喜歡'wget','curl','fetch'?而不是直接使用腳本來使用'ftp'客戶端,在我看來,使用可以提供shell腳本可以解釋的返回代碼的東西來創建FTP協議請求會更容易。如果您認爲這可能是一種選擇,那麼很高興在答案中展示。 – ghoti

回答

2

您不能在ftp腳本中使用shell命令。

你必須拆分腳本分爲兩個:

/usr/bin/ftp -n 93.45.148.9 << EOF 
user usr passwd 
cd "/abc/def" 
bin 
get $FILE1 
bye 
!EOF! 

if [ ! -f $FILE1 ]; 
then 
    /usr/bin/ftp -n 93.45.148.9 << EOF 
    user usr passwd 
    cd "/abc/def" 
    bin 
    get $FILE2 
    bye 
    !EOF! 
fi 
+1

感謝:-)它的工作,另外我已經使用重定向,同時做第一個FTP,以防止輸出「無法打開文件」顯示在屏幕上,以防當前日期的文件沒有找到。例如:/ usr/bin/ftp -n 93.179.136.9 << !EOF! >/dev/null 2>&1 – User123