背景介绍
expect 是由Don Libes基于Tcl( Tool Command Language )语言开发的,主要应用于自动化交互式操作的场景,借助Expect处理交互的命令,可以将交互过程如:ssh登录,ftp登录等写在一个脚本上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率
命令
在tcl语法中注释放在代码的后面会有问题,需要写在独立的行
expect
说明: 等待直至满足以下任意条件
- 某一规则匹配到衍生进程得输出
- 超时
- 遇到文件结尾
expect是面向整个输出缓冲区的,并非面向行
选项
-timeout 等待时间,expect内使用timeout用于局部覆盖全局timeout
匹配模式
1.字符串匹配
|
|
2.正则匹配(tcl语法)
|
|
缓冲区
匹配后结果保存在变量expect_out(buffer)
中,对于正则模式则最多保存9个正则子匹配结果,分别保存在expect_out(1,string)
至expect_out(9,string)
假如进程输出了”abcdefgh\n”,对于expect “cd”来讲,等同于执行
其中”efgh\n”留在输出缓冲
又比如进程输出”abbbcabkkkka\n”,对于expect -indices -re “b(b).(k+)”来讲等同于执行
衍生进程的缓冲区expect_out(spawn_id)
exp_continue
通常情况下匹配到结果并执行完操作后会返回,使用exp_continue允许expect自身继续循环执行而不是执行后直接返回,当前所在expect继续执行
stty
stty 用于控制终端
示例
interact
interact 将进行的交互控制权交给用户
send
send 向当前进程发送字符串
send_user 向用户发送字符串
spawn
spawn 创建新进程运行命令
示例: spawn ssh sxk@xxx.com
成功后spawn_id变量被设置为衍生进程id
set
set 设置变量
调试
方法1: 使用-d选项进行调试
方法2: 在脚本中使用exp_internal命令打开调试模式
最佳实践
与shell联动
成品展示
|
|