expect 是一个交互语言,用来实现自动和交互式任务进行通信,无需人的手工干预
例如密码交互
expect 通过 spawn 启动进程 -》 expect 获取期待关键字 -》 send 向进程发送字符串
下面是一个简单的交互案例
1 #!/usr/bin/expect -re
2 set timeout -1
3 set USERNAME %(userName)s
4 set PASSWORD %(password)s
5
6 spawn %(svn_commend)s
7
8 expect {
9 -re "sername" {exp_send "$USERNAME\r"; exp_continue}
10 -re "yes/no" {exp_send "no\r"; }
11 -re "Password for" {exp_send "$PASSWORD\r"; exp_continue}
12 }
13 expect eof
14 exit
1. #!/usr/bin/expect -re
告诉操作系统脚本里的代码使用那一个shell来执
-re 表示启用正则表达匹配
2. set timeout -1
设置超时时长 -1 代表永不过期
3. exp_continue
表示循环匹配。匹配到改关键字后继续从头开始匹配。例如安装软件时需要输入多个 yes
4. expect eof
匹配结尾 例如执行命令结束时则可以匹配到 eof
5. exit、interact
exit交互结束退出。 interact表示执行完后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了
6. exp_send/send
都是想程序发送字符串,有啥区别还没找到
7. send_user
send_user 命令用来把后面的参数输出到标准输出中去,默人的send、exp_send 命令都是将参数输出到程序中去的,
8.如何使用
mac 上直接使用 ./XX.sh 执行上述脚本不行。需要使用 expect XX.sh 才能正确执行
9.调试
expect -d XX.sh输出每次执行的过程可以用于编写脚本时调试之用