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条)