现在的位置: 首页 > 综合 > 正文

利用expect实现scp自动交互

2013年08月22日 ⁄ 综合 ⁄ 共 1877字 ⁄ 字号 评论关闭

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
应该可以执行了
!

 

抱歉!评论已关闭.