一、Expect介绍
Expect是一个用来实现自动交互功能的软件套件。
使用Expect可以模拟手工交互的过程,实现自动与远端程序的交互。例如当执行ssh命令连接服务器时,需要手动输入密码,如果采用Expect,就可以自动交互,无需再人工手动输入密码了。
二、安装Expect
ubuntu系统,执行以下命令安装
apt install expect
查看安装软件
apt show expect
三、使用
- 注意
以下的命令都不能在命令行中直接执行,需要在expect脚本中执行
3.1 spawn命令
spawn命令是Expect程序实现自动交互的前提(第一步)
spawn执行一个命令或程序,之后的所有Expect操作都会在这个执行过的命令或程序进程中进行。
- 语法
spawn [需自动交互的命令或程序]
- 示例
spawn ssh root@122.122.13.44
3.2 expect命令
第一步使用spawn命令执行命令或程序之后,会提示某些交互式信息,expect命令作用就是对这些交互式信息进行筛选匹配,一旦匹配成功,就执行动作。
- 语法
expect 表达式 [动作]
- 示例
spawn ssh root@122.122.13.44
expect “*password” {send “123456\n”}
“*”号表示通配符,一旦交互式信息中出现 *password,就输入信息123456,\n表示换行
expect的高级用法
可以实现在一个expect匹配中进行多次不同的字符串匹配,根据不同的字符串执行不同的处理动作
- 示例脚本
#!/usr/bin/expect --->指定expect解析器
spawn ssh root@122.122.13.44 uptime
expect { --->注意expect和起始大括号之间要有空格
"yes/no" {exp_send "yes\r";exp_continue} --->如果匹配到yes/no,则输入yes;还需要继续进行匹配,则加上exp_continue,达到多次匹配的效果
"password" {exp_send "123456\r"}
}
expect eof --->结束expect
send和exp_send作用类似
3.3 send命令
用来执行动作,与exp_send命令类似
3.4 send_user命令
相当于shell中echo命令,用来打印信息
- 示例
执行expect脚本结果如下:
四、Expect程序变量
4.1 普通变量
- 定义
set 变量名 变量值
- 打印
puts $变量名 --> 方法1
send_user " $变量名" --> 方法2
- 示例
执行结果如下:
4.2 特殊参数变量
Expect中也有类似于shell脚本里$1,$2等类似的特殊参量变量,用于接收及控制Expect脚本传参。
使用$argv表示参数数据,[lindex $argv n]接收Expect脚本传参,n从0开始,表示第一个参数
- 示例
执行脚本结果如下: