交互式單機、批量ftp的shell

可以向單個或多個主機傳送文件的shell,首先修改兩個參數ftp_user   ftp_passwd
就是接受文件主機的用戶名和密碼。如果是批量發送則接受文件主機的密碼必須相同。還要建立一個IP_file文件以一定的格式保存IP地址表。特別對經常向多個主機傳送文件的用戶非常方便,設置好參數,執行該shell就可以睡大覺了!


shell魅力無窮,歡迎交流並提出寶貴意見!!


#!/bin/ksh
#功能: 實現向轄區內單個網點或者所有網點傳送文件,以#顯示傳送情況.
#特殊要求:如果向全轄所有網點傳送文件需要一個IP地址表文件:IP_file和本shell文件
#         放在同一目錄下,格式:IP地址    | 機構碼  |  機構名稱   
#         第一行爲地址目錄,第二行爲服務器地址,從第三行開始是接受文件的主機
#作者:河南農信 “飛越無限”              tel:03753391193    qq:58016532
#版本:2006/01/20  (Today is my boy's birthday,I love him!!)
my_ftp()   #ftp函數
{
ftp -i -n "$ftp_address" << FTPIT
user "$ftp_user" "$ftp_passwd"
cd /tmp
bin
hash
put "$put_file" /tmp/"$get_file"
chmod 755 /tmp/"$get_file"
by
FTPIT
echo "[42mOK.......\07[40m"
}

ftp_menu()
{
clear
setcolor hi_white
echo "\n\n"
echo "\t\t┏━━━━━━━━━━━━━━━━┓"
echo "\t\t┃                                ┃"
echo "\t\t┃     1   向單個主機傳送文件     ┃"
echo "\t\t┃     2   向所有主機傳送文件     ┃"
echo "\t\t┃     0   退出                   ┃"
echo "\t\t┃                                ┃"
echo "\t\t┗━━━━━━━━━━━━━━━━┛"
echo "\t\t\t請選擇:\c"
setcolor white
}

#主程序
ftp_user=root            #ftp的登陸用戶
ftp_passwd=*******       #ftp的登陸用戶密碼
while true 
do
ftp_menu
read choise0 
[ "$choise0" -eq 0 ] && break
[ "$choise0" -ge 1 -a "$choise0" -le 2 ] || continue
echo "請輸入要發送的文件名(帶絕對路徑):\c"
while read put_file
  do
     if [ -f "$put_file" ]
       then
         break
       else
         echo "^[[33m輸入文件不存在,請重新輸入:^[[37m\c"
     fi
  done
get_file=`basename "$put_file"`
case $choise0 in                   #向單個主機發送文件
  1)
  echo "請輸入接受文件的主機IP地址:\c"
  while read ftp_address
  do
    [ $ftp_address = "0" ] && break
    [ $ftp_address = "n" ] && break
    num=`ping -c 1 $ftp_address | awk '$2 == "packets" {print substr($7,1,1)}'`
    if [ $num = 0 ]
     then
       my_ftp
     else
      echo "^[[41m地址是"$ftp_address"的網點網絡不通!!!^[[40m"
     fi
    echo "\n^[[33m請輸入接受數據主機的IP地址,退出請輸入[0/n]:^[[37m\c"
  done
  ;;

2)        #向全轄主機發送文件
  if [ -f /tmp/auto_ftp.log ]
     then
          rm /tmp/auto_ftp.log
  fi
  IP_address=`tail +3 IP_file | awk -F\| '{print $1}'`
  echo "\n^[[44m開始向轄內所有網點發送文件,請按 y 確認:^[[40m\c"
  read choise2
  if [ $choise2 = y ]
   then
    for ftp_address in $IP_address
      do
        num=`ping -c 1 $ftp_address | awk '$2 == "packets" {print substr($7,1,1)}'`
        if [ $num = 0 ]
          then
             echo "^[[32m向主機地址是"$ftp_address"發送文件......^[[37m"  
             echo "向主機地址是"$ftp_address"發送文件" >>/tmp/auto_ftp.log
             my_ftp
          else 
             echo "^[[41m主機IP是"$ftp_address"的網點網絡不通!!^[[40m" 
             echo "主機IP是"$ftp_address"的網點網絡不通!!" >>/tmp/auto_ftp.log
         fi
     done
     echo "\n^[[45m請按任意鍵返回菜單!^[[40m" 
  else
    echo "\n^[[2;14;4m輸入錯誤發送失敗!!^[[2;7;0m"
  fi
   read wait
  ;;
esac
done


發佈了11 篇原創文章 · 獲贊 11 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章