expect用法小记
*unix下有许多程序需要和人交互,例如ssh、ftp、passwd、telnet等,在脚本中用到时需要手动处理很不利于自动化,expect就是代替用户自动处理这类交互的工具。免去交互过程大幅提高工作效率。
一、安装
expect依赖tcl脚本语言,这两个包centos源默认都有,直接yum安装:
yum install expect
expect也有移植到python和perl的版本,不多说。
二、用法
1. 常用expect命令参数
- “-c” 直接在命令行下执行
- “-d” 执行代码时输出调试信息
- “-b” 逐行执行脚本
2. 常用expect内部命令
- set 设置变量
- spawn 调用执行的命令
- expect 判断输出内容是否包含字符串
- send 执行交互,发送要手动输入的内容
- puts 输入输出
- interact 完成交互,把控制权交给控制台。如果是执行完命令退出:interact eof
举个ssh登录的例子:
#!/usr/bin/expect -f
set ip 127.0.0.1
set password 123123
set user root
set timeout 5
spawn ssh $user@$ip
expect {
"*yes/no" {send "yes\r";exp_continue}
"*password:" {send "$password\r"}
}
puts "\rexpect login finished\r"
interact
也可以使用“-c”参数从命令行执行:
expect -c "set timeout 5;spawn ssh root@127.0.0.1;expect *yes/no {send yes\r} *password {send 123123\r};interact"
如果在定时任务中调用了expect脚本,可能会出现无法成功执行的情况,需将脚本结尾的:
interact
改为:
expect eof
exit
参考文章:
http://blog.csdn.net/leexide/article/details/17485451
http://www.cnblogs.com/arlenhou/p/learn_expect.html