美文网首页
expect学习

expect学习

作者: 剑雪封侯之 | 来源:发表于2017-08-16 19:35 被阅读0次

expect简介

expect 是用来处理交互的命令,它是建立在tcl上的一个工具,通过它可以让一些需要交互的任务通过脚本来执行。

命令说明

解释器说明
#如果在该行后面加上-d,则会输出很多有用的信息。
#!/usr/bin/expect

上面的内容一般放在脚本第一行,用于告诉操作系统,使用expcect执行脚本中的内容。

send/send_user命令

send会将expect脚本中需要的信息发送给spawn启动的那个进程,而send_user只是回显用户发出的信息,类似于shell中的echo而已。
一般send用来发送密码,如:

#结尾需要以\r结束
send "123456\r"
expect命令

一般命令格式为:expect "passwd" { }
表示上次输出的结果中包含"passwd"字符,括号内放上需要执行的操作,此处可以将发送密码放在括号内。

spawn命令

该命令是进入expect命令后才可能执行的,属于expect内的命令。作用是给ssh运行进程加个壳,用来传递交互指令。
spawn后面加上需要执行的shell命令
如:

#用test用户登录到192.168.200.10 执行 ls -trlh 命令
spawn ssh  192.168.200.10 -l test "ls -tlrh ;"
interact命令

执行完成后保持交互状态,把控制权交给控制台。如果没有这一句登录完成后会退出,而不是留在远程终端上。

set命令

设置变量
一般用来设置超时时间,或者根据传入的参数设置相关变量,如:

#将超时时间设置为300s
set timeout 300
#将超时时间设置为永不超时
set timeout -1
命令行参数

可以通过[lindex $argv n]来获取第n个参数。
也可能通过[lrange $argv start end]来获取start到end的参数。

exp_continue命令

使用exp_continue命令后,执行会继续从expect开始执行。

实例

!#/usr/bin/expect
set IP [lindex $argv 0]
set USER [lindex $argv 1]
set PASSWD [lindex $argv 2]
spawn ssh ${IP} -l ${USER} " ls -tlrh ;"
set timeout -1
expect {
    -re "assword:"{ 
      send "${PASSWD}\r"
      send_user "登录成功"
      exp_continue
    }
    eof{
      exit
    }
    timeout{
      exit 
    }
    -re "Connection refused"{
      send_user"连接被拒绝"
      exit
    }
    -re "yes/no" {
       send "yes\r"
       exp_continue
    }
}

相关文章

网友评论

      本文标题:expect学习

      本文链接:https://www.haomeiwen.com/subject/pacwrxtx.html