1、expect介绍
expect是由Don Libes基于Tcl语言开发的,主要应用于自动化交互操作的场景,借助Expect处理交互的命令,可以将交互过程如:ssh登录,ftp登录等写载一个脚本上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率。
2、expect命令
格式:
expect [ -dDinN ] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ]
-c:从命令行执行expect脚本,默认expect是交互执行。
-d:可以输出调试信息。
expect中相关命令
spawn:启动新的进程
send:用于向进程发送字符串
expect:从进程接受字符串
interact:允许用户交互
exp_continue:匹配多个字符串在执行动作后加此命令
3、expect常用语法
单一分支模式语法:
expect "hi" {send "you said hi\n"}
多分子模式语法
expect "hello" {send "you said hello\n"}\"hehe"{send "you said hehe"\n}
等同于
expect {
"hello" {send "you said hello\n"}
"hehe" {send "you said hehe\n"}
}
4、如何使用变量?
set NAME VARLUE
示例:
#!/bin/expect
#
set ip 192.168.0.1
set user root
set passwd 123456
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n" ; exp_continue }
"password" { send "$passwd\n" }
}
interact
5、位置参数
set NAME [lindex $argv #]
示例:
#!/bin/expect
#
set ip [lindex $argv 0]
set user [lindex $argv 1]
set password [lindex $argv 2]
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$password\n" }
}
interact
6、如何在shell脚本中调用expect
#!/bin/bash
#
ip=$1
user=$2
password=$3
expect <<eof
set timeout 10
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$password\n" }
}
expect eof
eof
注意:如果没有加选项interact,则expect eof 这个一定要加,与spawn对应表示捕获终端输出信息终止,类似于if….endif