while/for 嵌套expect 批量免密码传文件

目的:我们机器的的ID密码都是各不相同的,不是统一ID和密码增加了脚本的难度,只能把服务器的ID密码ip相关信息写到一个文件中,用sed cut awk去取值,用expect调用这些值达到免密码的功能

这个是最终想要的结果,终于成功了,花了我几天的时间研究,真的不容易。

1,开始还是坚持用的for去写循环,发现shell参数好像传不到expect里面去,一直纠结怎么传参,百度了好久,spawn那里一直报错,我还查了spawn的语法格式,综合百度尝试了很多还是报错。

2,我单独把那个变量写在其他脚本里,看是否能echo出来,发现用的for出问题了,果断换成了while.于是脚本就被改成了以下形式

3,最后还是用for写出来了,主要是变量的值需要仔细测试是否成功

方法1 while-expect

[root@R1 shell]# cat ExCopy.sh
#!/bin/bash
while read LINES
do
        file=test.txt
        ID=`echo $LINES |cut -d : -f2`
        host=`echo $LINES |cut -d : -f1`
        passwd=`echo $LINES |cut -d : -f3`
        expect <<EOF
                spawn scp -r $file  $ID@$host:/tmp
        expect "yes/no"  {send "yes\n"}
        expect "password" {send "$passwd\n"}
        expect eof
EOF
done <list

运行结果:

[root@R1 shell]# ./ExCopy.sh
spawn scp -r test.txt lei@192.168.1.105:/tmp
The authenticity of host '192.168.1.105 (192.168.1.105)' can't be established.
RSA key fingerprint is 4d:74:55:fb:1b:5a:f4:d2:a6:fc:33:49:c4:e5:6f:09.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.105' (RSA) to the list of known hosts.
lei@192.168.1.105's password:
test.txt                                      100% 1702     1.7KB/s   00:00
spawn scp -r test.txt ray@192.168.1.106:/tmp
ray@192.168.1.106's password:
test.txt                                      100% 1702     1.7KB/s   00:00

文件已经在客户机上传送完毕

————————————————————————————

方法2 for-expect

还是想用for写出来,

思路:利用sed读取第一行,第一行可以设置变量,对第一行进行cut第几列的数据,做到可以精确的取出想要的值,接下来就是和expect语句了没多少变化

[root@R1 shell]# cat for.sh
#!/bin/bash
num=1
for i in `cat list`
do
        file=passwd
        ID=`sed -n "$num p" list | cut -d : -f2`
        host=`sed -n "$num p" list | cut -d : -f1 `
        passwd=`sed -n "$num p" list | cut -d : -f3 `
        let num+=1
expect <<EOF
         spawn scp -r $file  $ID@$host:/tmp
        expect "password" {send "$passwd\n"}
        expect eof
EOF
done
 

 

 

转载于:https://my.oschina.net/u/3713661/blog/1602587

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值