expect 数组的使用 及 expect shell 交互

网上关于 expect 的脚本很多很多,但是 没有搜到一个关于 如何读取数组的,研究了好久,终于连蒙带猜的搞出来了,这个脚本,能够在不需要跟 shell交互的情况下,分发脚本

#!/usr/bin/expect -f
set password 123456
set ipArr {"100.109.100.188" "100.109.100.187" "100.105.30.186" "100.105.30.187" "100.105.30.188"}
set len [llength $ipArr]
for {set i 0} {$i < $len} {incr i} {
set ip "[lindex $ipArr $i]"
spawn scp -r /root/directory root@$ip:/data/www/
expect "root@$ip's password:"
send "$password\r"
set timeout 300
send "exit\r"
expect eof
}

下面的 是 shell 与expect 交互的一段 代码,目前是为了解决 expect 无法与本地交互的问题,

#!/bin/bash

ipArr=("10.109.100.18")
while true
do
echo -n "请您老人家输入要执行的命令: "
read cmd
if [ $cmd ]
then
echo "开始执行命令 : $cmd "
break
fi
done

#首先本地执行一次,expect的缺点在于无法与本地交互

eval $cmd

password="l8vwd"
# 跟远程交互,
for ip in ${ipArr[@]}
do
expect <<EOF
spawn ssh root@$ip $cmd
expect {
"root@$ip's password:" {
send "$password\r"
}
}
set timeout 300
send "exit"
expect eof
EOF
# EOF 一定要挨着行开始,否则会有语法错误
echo ""

done

Leave a comment

Your email address will not be published.

*