linux中expect的介绍与使用示例

 更新时间:2017年01月15日 15:04:43   作者:Lingxian_Kong  
expect是一种自动交互语言,能实现在shell脚本中为scp和ssh等自动输入密码自动登录。下面这篇文章主要介绍了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示例的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

相关文章

  • 关于安装LNMP集成包后上传图片报500错误的解决方法

    关于安装LNMP集成包后上传图片报500错误的解决方法

    这篇文章主要给大家介绍了关于安装LNMP集成包后上传图片报500错误的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-01-01
  • linux使用find和crontab命令定期清理过期文件

    linux使用find和crontab命令定期清理过期文件

    这篇文章主要给大家介绍了linux系统下使用find和crontab命令定期清理过期文件的方法,文中先对find和crontab命令进行了详细的介绍,相信对大家的理解和学习具有一定的参考借鉴价值,下面来一起看看吧。
    2016-12-12
  • Linux云服务器搭建SFTP服务器图片服务器的操作

    Linux云服务器搭建SFTP服务器图片服务器的操作

    这篇文章主要介绍了Linux云服务器搭建SFTP服务器图片服务器的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • yum 安装memcache permission denied(拒绝访问) 问题

    yum 安装memcache permission denied(拒绝访问) 问题

    这篇文章主要介绍了yum 安装memcache permission denied(拒绝访问) 问题,需要的朋友可以参考下
    2017-03-03
  • Ubuntu 12.04 64位 对Python 源代码编译详解

    Ubuntu 12.04 64位 对Python 源代码编译详解

    这篇文章主要介绍了Ubuntu 12.04 64位 对Python 源代码编译的相关资料,需要的朋友可以参考下
    2017-01-01
  • win10 + Ubuntu20.04 LTS双系统引导界面美化

    win10 + Ubuntu20.04 LTS双系统引导界面美化

    这篇文章主要介绍了win10 + Ubuntu20.04 LTS双系统引导界面美化,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • apache虚拟主机的配置指南

    apache虚拟主机的配置指南

    本文介绍了apache虚拟主机的配置的方法,要配置apache的虚拟主机,我们需要分以下几步进行:检查apache虚拟主机模块,开启apache虚拟主机功能,httpd-vhosts.conf文件详解,根据IP配置虚拟主机,根据端口配置虚拟主机,根据域名配置虚拟主机,有需要的小伙伴参考下
    2015-01-01
  • 详解Lamp环境搭建Linux CentOS6.5编译安装mysql5.6

    详解Lamp环境搭建Linux CentOS6.5编译安装mysql5.6

    这篇文章主要介绍了详解Lamp环境搭建Linux CentOS6.5编译安装mysql5.6,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Linux如何配置本地yum源(光盘镜像挂载)

    Linux如何配置本地yum源(光盘镜像挂载)

    这篇文章主要介绍了Linux如何配置本地yum源(光盘镜像挂载),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Linux文件操作新手指南之关于install命令的用法

    Linux文件操作新手指南之关于install命令的用法

    这篇文章主要介绍了Linux文件操作新手指南之关于install命令的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02

最新评论