交互式单机、批量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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章