2011-04-05 60 views
2

我有一噸左右使用以下功能的腳本:如何改進這個FTP(shell)函數?

# Copies files over using FTP. 
# Configurations set at the beggining of the script 
# @param $1 = FTP Host 
#   $2 = FTP User 
#   $3 = FTP User password 
#   $4 = Source file name 
#   $5 = destination directory 
#   $6 = local directory 
doftp() { 
    log_message_file "INFO" "Starting FTP" 

    ftp_hst=$1 
    ftp_usr=$2 
    ftp_pwd=$3 
    sourcefile=$4 
    destdir=$5 
    locdir=$6 

    ftp -nv $FTPH << EOF 2> ftp.err.$$ 
quote USER $ftp_usr 
quote PASS $ftp_pwd 
cd $destdir 
lcd $locdir 
bin 

put $sourcefile 

bye 
EOF 

    if [ "$(wc ftp.err.$$|cut -d" " -f8)" != 0 ] ; then 
     log_message_file "ERROR" "Problem uploading files: $(cat ftp.err.$$)" 
    else 
     log_message_file "INFO" "FTP finished" 
    fi 
    rm ftp.err.$$ 
} 

它的工作原理,做它的工作,除非FTP失敗。幸運的是,對於我來說,腳本非常精確,FTP幾乎從不失敗。但是,當人們有機會(時間)返回並查看TODO列表中標記的代碼時,這就是其中的罕見時刻之一。唯一的問題是我不太確定如何改善它......我會帶你們在那裏改變什麼的建議。

一個明顯的問題是從ftp解析錯誤,這是一個完全跛腳的問題。但我也會考慮其他部分的功能:)

值得一提的是在AIX服務器上運行?哦,不,我不能使用SFTP :(

感謝任何投入!

PS:log_message_file僅僅是一個基本的日誌...在功能沒有影響。

+0

也許這更適合codereview.stackexchange.com – 2011-04-05 16:30:46

+1

你使用哪個shell?例如用ksh和bash,'$( 2011-04-05 17:39:46

+0

謝謝!這是ksh。但它真的值得改變嗎?我的意思是,我猜「貓」會讓它更加跨平臺,對吧? – filippo 2011-04-06 08:32:24

回答

2
  • 好文檔
  • 良好的變量名
  • 良好的縮進,你可能想了解< < -EOF(在「 - 」是我打算用這條評論來選擇項目使用該功能可以縮進(必須使用標籤字符)w在這裏打開文檔以匹配其餘腳本的縮進。
  • 良好的使用TMP文件名以$$(取決於此功能被使用了多少,你可能想父腳本名稱附加到TMP名稱的一部分,以進一步消除歧義,而低優先級)
  • 好使用$(cat ftp.err。$$)即實際顯示錯誤信息,而不僅僅是一個像'錯誤發生'的消息(我總是看到這個,什麼錯誤?什麼是味精?!)

  • 你可以擴展ftp服務來使用mput,但是你必須瞭解你的特定ftp客戶端的變幻莫測,並且記下你的自己,每當有ftp客戶端發生變化時,你都需要檢查你的mput $ {fileNames}變量仍然按照您的預期工作。

  • 可能考慮改進的一個地方是使用case語句來解析STDERR輸出,但是再次,增加的好處可能不值得維護成本。

errMsgs="$(cat ftp.err.$$)" 

case "${errMsgs}" in 
    *warningStrings*) print "warning found, msg was ${errMsg} ;; 
    *errorStrings*) print "error found, msg was ${errMsg} ;; 
    *fatalStrings*) pring "fatal error found, can't continue, msg was ${errMsg} ;; 
esac

我希望這有助於。

+0

好東西!感謝您的提示!我一定會考慮一下''case''!唯一的問題是,要做到這一點,我必須知道FTP錯誤中的所有錯誤字符串......哪一種很難......對嗎?哦,以及如何識別heredoc的偉大提示!謝謝! – filippo 2011-04-05 17:18:03