標籤:ftp shell 指令碼
#登入FTP伺服器擷取指定檔案
#$1:伺服器位址
#$2:帳戶
#$3:密碼
#$4:檔案路徑名
#$5:本地檔案路徑名
#$6:本地檔案名稱
#判斷ftp上傳結果:
#擷取上傳後的遠程檔案大小重新導向在本地檔案tmp,與本地檔案大小比較,相同為上傳成功,最後刪除本地記錄tmp;
#判斷外部調用函數(如system)執行結果:
#執行成功返回為上傳的結果:0,執行失敗為返回指令碼內執行結果或系統調用結果:非0,避免了外部調用一直返回成功:0;
#日誌修改:
#上傳後緊接著寫日誌(追加寫),另外ftp日誌大於100M則清空。
########################################################################
get_file()
{
#echo "$1 $2 $3 $4 $5 $6"
GF_HOST=$1
GF_USER=$2
GF_PASS=$3
GF_DATPATH=$4
GF_LOCPATH=$5
GF_SRCFILE=$6
#上傳檔案
ftp -in $GF_HOST >>ftp.log<<- EOF
quote USER $GF_USER
quote PASS $GF_PASS
bin
cd $GF_DATPATH
lcd $GF_LOCPATH
mput $GF_SRCFILE
dir $GF_DATPATH/$GF_SRCFILE tmp
quit
EOF
FTPSIZE=`cat $GF_LOCPATH/tmp |sed -n ‘/‘$GF_SRCFILE‘/p‘ |awk ‘{print $5}‘`
LOCALSIZE=`ls -l $GF_LOCPATH/$GF_SRCFILE |awk ‘{print $5}‘`
#echo $FTPSIZE
#echo $LOCALSIZE
if [ "$FTPSIZE" != "" ] && [ "$FTPSIZE" == "$LOCALSIZE" ]; then
RETCODE=0
else
RETCODE=125
fi
rm -rf $GF_LOCPATH/tmp
1> /dev/null
2> /dev/null
#return $?
return $RETCODE
}
#########################################################################################################################
get_log_line()
{
GLL_TIME=`date "+%Y-%m-%d %X"`
#GLL_PATH=`pwd` ‘/‘ `$FILENAME`
RESULT=$1
if [ "$RESULT" == 0 ]
then
STR_RESULT="成功!"
else
STR_RESULT="失敗!"
fi
echo "$GLL_TIME| 上傳 | 本地檔案:$2: $3 | 到 | 目標主機:$4:$5 | $STR_RESULT" >>ftp.log
}
clear_ftplog()
{
FTPLOGSIZE=`du -m ftp.log |awk ‘{print $1}‘ ||cut -f 1 -d "M" | cut -f 1 -d "."`
if [ $FTPLOGSIZE -gt 100 ]; then
echo "">ftp.log
fi
}
#####################################################################################################################
clear_ftplog "100"
HOST=""
USER=""
PASS=""
DATPATH=""
LOCPATH="l"
SRCFILE=""
get_file "$HOST" "$USER" "$PASS" "$DATPATH" "$LOCPATH" "$SRCFILE"
get_log_line "$?" "$LOCPATH" "$SRCFILE" "$HOST" "$DATPATH"
處理FTP成功上傳的判斷