expect | 是自动应答命令,用于交互式命令的自动执行 |
---|---|
spawn | 是expect中的监控程序,其运行后会监控命令提出的交互问题 |
send | 发送问题给交互命令 |
“\r” | 表示回车 |
exp_continue | 标示当问题不存在时继续回答下面的问题 |
expect eof | 标示问题回答完毕退出expect环境 |
interact | 标示问题回答完毕依然保留交互界面 (ssh登陆时需要使用) |
set NAME[ lindex $argv n ] | 定义变量,NAME是占为符 |
一、传统一问一答模式
例:使用read实现交互式命令应答
vim ask.sh #编写read问题文件
执行sak.sh文件,需要输入
二、自动应答模式的提出及自动应答
简单自动应答,将已知结果写入脚本
vim /mnt/answers.sh #编写问题回答文件
sh /mnt/answers.sh #执行应答文件,应答成功,省略read交互命令,直接给出结果
缺点:当去掉其中一个问题时,自动应答发生错乱
解决方式:
自动应答器expect
yum install expect -y #安装应答服务
vim answer.exp #编写/mnt/ask.sh文件的自动应答文件
执行自动应答文件:
expect answer.exp
注意:
【1】
ask.sh文件中若问题不存在,使用exp_continue不影响其他问题回答
vim ask.sh #编辑问题文件
vim answer.exp
expect answer.exp #执行应答文件answer.exp
【2】
expect回答问题的顺序可随意
vim answer.exp
#应答正常执行
expect answer.exp #执行
【3】
应答继续标志exp_continue,必须在最后一个问题之前都加上,才能保证应答正常进行
例:若继续标志加到前面问题上
vim answer.exp
#无法执行下去
expect answer.exp
三、智能化应答
方式:执行answer.exp脚本+问题回答,自动给出结果
优点:可根据需要输出自己给出的各种问题回答
【1】expect eof执行完后自动退出
vim /mnt/answer.exp
测试:
expect answer.exp ly 18 MATH happy
expect answer.sh zl 20 CHINESE happy
【2】interact应答完保留交互界面的使用
ssh服务
vim auto_ssh.exp
expect eof在ssh服务中的使用:
维持时间为timeout设置的时间,不能用来进行ssh服务交互