expect 嵌入shell的for循环中的方式对比

大家都知道expect是可以执行交互式命令的,例如:SSH等,当你有多台设备需要登录时,我们能不能使用类似java中的for循环来完成呢?下面我们来进行对比这两种方式:

1.

> cat forexpect.sh 
#!/bin/sh   
test()  

{  

        expect -c "  

        log_user 0;  

        set timeout 10;  

        spawn echo $1;

        interact;"  

  

}  

n=(192.168.0.1 192.168.0.0 192.168.1.1)  

length=${#n[*]}  

echo "$length"  

for((i=0;i<$length;i++))  

do  

        echo "begin...."  

        echo $i  

        test ${n[$i]}  

        echo "end...."  

done
运行结果:sh forexpect.sh 
3
begin....
0
192.168.0.1
end....
begin....
1
192.168.0.0
end....
begin....
2
192.168.1.1
end....

在我标注红色的部分,似乎不能正常的使用 类似这样:
spawn ssh -o "StrictHostKeyChecking no" Administrator@192.168.1.47

的命令行,让人很苦恼,只好退而求其次,将expect的.sh文件和正常的shell的.sh文件分开来写;

2.

> begin.sh

#!/bin/bash

n=(192.168.1.0 192.168.1.1 192.168.1.2)

uname="Administrator"

pwd="66666666"

length=${#n[*]}

echo "$length"

for ((i=0;i<$length;i++))

do

        echo "begin..."

        echo $i

        ./open.sh    ${n[$i]} $uname $pwd

        echo "end..."

done


> cat open.sh

#!/usr/bin/expect -f
set ip [lindex $argv 0]
set uname [lindex $argv 1]
set pwd [lindex $argv 2]

spawn ssh -o "StrictHostKeyChecking no" $uname@$ip 
expect "*password:" 
send "$pwd\r" 
#interact
expect eof

在运行begin.sh的同时,在for循环中运行open.sh文件,既满足了我们交互式命令的需求,又能满足我们进行for循环的需要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值