Expect 学习笔记

Expect 学习笔记


2024年5月4日发(作者:)

Expect学习笔记

————Tim

一、Expect介绍

Expect是一种TCL扩展性的语言,主要用于完成系统交互方面的功能,比如SSH、

FTP等,这些程序都需要手工与它们进行互动,而使用Expect就可以模拟人手工互动的

过程,使用一种自动的方式控制。

Expect中,有三个重要的主命令,分别是spawn、expect、exp_send,这三个命

令几乎存在于所有Expect脚本中,除了这些之外,还有很多Expect所特有的参数、变

量,它们也作用与Expect的方方面面。

二、 Expect命令

Expect中命令是最重要的部分,它们完成Expect中最关键的功能,命令使用的特点

就是他们本身就可以单独执行,使用上类似于:

命令 [选项] 参数

 spawn

spawn命令是Expect的初始命令,它用于启动一个进程,之后所有expect操

作都在这个进程中进行,如果没有spawn语句,整个expect就无法再进行下去

了,使用方法就像下面这样:

spawn ssh root@192.168.0.1

在spawn命令后面,直接加上要启动的进程等信息

当然,如果真的不要spawn过程也没有关系,虽然这样就没有办法单独执行,但

是这个脚本可以与任何调用它的进程进行交互。

除此之外,spawn还支持其他选项:

-open 启动文件进程,具体说明请参照下面的选项部分。

-ignore

 expect

使用方法:

expect 表达式 动作 表达式 动作 ………………

expect命令用于等候一个相匹配的输出,一旦匹配就执行后面的动作,这个命令

接受几个特有参数,用的最多的就是-re,表示使用正则表达式的方式匹配,使用

起来就像这样:

spawn ssh root@192.168.0.1

expect ―password:‖ {exp_send ―wordr‖}

忽略某些信号,具体说明请参照下面的选项部分。

从上面的例子可以看出,expect是依附与spawn命令的,当执行ssh命令后,

expect就匹配命令执行后的关键字:password:,如果匹配到关键字就会执行

后面包含在{}括号中的exp_send动作,匹配以及动作可以放在二行,这样就不

需要使用{}括号了,就像下面这样,实际完成的功能与上面是一样的:

spawn ssh root@192.168.0.1

expect ―password:‖

exp_send ―wordr‖

expect命令还有一种用法,它可以在一个expect匹配中同时匹配多个关键字,

只需要将关键字放在一个大括号中就可以了:

spawn ssh root@192.168.0.1

expect {

-re ―password:‖ {exp_send ―wordr‖}

}

上面的例子中,在一个expect匹配中可以匹配二个不同情况,如果发现有

password:字符就执行后面的动作,而发现的是另外一个TopsecOS#时,因为后

面的动作为空,就会退出这个expect动作,在这些动作中也有很多参数,我们

在后面来慢慢介绍。

上面我们看到了一种【表达式-动作】模式,还有人喜欢使用另一种格式,就像下

面这样:

spawn ssh root@192.168.0.1

expect –re ―password:‖ {

exp_send ―wordr‖

-re ―TopsecOS#‖ { }

} –re ―TopsecOS#‖ {

}

这种格式的好处是减少了一次缩进,不过看起来就没有那么清晰了,喜欢哪一种可

以自己决定。

 expect_before

在这个语句以下的所有expect语句之前,首先做一次匹配,使用这个命令需要

小心,首先来看例子:

expect {

eof eofproc

―login:‖

}

{send ―$userr‖}

expect {

eof eofproc

―password‖ {send ―$passwordr‖}

}

expect {

eof eofproc

―$prompt‖ {send ―$cmdr‖}

}

上面的例子中,每一个expect都有一个eof过程,而且都是首先检查有没有eof

事件,然后再往下检查其他的事件。对于这种情况,我们可以用下面的语句来代替:


发布者:admin,转转请注明出处:http://www.yc00.com/news/1714814001a2521090.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信