linux中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脚本工作模式是一样的。

三、一个例子:

?

#!/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示例的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

原文链接:http://lingxiankong.github.io/blog/2014/11/25/linux-expect/

原创文章,作者:LXDKU,如若转载,请注明出处:https://www.wangzhanshi.com/n/7629.html

(0)
LXDKU的头像LXDKU
上一篇 2025年1月1日 16:30:57
下一篇 2025年1月1日 16:31:00

相关推荐

  • 七个优秀的 Linux 滚动发行版

    林林总总的 Linux 发行版可以根据它们的特点、功能、预期用户群等分为不同的类别。在这篇文章中,我将列出一些最好的滚动发布的 Linux 发行版。 你知道什么是 滚动发布的发行版…

    2025年1月1日
  • 浅谈find命令下的atime,ctime,mtime

    linux下的find命令在目录结构中搜索文件,并执行指定的操作。linux下的find命令提供了相当多的查找条件,功能很强大,由于find的功能很强大,所以他的选项也很多,今天我…

    2025年1月1日
  • Linux下iptables 禁止端口和开放端口示例

    1、关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放。 下面是命令实现: ? iptables -P INPUT DROP iptables -P FORWA…

    Linux 2025年1月1日
  • linux尝试登录失败后锁定用户账户的两种方法

    本文主要给大家介绍了关于linux尝试登录失败后锁定用户账户的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍吧。 pam_tally2模块(方法一) 用于对系统进行失败…

    Linux 2025年1月1日
  • Linux下用C获取当前时间

    Linux下用C获取当前时间,具体如下: 代码(可以把clock_gettime换成time(NULL)) ? void getNowTime() {  timespec time…

    Linux 2025年1月1日
  • Linux中别名与二进制的使用教程

    本文介绍的是关于linux中别名与二进制使用的相关内容,分享出来给大家参考,下面来看看详细的介绍: 二进制 一般二进制这个名词听上去高深莫测,然而当你了解它之后其实并不复杂,在计算…

    2025年1月1日
  • Linux中openssl/opensslv.h找不到问题的解决方法

    前言 众所周知scrapy是Python中鼎鼎大名的爬虫框架,在安装scrapy过程中碰到了openssl某个文件找不到的问题,并进行了分析,记录之。 一、 scrapy以及安装过…

    Linux 2025年1月1日
  • Shell日常使用的小技巧

    Shell 脚本在我们日常开发和学习都有举足轻重的地位,比如看一些开源项目,比如项目中的各式各样的脚本,对于促进生产力工具有很大帮助! 1、命令小技巧 1、-x命令进行跟踪调试执行…

    2025年1月1日
  • Linux 内核通用链表学习小结

    描述 在linux内核中封装了一个通用的双向链表库,这个通用的链表库有很好的扩展性和封装性,它给我们提供了一个固定的指针域结构体,我们在使用的时候,只需要在我们定义的数据域结构体中…

    2025年1月1日
  • Linux date 时间设置同步命令分享

    date命令: #date 显示系统时间 hwclock命令 (即hardwareclock系统硬件时间) #hwclock 显示硬件时间 #hwclock -w 将系统时间写入到…

    Linux 2025年1月1日

发表回复

登录后才能评论