初识Expect到Pexpect

expect (一个免费的编程工具语言)

Expect是一个用来实现自动和交互式任务进行通信的免费编程工具语言。从而不用手动处理。换句话说就是这些命令和程序是期望从终端得到输入,一般来说这些输入都需要手工输入进行的。 expect可以根据程序的提示模拟标准输入提供给程序需要的输入来实现交互程序执行,由Don Libes在1990年开始编写。

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安装****

****简单使用****

#!/usr/bin/expect
# ---------- 配置信息开始----------
#变量
set password heiheiPsd 
# expect脚本设置 
set timeout -1
#  ----------配置信息结束----------

spawn ssh root@192.168.88.888
expect "*password:"
send "$password\r"
interact

send:用于向进程发送字符串

expect: 期望从进程接收到的字符串,后面也可以跟正则表达式

spawn:启动进程

set timeout -1 :脚本运行超时(秒) -1不会超时

****与bash共用****

从上面可以看出第一行已经指定了脚本的解析器,但是很多时候或场景我们只希望expect作为shell脚本的一个小小的调用部分,然而使可以的,这也是最常用的。


echo "this bash func"

#---------expect开始----------
set password fenglican 
set timeout -1

expect<<- END
spawn ssh root@192.168.88.888
expect "*password:"
send "$password\r"
interact

END
#---------expect结束----------

Expect相对于C和perl的优势除支持Unix/Linux平台外,它还支持Windows
平台,它就是为系统管理和软件测试方面的自动交互类需求而产生的

Expect语言是基于Tcl的, 作为一种脚本语言,Tcl具有简单的语法:

cmd arg arg arg 
一条Tcl命令由空格分割的单词组成. 其中, 第一个单词是命令名称, 其余的是命令参数 . 

$foo 
$符号代表变量的值. 在本例中, 变量名称是foo. 

[cmd arg] 
方括号执行了一个嵌套命令. 例如, 如果你想传递一个命令的结果作为另外一个命令的参数, 那么你使用这个符号 .

"some stuff" 
双引号把词组标记为命令的一个参数. "$"符号和方括号在双引号内仍被解释 . 
            
{some stuff} 
大括号也把词组标记为命令的一个参数. 但是, 其他符号在大括号内不被解释. 

\
反斜线符号(\) 是用来引用特殊符号. 例如:\n 代表换行. 反斜线符号也被用来关闭"$"符号 , 引号,方括号和大括号的特殊含义 .

关于Tcl和Expect的语法,请参考Unix/Linux 平台任务的自动化相关部分。

Pexpect 下载链接
Pexpect Github链接

参考

Linux之expect交互语言命令

【转】expect语言学习笔记

探索 Pexpect,第 1 部分:剖析 Pexpect

探索 Pexpect,第 2 部分:Pexpect 的实例分析