• 博客园Logo
  • 会员
  • 周边
  • 捐助
  • 新闻
  • 博问
  • 闪存
  • 赞助商
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 简洁模式 ... 退出登录
    注册 登录
我的城市没有海
我想看看海,曾听说大海很美,可是我的城市没有海。
博客园    首页    新随笔    联系   管理    订阅  订阅

shell脚本批量自动分发文件

1、安装expect

yum -y install expect

 2、创建iplist.txt文件(要分发的IP地址)

vim iplist.txt

192.168.100.22
192.168.100.23

 3、创建pwd.txt(里面包含密码)

vim pwd.txt

123456
123123

 4、创建脚本fenfa_file.sh

vim fenfa_file.sh

#!/bin/bash
echo "拷贝情况如下:" > /root/test.log
n=`cat /root/iplist.txt | wc -l`        #分发的ip数量
for (( i=1; i<=$n; i++ ))
do
passwd=`cat /root/pwd.txt|head -$i|tail -1`        #第i个IP地址的密码

ip=`cat /root/iplist.txt|head -$i|tail -1`        #第i个IP地址
echo $ip

/usr/bin/expect <<EOF
spawn scp /root/1.txt $ip:/root/
expect "yes/no" {send "yes\n;exp_untinue"}
expect "password" {send "$passwd\n"}
expect eof
EOF
if [ $? -eq 0 ];then
echo "$ip:成功" >>/root/test.log
else
echo "$ip:失败" >>/root/test.log

fi
done

 5、执行脚本

[root@server01 ~]# sh fenfa_file.sh
192.168.100.22
spawn scp /root/1.txt 192.168.100.22:/root/
root@192.168.100.22's password:
1.txt                                                                                                  100%    0     0.0KB/s   00:00
192.168.100.23
spawn scp /root/1.txt 192.168.100.23:/root/
root@192.168.100.23's password:
1.txt                                                                                                  100%    0     0.0KB/s   00:00

#第一次分发没有等待是因为在执行时需要输入yes/no来确认是否连接,第二次分发会在输入密码那里等待几秒是因为第二次是直接输入密码,不需要在输入yes/no

 6、查看test.log分发日志

[root@server01 ~]# cat test.log
拷贝情况如下:
192.168.100.22:成功
192.168.100.23:成功

 7、如果密码是相同的 可以把密码指定到变量里面进行执行

#!/bin/bash
echo "拷贝情况如下:" > /root/test.log
n=`cat /root/iplist.txt | wc -l`
for (( i=1; i<=$n; i++ ))
do
#passwd=`cat /root/pwd.txt|head -$i|tail -1`
passwd="123456"
ip=`cat /root/iplist.txt|head -$i|tail -1`
echo $ip

/usr/bin/expect <<EOF
spawn scp /root/1.txt $ip:/root/
expect "yes/no" {send "yes\n;exp_untinue"}
expect "password" {send "$passwd\n"}
expect eof
EOF
if [ $? -eq 0 ];then
echo "$ip:成功" >>/root/test.log
else
echo "$ip:失败" >>/root/test.log

fi
done

 

******************************我也想难过的时候到海边走走,可是我的城市没有海。******************************
posted @ 2023-09-26 17:30  我的城市没有海  阅读(110)  评论(0)  编辑  收藏  举报
会员力量,点亮园子希望
刷新页面返回顶部
Copyright © 2024 我的城市没有海
Powered by .NET 8.0 on Kubernetes