一、概述
我们通过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 这个名字 Linux 的 Wiki 介绍:http://zh.wikipedia.org/zh/Linux Linux 也称:GNU/Linux,而其中 GNU 的全称又是:Gnu’s Not Unix。 其中 GNU 放前面是有原因的,GNU 介绍:http://zh.wikipedia.org/wiki/GNU 对于 Linux 和 GNU/Linux 的两种叫法是有争议,可以看下
本文向大家介绍Python中的defaultdict与__missing__()使用介绍,包括了Python中的defaultdict与__missing__()使用介绍的使用技巧和注意事项,需要的朋友参考一下 前言 今天我们的主角是 defaultdict ,同时也会介绍一下模仿方法 __missing__() ,本文主要来源于网友博客,分享给有需要的人。下面话不多说了,来一起看看详细的介绍吧。
本文向大家介绍Linux中curl命令和wget命令的使用介绍与比较,包括了Linux中curl命令和wget命令的使用介绍与比较的使用技巧和注意事项,需要的朋友参考一下 本文介绍的是Linux中curl命令和wget命令,这两者都是用来下载文件的工具,下面来看看详细的介绍: 一、wget wget是linux最常用的下载命令, 一般的使用方法是: wget + 空格 + 要下载文件的url路径
本文向大家介绍vue中slot(插槽)的介绍与使用,包括了vue中slot(插槽)的介绍与使用的使用技巧和注意事项,需要的朋友参考一下 什么是插槽? 插槽(Slot)是Vue提出来的一个概念,正如名字一样,插槽用于决定将所携带的内容,插入到指定的某个位置,从而使模板分块,具有模块化的特质和更大的重用性。插槽显不显示、怎样显示是由父组件来控制的,而插槽在哪里显示就由子组件来进行控制 Vue slot
本文向大家介绍DataSet与DataTable的区别示例介绍,包括了DataSet与DataTable的区别示例介绍的使用技巧和注意事项,需要的朋友参考一下 DataSet:数据集。一般包含多个DataTable,用的时候,dataset["表名"]得到DataTable DataTable:数据表。 一: SqlDataAdapter da=new SqlDataAdapter(cmd); D
本文向大家介绍$("").click与onclick的区别示例介绍,包括了$("").click与onclick的区别示例介绍的使用技巧和注意事项,需要的朋友参考一下 Html代码 区别: 1.onclick是绑定事件,告诉浏览器在鼠标点击时候要做什么 click本身是方法作用是触发onclick事件,只要执行了元素的click()方法,就会触发onclick事件。如上诉代码所示,当点击'ee'按