1. 基本介绍
Expect用于提供自动交互的工具。比如你要用ssh或者 telnet登录服务器的时候,命令行下提示需要输入用户和密码等。Expect就是为处理这类情况而设计的工具,简单来说它可以控制、处理输入,输出流,然后提供自动填写数据等需要用户交互式输入的数据的地方实现自动化处理。Expect就是为了处理“自动交互”的工具。
2. TCL语法
Expect采用的是一种叫做Tcl(Tool Command Language )的脚本语言,你至少要学习一下它的语法。
2.1. 命令行参数
$argc,$argv 0,$argv 1 ... $argv n
if {$argc<2} {
puts stderr "Usage: $argv0 login password./n "
exit 1
}
2.2. 输入输出
puts stderr "Usage: $argv0 login password./n "
2.3. 嵌套命令
set LOGIN [lindex $argv 0]
set PASS [lindex $argv 1]
2.4. 命令调用
spawn telnet 10.13.32.30 7001
2.5. 函数定义和调用
proc do_console_login {login pass} {
..............
}
2.6. 变量赋值
set done 1
2.7. 循环
while ($done) {
................
}
2.8. 条件分支Switch
switch -- $timeout_case {
0 {
...............
}
1 {
...............
}
2 {
...............
}
}
2.9. 运算
incr timeout_case
此外,还可以看到
Expect
的以下命令:
send
expect
send_user
可以通过
-d
参数调试
Expect
脚本:
# /usr/bin/expect -d sample_login.exp root 111111
......
调试输出和程序输出
.......
3. 示例
#!/usr/local/bin/expect –
set passwd [lindex
$argv 0]
set src_path [lindex
$argv 1]
set dst_path [lindex
$argv 2]
spawn scp $src_path $dst_path
set timeout 100
expect –re “.*assword:”
send “$passwd/r”
set timeout 100
send “exit/r”
expect eof
3. expect安装
需要两个安装程序
tcl8.4.13-src.tar.gz
下载
:http://download.chinaunix.net/do ... rceID=22&site=1
expect-5.43.0.tar.gz
下载
:http://download.chinaunix.net/do ... eID=2845&site=1
首先安装
tcl8.4.13
Tcl
的
configure
脚本有一个语法错误,下面的命令可以纠正它:
[root@wzhwho~]#sed -i "s/relid'/relid/" configure
编译
tcl
[root@wzhwho~]#cd unix
[root@wzhwho~]#./configure
[root@wzhwho~]#make
[root@wzhwho~]#make install
安装完毕完先不要删除源码,以会安装
expect
还要用到,接着,就是编译
expect
了
,
解压
gz
包就不说了
[root@wzhwho~]#./configure --with-x=no
如果报
checking for Tcl private headers... checking for tclInt.h... no
configure: error: Can't find Tcl private headers
就再添加一个头文件目录参数
--with-tclinclude=../tcl8.4.11/generic
[root@wzhwho~]#./configure --with-x=no --with-tclinclude=/usr/local/src/tcl8.4.13/generic
generic
在
tcl
源码里
脚本运行正常,进行执行
make
进行编译
[root@wzhwho~]#make
编译过程中未出现错误,执行安装:
[root@wzhwho~]#make install
编译完成后会生在刚才
tcl
编译时生成的目录
/ixdba.net
生成
expect
命令
,
此时在命令行执行
expect
应该可以执行了
!