利用expect实现scp自动交互

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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值