2011-01-10 82 views
0

我有一個KornShell(ksh)腳本,寫出FTP腳本並執行從Windows服務器到UNIX的一些文件。FTP錯誤處理

echo "user <username> <pwd>" >ftpin.out 
echo "bin">>ftpin.out 
echo "get file.txt" >>ftpin.out 
echo "get file2.txt" >>ftpin.out 
echo "!echo $?">>ftpin.out 
echo"bye">>ftpin.out 

ftp -n -i servername <ftpin.out 
echo $? 

在這裏,我不能檢查文件是否存在源Windows系統上或不。由於這種通常的錯誤處理不起作用,$?當有任何文件存在,其他文件不存在時總是爲0。我甚至嘗試檢查ERRORLEVEL,但這在UNIX(Solaris 10)上不起作用。

任何人都可以顯示簡單的錯誤處理樣本的這個工作或如何做到這一點?日誌文件解析也被考慮在內,但還有其他內置方法嗎?其他FTP機制超出範圍。我們正在使用普通的舊FTP。

+0

停止使用ftp並切換到wget,curl或lftp。 – 2011-01-10 13:49:14

+0

對不起......我目前的組織不希望這樣。我無能爲力。 – 2011-01-10 13:58:37

回答

0

感謝的工具。我正在使用下面的方法使其工作。

echo "user <username> <pwd>" >ftpin.out 
echo "bin">>ftpin.out 
echo "get file.txt" >>ftpin.out 
echo "! [ ! -f file.txt ] && ksh alertme.sh" >>ftpin.out 
echo "get file2.txt" >>ftpin.out 
echo "! [ ! -f file2.txt ] && ksh alertme.sh" >>ftpin.out 
echo"bye">>ftpin.out 

ftp -n -i servername <ftpin.out 

通過上述方法,如果FTP無法複製一個文件,如果文件不存在於源服務器的話,我會打電話給alertme.sh腳本寄給我的錯誤信息。 這樣我甚至可以用它來覆蓋ftpin.out本身來停止ftp下一個文件的獲取。我將爲此測試下面的一個。

echo "! [ ! -f file.txt ] && echo bye>>ftpin.out" >>ftpin.out 

再次感謝。希望這有助於任何身體面臨類似的困難。

1

我不認爲讀$?將工作。您只需從執行的子shell中獲取值(使用!命令)。

我建議你可以看看expect:http://expect.sourceforge.net/ 它是免費的,可能在你的Linux發行版的倉庫中可用。

從網頁:

期待是自動化的交互式應用程序如telnet,f​​tp,passwd文件時,fsck,遠程登錄,提示等您的答覆

+0

感謝您的回覆。但正如我所提到的,我目前僅限於使用ftp本身,而沒有任何在當前環境中安裝任何工具的機會。 – 2011-01-10 13:50:19