- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
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@
在spawn命令后面,直接加上要启动的进程等信息
当然,如果真的不要spawn过程也没有关系,虽然这样就没有办法单独执行,但是这个脚本可以与任何调用它的进程进行交互。
除此之外,spawn还支持其他选项:
-open 启动文件进程,具体说明请参照下面的选项部分。
-ignore 忽略某些信号,具体说明请参照下面的选项部分。
expect
使用方法:
expect 表达式 动作 表达式 动作 ………………
expect命令用于等候一个相匹配的输出,一旦匹配就执行后面的动作,这个命令接受几个特有参数,用的最多的就是-re,表示使用正则表达式的方式匹配,使用起来就像这样:
spawn ssh root@
expect “password:” {exp_send “word\r”}
从上面的例子可以看出,expect是依附与spawn命令的,当执行ssh命令后,expect就匹配命令执行后的关键字:password:,如果匹配到关键字就会执行后面包含在{}括号中的exp_send动作,匹配以及动作可以放在二行,这样就不需要使用{}括号了,就像下面这样,实际完成的功能与上面是一样的:
spawn ssh root@
expect “password:”
exp_send “word\r”
expect命令还有一种用法,它可以在一个expect匹配中同时匹配多个关键字,只需要将关键字放在一个大括号中就可以了:
spawn ssh root@
expect {
-re “password:” {exp_send “word\r”}
-re “TopsecOS#” { }
}
上面的例子中,在一个expect匹配中可以匹配二个不同情况,如果发现有password:字符就执行后面的动作,而发现的是另外一个TopsecOS#时,因为后面的动作为空,就会退出这个expect动作,在这些动作中也有很多参数,我们在后面来慢慢介绍。
上面我们看到了一种【表达式-动作】模式,还有人喜欢使用另一种格式,就像下面这样:
spawn ssh root@
expect –re “password:” {
exp_send “word\r”
} –re “TopsecOS#” {
}
这种格式的好处是减少了一次缩进,不过看起来就没有那么清晰了,喜欢哪一种可以自己决定。
expect_before
在这个语句以下的所有expect语句之前,首先做一次匹配,使用这个命令需要小心,首先来看例子:
expect {
eof eofproc
“login:” {send “$user\r”}
}
expect {
eof eofproc
“password” {send “$password\r”}
}
expect {
eof eofproc
“$prompt” {send “$cmd\r”}
}
上面的例子中,每一个expect都有一个eof过程,而且都是首先检查有没有eof事件,然后再往下检查其他的事件。对于这种情况,我们可以用下面的语句来代替:
expect_before eof eofproc
expect “login:” {send “$user\r”}
expect “password” {send “$password\r”}
expect “$prompt” {send “$cmd\r”}
expect_after
与上面的expect_before一样,不过expect_after是用于在expect语句后面做匹配的,比如下面的语句:
您可能关注的文档
- CNG加气工站作业指导书.doc
- CNG汽车工加气站站用储气罐介绍.ppt
- COPD中工医护理方案.doc
- Cqmdl工fu康复医学重点.doc
- CRM需求工整合(预选址接口)操作手册(附常见问题)V1.3.docx
- CS应用于工基因传递的研究现状及进展.docx
- davy危工险穴位解剖.ppt
- DCDC模工块电源的设计方法.ppt
- DD,PD工F临床意义.doc
- dd201工4年主管护师综合卷考试例题及答案.doc
- 山东省威海市2023-2024学年高一年级下册期末考试语文试题及答案.pdf
- 2024-2025学年绥化市高二数学上学期开学考试卷(附答案解析).pdf
- 2024届贵州省贵阳某中学联考高考模拟预测地理试题(含答案解析).pdf
- 2024年公务员考试行测常识判断复习讲义.pdf
- 2024年广东学法考试试题附答案(考场一).pdf
- 2024年人教版八年级物理复习讲义:功 专项训练【五大题型】原卷版.pdf
- 江苏省泰州市高港区等2地2023-2024学年九年级上学期期中语文试题.pdf
- 酒店概论及酒店管理培训考试题库.pdf
- 湖北省旅游类《酒店服务》技能高考历年考试试题库(含答案).pdf
- 泰安市2025年中考一模考试物理试题(A)含解析.pdf
文档评论(0)