linux中expect的介绍与使用示例

发布时间 - 2026-01-10 22:32:18    点击率:

一、概述

我们通过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脚本工作模式是一样的。

三、一个例子:

#!/usr/bin/expect -f 
set ip [lindex $argv 0 ]  //接收第一个参数,并设置IP 
set password [lindex $argv 1 ] //接收第二个参数,并设置密码 
set timeout 10     //设置超时时间 
spawn ssh root@$ip  //发送ssh请滶 
expect {     //返回信息匹配 
 "*yes/no" { send "yes\r"; exp_continue} //第一次ssh连接会提示yes/no,继续 
 "*password:" { send "$password\r" }  //出现密码提示,发送密码 
} 
interact   //交互模式,用户会停留在远程服务器上面. 

运行结果:

root@ubuntu:/home/zhangy# ./test.exp 192.168.1.130 admin 
spawn ssh root@192.168.1.130 
Last login: Fri Sep 7 10:47:43 2012 from 192.168.1.142 
[root@linux ~]# 

总结

以上就是关于linux下使用expect示例的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。


# linux  # expect  # 使用  # 详解  # linux自动化交互脚本expect详解  # Linux expect实现自动登录脚本实例代码  # Linux下使用expect命令编写自动化交互脚本  # expect实现批量修改linux密码脚本分享  # Linux中使用expect脚本实现远程机器自动登录  # linux expect实现登陆远程主机并执行命令示例代码  # 详解Linux使用shell+expect远程登录主机  # Linux自动化交互脚本expect从安装到开发详解  # 是一个  # 可以实现  # 最简单  # 第一个  # 要在  # 第二个  # 已经成为  # 则可  # 套件  # 停留在  # 提供给  # 来实现  # 不断发展  # 本质上  # 工作原理  # 编程语言  # 就使  # 编程工具  # 是一样的  # 有疑问 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 公司网站制作需要多少钱,找人做公司网站需要多少钱?  Laravel如何操作JSON类型的数据库字段?(Eloquent示例)  如何在VPS电脑上快速搭建网站?  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  浅谈Javascript中的Label语句  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  android nfc常用标签读取总结  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  Android自定义listview布局实现上拉加载下拉刷新功能  iOS验证手机号的正则表达式  html如何与html链接_实现多个HTML页面互相链接【互相】  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  深圳网站制作平台,深圳市做网站好的公司有哪些?  微信h5制作网站有哪些,免费微信H5页面制作工具?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程  详解jQuery中的事件  JavaScript Ajax实现异步通信  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  javascript基本数据类型及类型检测常用方法小结  长沙企业网站制作哪家好,长沙水业集团官方网站?  PythonWeb开发入门教程_Flask快速构建Web应用  七夕网站制作视频,七夕大促活动怎么报名?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  Laravel如何与Pusher实现实时通信?(WebSocket示例)  怎么用AI帮你设计一套个性化的手机App图标?  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  如何在Tomcat中配置并部署网站项目?  iOS发送验证码倒计时应用  Java类加载基本过程详细介绍  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  微信小程序 input输入框控件详解及实例(多种示例)  php 三元运算符实例详细介绍  香港服务器如何优化才能显著提升网站加载速度?  如何快速重置建站主机并恢复默认配置?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  JavaScript中的标签模板是什么_它如何扩展字符串功能  Laravel如何理解并使用服务容器(Service Container)_Laravel依赖注入与容器绑定说明  如何在阿里云ECS服务器部署织梦CMS网站?  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  如何快速上传自定义模板至建站之星?  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  JavaScript如何实现错误处理_try...catch如何捕获异常?  iOS正则表达式验证手机号、邮箱、身份证号等  Laravel如何创建自定义Artisan命令?(代码示例)  如何用PHP快速搭建CMS系统?