- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
揭开Expect的神秘面纱
揭开 Expect 的神秘面纱
我们通过 Shell 可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合
则必须通过人工来干预,有时候我们可能会需要实现和交互程序如 telnet 服务器等进行交
互的功能。而 Expect 就使用来实现这种功能的工具。
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 工作原理
从最简单的层次来说 Expect 的工作方式象一个通用化的Chat 脚本工具。Chat 脚本最早用
于UUCP 网络内,以用来实现计算机之间需要建立连接时进行特定的登录会话的自动化。
Chat 脚本由一系列 expect-send 对组成:expect 等待输出中输出特定的字符,通常是一个
提示符,然后发送特定的响应。例如下面的 Chat 脚本实现 等待标准输出出现 Login:字符串
然后发送 somebody作为用户名;然后等待 Password:提示符,并发出响应 sillyme。
Login: somebody Password: sillyme
这个脚本用来实现一个登录过程,并用特定的用户名和密码实现登录。
Expect 最简单的脚本操作模式本质上和 Chat 脚本工作模式是一样的。下面我们分析一个响
应 chsh 命令的脚本。我们首先回顾一下这个交互命令的格式。假设我们为用户 chavez改变
登录脚本,命令交互过程如下:
# chsh chavez
Changing the login shell for chavez
Enter the new value, or press return for the default
Login Shell [/bin/bash]: /bin/tcsh
#
可以看到该命令首先输出若干行提示信息并且提示输入用户新的登录shell。我们必须在提
示信息后面输入用户的登录 shell 或者直接回车不修改登录 shell。
下面是一个能用来实现自动执行该命令的 Expect 脚本:
#!/usr/bin/expect
# Change a login shell to tcsh
set user [lindex $argv 0]
spawn chsh $user
expect ]:
send /bin/tcsh
expect eof
exit
这个简单的脚本可以解释很多Expect 程序的特性。和其他脚本一样首行指定用来执行该脚
本的命令程序,这里是/usr/bin/expect。程序第一行用来获得脚本的执行参数(其保存在数
组$argv 中,从0 号开始是参数),并将其保存到变量user 中。
第二个参数使用 Expect 的spawn命令来启动脚本和命令的会话,这里启动的是 chsh 命令
实际上命令是以衍生子进程的方式来运行的。
随后的 expect 和 send命令用来实现交互过程。脚本首先等待输出中出现]:字符串,一旦在
输出中出现 chsh 输出到的特征字符串 (一般特征字符串往往是等待输入的最后的提示符的特
征信息)。对于其他不匹配的信息则会完全忽略。当脚本得到特征字符串时 expect 将发送
/bin/tcsh 和一个回车符给 chsh 命令。最后脚本等待命令退出(chsh结束),一旦接收到标
识子进程已经结束的eof 字符 expect 脚本也就退出结束。
决定如何响应
管理员往往有这样的需求 希望根据当前的具体情况来以不同的方式对一个命令进行响应。
我们可以通
您可能关注的文档
最近下载
- 小学英语新课程标准解读版.pptx VIP
- 服装设计教程_自学服装设计.pdf VIP
- 医疗机构相关法律法规培训PPT课件(医疗卫生与健康促进法、医师法、处方管理办法、传染病防治法、职业病防治法、医疗纠纷).pptx VIP
- XX市国资国企在线监管系统项目技术方案(2023最新).pdf VIP
- 《应急疏散演练》课件.ppt VIP
- 部编版小学四年级语文上册第一单元测试卷及答案(共4套).pdf VIP
- 2025年山区救援网5G网络覆盖对山区救援效率的影响报告.docx VIP
- 向量的概念试题.pdf VIP
- 光伏施工项目资源配备计划.docx VIP
- 中国地铁发展史PPT课件.pptx VIP
文档评论(0)