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  我的城市没有海  阅读(182)  评论(0)    收藏  举报