当前位置 : 首页 » 文章分类 :  开发  »  Expect脚本

Expect脚本

Linux Expect 交互脚本


expect 脚本

expect 是用来进行自动化控制和测试的工具。主要是和交互式软件 telnet ftp passwd fsck rlogin ssh tip 等进行自动化的交互。

Linux 交互命令中经常需要输入 yes/no 或者 password 等操作,模拟这些输入,就可以使用 expect 脚本。

expect 是由 tcl 语言演变而来的。简单地说,expect 是一个工具,可以根据用户设定的规则和系统进程进行自动化交互,例如远程登陆的密码输入、自动化的执行远程命令。

mac 自带 expect 脚本工具。


常用命令

spawn 启动进程(由 spawn 启动的进程的输出可以被 expect 所捕获)
expect 从进程接收字符串,期望获得字符串
send 向进程发送字符串,用于模拟用户的输入,注意最后一定要加 \r回车 或 \n换行 才能真正发出去。
interact 用户交互。表示执行完成后保持交互状态,把控制权交给控制台
sleep n 使脚本暂停给定的秒数

$argc expect 脚本的参数个数
$argv expect 脚本的参数数组,使用 [lindex $argv n] 获取第 n 个参数,0 是第一个参数

exp_continue 继续执行后续 expect
eof 结束当前 spawn 开启的进程。

单一分支语法

set password 123456
expect "*assword:" { send "$password\r" }

当输出中匹配*assword:时,输出password变量的数值和回车。

expect 多行期望

有时执行 shell 后预期结果是不固定的,有可能是询问是yes/no,有可能是去输入密码
此时可以使用多分支模式语法 expect{}
花括号内放多行语句,从上至下匹配,匹配到哪个expect,则执行哪句。
这里如果匹配到第一行会执行第一行;然后第一行的执行结果如果匹配到第二行也会执行第三行;
如果某一行没有匹配到会向下寻找匹配到的那一行进行执行

set password 123456
expect {
      "(yes/no)?" { send "yes\r"; exp_continue; }
      "*password:" { send "$password\r" }
}

当输出中包含(yes/no)?时,输出yes和回车,同时重新执行此多分支 expect 语句。
当输出中匹配*assword:时,输出password变量的数值和回车。


上一篇 Apache-Commons-Codec 笔记

下一篇 Helm

阅读
评论
574
阅读预计2分钟
创建日期 2020-09-28
修改日期 2020-09-29
类别
标签

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论