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
继续执行后续 expecteof
结束当前 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变量的数值和回车。
下一篇 Helm
页面信息
location:
protocol
: host
: hostname
: origin
: pathname
: href
: document:
referrer
: navigator:
platform
: userAgent
: