一、简介:
Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。Expect的作者Don Libes在1990年开始编写Expect时对Expect做有如下定义:Expect是一个用来实现自动交互功能的软件套件。系统管理员可以使用它创建脚本来模拟用户从终端的输入。Expect可以根据程序的提示,模拟出期望从标准输入输入的内容,甚至可以实现简单的BBS聊天机器人。 Expect是不断发展的,随着时间的流逝,其功能越来越强大,已经成为系统管理员的一个强大助手。Expect需要Tcl编程语言的支持,要在系统上运行Expect必须首先安装Tcl。
二、使用:
Expect脚本内容以#!/usr/bin/expect 开头,文件名常用后缀:.exp或者.ex结束。
1、主要命令有:
spawn:新建一个受控进程,这个进程的交互由expect控制;
bash -c:如果expect中使用通配符*,需要加bash -c
expect:等待受控进程返回的字符串,直到超时,根据匹配规则决定下一步操作;
-re:表示后面是一个正则表达式;
eof:结束所在块;
send:发送字符串给受控进程;
send_user:只是在终端显示该字符串,但不并发给受控进程;
set:设定变量为某个值;
set timeout -1 设置超时方式是永久等待;
set timeout 50 设置超时时间是50秒;
exp_continue:重新执行expect命令分支;
[lindex $argv 0]:获取expect脚本的第一个参数;
[lindex $argv 1]:获取expect脚本的第二个参数;
interact 将脚本的控制权交给用户,用户可继续输入;
puts:输出打印字符串;
sleep:后面加秒数,表示脚本睡眠多长时间;
close:关闭指定的连接
-i:指定要关闭的进程的spawn_id;
-slave:关闭spawn_id关联的子进程;
-onexec:检测是否有新打开的进程或进程是否有重叠,若有,0:保持打开,1:强制关闭
exit:退出expect;
2、分支语句:
expect命令采用了tcl的“模式-动作”语法:
单一分支语法:
set password 123456
expect "*assword:" {send "$password\r"}
多分支语法:
set password 123456
expect{
"(yes/no)?" {send "yes\r"; exp_continue}
"*assword:" {send "$password\r"}
}