转:expect的基本用法 - Shell - ChinaUnix.net -
转:expect的基本用法 - Shell - ChinaUnix.net -
转:expect的基本用法 - Shell - ChinaUnix.net -
一、概述我们通过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脚本工作模式是一样的。
例子:
1、实现功能
下面我们分析一个响应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。
2、下面是一个能用来实现自动执行该命令的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脚本也就退出结束。
转:expect的基本用法 - Shell - ChinaUnix.net -相关推荐
- shell expect的简单用法
为什么需要expect? 我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如 telnet服务器等进 ...
- shell中spawn什么意思_linux expect spawn的用法
1. [#!/usr/bin/expect] 这一行告诉操作系统脚本里的代码使用那一个shell来执行.这里的expect其实和linux下的bash.windows下的cmd是一类东西. 注意:这一 ...
- expect的基本用法
http://bbs.chinaunix.net/viewthread.php?tid=594417 一.概述 Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预. ...
- python中expect_(转)Expect的基本用法
Expect的基本用法 一.概述我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器等进行交 ...
- expect简介及用法
一.概述 我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要 交互的场合则必须通过人工来干预,有时候我们可能会需要实现 和交互程序如telnet服务器等进行交互的功能.而Exp ...
- Linux命令--expect spawn的用法(实现人机交互自动化操作)
一.作用 1.Except命令适用于人机交互场景进行使用,是处理交互的常用命令,可以将交互的过程写成一个脚本,通过调用脚本完成自动化过程: 2.适用场景:ssh登录,ftp登录等 二.基本语法 1.C ...
- 69:shell脚本介绍 | shell脚本结构 | 执行data命令用法 | shell脚本中变量
2019独角兽企业重金招聘Python工程师标准>>> 1.shell脚本介绍: shell是一种脚本语言和传统的开发语言相比,会比较简单: shell有自己语法,可以支持逻辑判断. ...
- Linux的冒号和波浪号用法,shell 学习三十五天---波浪号展开与通配符
shell 学习三十五天---波浪号展开与通配符 shell 中两种与文件名相关的展开.第一种是波浪号展开,第二种是通配符展开式. 波浪号展开 如果命令行字符串的第一个字符为波浪号(~),或者变量指定 ...
- split命令用法(shell)
split命令用法 s p l i t用来将大文件分割成小文件.有时文件越来越大,传送这些文件时,首先将其分割可能更容易.使用v i或其他工具诸如s o r t时,如果文件对于工作缓冲区太大,也会存在 ...
最新文章
- 转载《Data Guard Broker基础》
- 解决XP系统启动慢的问题
- Python字符串基本操作
- 8086之8253芯片仿真
- 实现WebMvcConfigurer接口扩展Spring MVC的功能
- boost::geometry::transform_variant用法的测试程序
- Unity 2017 Game Optimization 读书笔记 Dynamic Graphics(1)
- API的过去,现在与未来
- [转] Tomcat 系统架构与设计模式,第 1 部分: 工作原理
- Tomcat version 5.5 only supports J2EE 1.2, 1.3, and 1.4 Web modules
- [Linux系统编程/网络编程] 笔记目录
- 大地经纬度坐标系与Web墨卡托坐标系的转换
- WebStorm上vue模板设置
- 7-128 大于m的最小素数
- 教程篇(7.0) 03. FortiClient EMS配置和管理 ❀ FortiClient EMS ❀ Fortinet 网络安全专家 NSE 5
- 2021广东高考成绩排名如何查询,2021广东省地区高考成绩排名查询,广东省高考各高中成绩喜报榜单...
- 计算机网卡更改mac地址,Mac电脑网卡MAC地址修改的具体步骤
- 一周活动速递|深入浅出第8期;Meetup成都站报名进行中
- Java 基础知识总结—HashMap
- Java遍历包中所有类包括jar包(完整转载)
热门文章
- NavigateUr l动态参数 格式化参数
- #pragma 的几种用法
- python enumerate_详解 Python 的 enumerate 函数
- idea redis图形化_5.13redis图形化工具---idea中配置redis密码
- 石头扫地机器人音量怎么调_石头的新扫地机器人 T6,内外都有升级
- 无法支持python程序的编辑运行和调试_解决pycharm的Python console不能调试当前程序的问题...
- mysql doc插入数据_如何向MySQL数据库的表中录入数据.doc
- Java String to InputStream
- iOS UITextView和UITextViewDelegate
- Python字符串isdigit()