expect自动交互

1、linux expect说明
linux expect主要解决主动交互问题,通过expect判断系统返回信息,对下一步输入进行预定义,从而免除人工操作的低效率。需要说明一下在python中pexpect与expect有着相同作用。本示例主要以expect说明。

2、简单安装
我是用的是CentOS7做测试,在此平台上没有安装expect程序,安装即可
yum install expect

3、脚本示例
以下脚本,使用通过自动从mgt端口登录入ip.txt中列出服务器,获取版本信息,并记录在本地。

#!/bin/bash
iplist=(`cat ./ip.txt`)
userlist=('root')
passwdlist=('mimapassword')
i=0
while(($i<${#iplist[@]}))
do
/usr/bin/expect<echo -e "${iplist[$i]} `grep 'version:'`">>/TEST/sshResult.txt
set timeout 5
spawn ssh -p 22 ${userlist[0]}@${iplist[$i]}
expect {
"*yes/no)*" {send "yes\r"}
"*password*" {send "${passwdlist[0]}\r"}
}
expect "egString:/*"
send "version\r"
expect egString:/*"
send "exit\r"
EOF1
cd /TEST/
i=$((1+$i))
sleep 2
done

4、脚本说明
attention001:预定义多种可能
expect {
yes/no)” {send “yes\r”}
password” {send “${passwdlist[0]}\r”}
}

attention002:引用外部数组变量
spawn ssh -p 22 userlist[0]@ u s e r l i s t [ 0 ] @ {iplist[$i]}

attention003:*表示模糊匹配,send为发送命令,\r为回车执行
expect “egString:/*”
send “version\r”
expect egString:/*”
send “exit\r”

attention004:注意每次执行后退出的路径有变化,保证每次执行的环境路径一致 cd /TEST/

attention005:*重定向使用**
/usr/bin/expect<

你可能感兴趣的:(shell/python)