加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 16:20:48 所属栏目:安全 来源:网络整理
导读:大家都知道expect是可以执行交互式命令的,例如:SSH等,当你有多台设备需要登录时,我们能不能使用类似java中的for循环来完成呢?下面我们来进行对比这两种方式: 1. cat forexpect.sh #!/bin/sh test() { expect -c " log_user 0; set timeout 10; spawn e

大家都知道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.0192.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 "$pwdr"
#interact
expect eof

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读