一、介绍
expect是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。
二、expect自动交互流程
spawn启动指定进程 -> expect匹配指定关键字 -> send向指定程序发送指定字符 -> eof执行完成退出
三、安装expect
yum install expect -y
四、expect常用命令
命令 | 说明 |
---|---|
spawn | 交互程序开始,后面跟命令或者指定程序 |
expect | 获取匹配信息匹配成功则执行expect后面的程序动作 |
send | 用于发送指定的字符串信息 |
exp_continue | 在expect中多次匹配需要用到 |
send_user | 用来打印输出 相当于shell中的echo |
exit | 退出expect脚本 |
eof | expect执行结束退出 |
set | 定义变量 |
puts | 输出变量 |
set timeout | 设置超时时间,默认30s,-1为无穷大 |
五、使用(以scp命令拷贝文件为例)
1.单次交互
a.直接使用scp命令拷贝文件
如果两台机器没有建立互信执行scp命令拷贝文件需要输密码,如下图所示:
b.新建脚本文件scp.sh
touch /opt/scp.sh
c.scp.sh文件中添加以下内容
#!/usr/bin/expect
spawn scp /opt/test.txt root@192.168.233.233:/home/highgo
expect "*password"
send "123456\n"
expect eof
d.scp.sh文件添加执行权限
chmod +x scp.sh
e.执行scp.sh
./scp.sh
2.多次交互
a.直接使用scp命令拷贝文件
如果两台机器没有建立互信执行scp命令拷贝文件需要先确认是否连接然后再输密码,如下图所示:
b.新建脚本文件scp.sh
touch /opt/scp.sh
c.scp.sh文件中添加以下内容
#!/usr/bin/expect
spawn scp /opt/test.txt root@192.168.233.233:/home/highgo
expect {
"*yes/no" {send "yes\n"; exp_continue}
"*password" {send "123456\n"}
}
expect eof
d.scp.sh文件添加执行权限
chmod +x scp.sh
e.执行scp.sh
./scp.sh
3.使用注意
- 匹配的字符串和发送的字符串必须是用双引号括起来,不能用单引号
- send命令发送的字符串中要带【\n】即回车
- 用scp命令源文件路径要具体到文件,不能用*代替