美文网首页
expect基础与用法

expect基础与用法

作者: wavesnow | 来源:发表于2017-08-24 17:55 被阅读206次

Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。Expect的作者Don Libes在1990年开始编写Expect时对Expect做有如下定义:Expect是一个用来实现自动交互功能的软件套件(Expect [is a] software suite for automating interactive tools)。使用它系统管理员的可以创建脚本用来实现对命令或程序提供输入,而这些命令和程序是期望从终端(terminal)得到输入,一般来说这些输入都需要手工输入进行的。Expect则可以根据程序的提示模拟标准输入提供给程序需要的输入来实现交互程序执行。甚至可以实现实现简单的BBS聊天机器人。

Expect是不断发展的,随着时间的流逝,其功能越来越强大,已经成为系统管理员的的一个强大助手。Expect需要Tcl编程语言的支持,要在系统上运行Expect必须首先安装Tcl。
具体的说,借助Expect,我们可以将交互过程写在一个脚本上,使之自动化完成。形象的说,ssh登录,ftp登录等都符合交互的定义。

expect详解

expect中最关键的四个命令是send,expect,spawn,interact

  • send:用于向进程发送字符串
  • expect:从进程接收字符串
  • spawn:启动新的进程
  • interact:允许用户交互

send命令

send命令接收一个字符串参数,并将该参数发送到进程。

expect
send "hello world\n"
hello world

expect命令

1.基础知识

expect命令和send命令正好相反,expect通常是用来等待一个进程的反馈。expect可以接收一个字符串参数,也可以接收正则表达式参数。和上文的send命令结合,现在我们可以看一个最简单的交互式的例子:

expect "hi\n"
send "hello there!\n"

这两行代码的意思是:从标准输入中等到hi和换行键后,向标准输出输出hello there

2.模式-动作

expect最常用的语法是来自tcl语言的模式-动作。这种语法极其灵活,下面我们就各种语法分别说明。
单一分支模式语法:

expect "hi" {send "You said hi"} //匹配到hi后,会输出"you said hi"

多分支模式语法:

expect "hi" { send "You said hi\n" } \
"hello" { send "Hello yourself\n" } \
"bye" { send "That was unexpected\n" }  //匹配到hi,hello,bye任意一个字符串时,执行相应的输出

spwan 命令

上文的所有demo都是和标准输入输出进行交互,但是我们跟希望他可以和某一个进程进行交互。spawm命令就是用来启动新的进程的。spawn后的send和expect命令都是和spawn打开的进程进行交互的。结合上文的send和expect命令我们可以看一下更复杂的程序段了。

set timeout -1
spawn ftp ftp.test.com    //打开新的进程,该进程用户连接远程ftp服务器
expect "Name"             //进程返回Name时
send "user\r"             //向进程输入anonymous\r
expect "Password:"        //进程返回Password:时
send "123456\r"           //向进程输入don@libes.com\r
expect "ftp> "            //进程返回ftp>时
send "binary\r"           //向进程输入binary\r
expect "ftp> "            //进程返回ftp>时
send "get test.tar.gz\r"  //向进程输入get test.tar.gz\r

这段代码的作用是登录到ftp服务器ftp ftp.uu.net上,并以二进制的方式下载服务器上的文件test.tar.gz。程序中有详细的注释。

interact

如何让人在适当的时候干预这个过程了。比如下载完ftp文件时,仍然可以停留在ftp命令行状态,以便手动的执行后续命令。interact可以达到这些目的。

shell脚本实现ssh自动登录远程服务器示例:

#!/usr/bin/expect
set timeout 30
spawn ssh root@192.168.1.100
expect "root@192.168.12.1's password:"
send "password\r"
interact

autoexpect 工具

如果自己懒得写expect代码,则可以用autoexpect生成。autoexpect工具是用expect写成的一个工具脚本,它可以录制你执行的操作、命令、键盘输入等等,之后自动生成expect脚本。


如果系统里没有expect请自行到官网下载安装:http://expect.sourceforge.net/

相关文章

  • expect基础与用法

    Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。Expect的作者Don ...

  • 2020-04-04

    Linux Expect 用法 关键字解释: spawn交互程序开始后面跟命令或者指定程序 expect获取匹配信...

  • expect交互命令解析与用法

    (转)参考文章:https://www.cnblogs.com/TDXYBS/p/11012089.html[ht...

  • expect 用法(监控脚本)

    关于expect expect #自动应答命令用于交互式命令的自动执行spawn #expect中的监控程序,其运...

  • Linux工具expect用法

    注意: 一个 用一个expect,不要多个 放在一个expect里面 所有的 按顺序排列 重复的 要单独列出来,e...

  • __builtin_expect的用法

    在观看suricata的源码时,看到以下代码: 这个指令是gcc引入的,作用是允许程序员将最有可能执行的分支告诉编...

  • expect - 自动交互脚本

    expect - 自动交互脚本 目录 expect参数 expect教程中文版 expect中文手册 expect...

  • Alamofire高级用法

    基础用法和高级用法的区别: 基础用法:AF.request()、AF.download()、AF.upload()...

  • QS|expect“期待”、“期望”还有哪些用法与搭配!

    expect 表示 “期待” “期望” 通常为及物动词 不要受汉语影响在其后误加介词for 如 我们不能期望一夜之...

  • linux expect 自动交互脚本用法

    检查是否安装tcl,expect expect参数 启用选项 -c:执行脚本前先执行的命令,可多次使用。 -d:d...

网友评论

      本文标题:expect基础与用法

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