为什么需要expect?
    我们通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如 telnet服务器等进行交互的功能或者在登录root用户时需要用户交互输入密码。而Expect就使用来实现自动交互的工具。

Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。Expect的作者Don Libes在1990年开始编写Expect时对Expect做有如下定义:Expect是一个用来实现自动交互功能的软件套件(Expect [is a] software suite for automating interactive tools)。使用它系统管理员的可以创建脚本用来实现对命令或程序提供输入,而这些命令和程序是期望从终端(terminal)得到输入,一般来说这些 输入都需要手工输入进行的。 Expect则可以根据程序的提示模拟标准输入提供给程序需要的输入来实现交互程序执行。甚至可以实现实现简单的BBS聊天机器人。 :)

expect的安装:

sudo apt-get install expect

expect的简单用法:
 下面是一个能用来实现自动执行该命令的Expect脚本:

     #!/usr/bin/expect# Change a login shell to tcshset user [lindex $argv 0]spawn chsh $userexpect "]:"send "/bin/tcsh " expect eofexit

这个简单的脚本可以解释很多Expect程序的特性。和其他脚本一样首行指定用来执行该脚本的命令程序,这里是/usr/bin/expect。程序第一行用来获得脚本的执行参数(其保存在数组$argv中,从0号开始是参数),并将其保存到变量user中。

第二个参数使用Expect的spawn命令来启动脚本和命令的会话,这里启动的是chsh命令,实际上命令是以衍生子进程的方式来运行的。

随后的expect和send命令用来实现交互过程。脚本首先等待输出中出现]:字符串,一旦在输出中出现chsh输出到的特征字符串(一般特征字符串往 往是等待输入的最后的提示符的特征信息)。对于其他不匹配的信息则会完全忽略。当脚本得到特征字符串时,expect将发送/bin/tcsh和一个回车 符给chsh命令。最后脚本等待命令退出(chsh结束),一旦接收到标识子进程已经结束的eof字符,expect脚本也就退出结束。

如果你想实现一个远程的cp,那么你可以这样写

test.sh

#/bin/bash
set timeout 160
spawn scp uaername@XXX.XXX.XXX.XXX:/pathnaem/filename . expect "password:"  send "wangyp\r"
expect eof

然后这里就不能用sh test.sh而是要用expect test.sh

转载于:https://blog.51cto.com/9409270/1970101

shell expect的简单用法相关推荐

  1. shell expect的简单实用

    一.在shell脚本中嵌入expect来实现密码输入 expect是一个自动交互功能的工具.expect是开了一个子进程,通过spawn来执行shell脚本,监测到脚本的返回结果,通过expect判断 ...

  2. shell basename的简单用法

    basename:去掉文件名的路径和后缀 habsename path suffix -->如果指定了suffix ,basename就会吧路径和suffix都去掉 habsename path ...

  3. 转:expect的基本用法 - Shell - ChinaUnix.net -

    转:expect的基本用法 - Shell - ChinaUnix.net - 转:expect的基本用法 - Shell - ChinaUnix.net - 一.概述 我们通过Shell可以实现简单 ...

  4. python中expect_(转)Expect的基本用法

    Expect的基本用法 一.概述我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器等进行交 ...

  5. Shellz中awk的简单用法

    其实shell脚本的功能常常被低估.在实际应用中awk sed 等用法可以为shell提供更为强大的功能.下面我们将一下awk调用的简单方法进行了总结.方便同学们学习: awk的简单用法: 第一种调用 ...

  6. (P9)awk:什么是awk,awk简单用法,awk脚本语法,awk执行过程

    文章目录 1.什么是awk 2.awk简单用法 3.awk脚本语法 4.awk执行过程 1.什么是awk awk 是什么 awk 是一种用于处理数据和生成报告的编程语言 awk 可以在命令行中进行一些 ...

  7. expect的基本用法

    http://bbs.chinaunix.net/viewthread.php?tid=594417 一.概述 Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预. ...

  8. git基本概念以及简单用法

    git基本概念以及简单用法 最近优达把<如何使用Git和GitHub>这门课设置为免费课程,借此机会我也去学习了一波,以便能加入全球最大的同性交友网站.以下内容,均为听课笔记.总共分为三部 ...

  9. 视频格式 ffmpeg简单用法

    最新版的91Flv云视频系统采用了最先进的m3u8列表播放方式,我们的软件从最开始输出flv到mp4再到xml列表到现在的m3u8列表,到底经历了怎样的曲折历程让我们选择了这种播放格式? 首先我们来分 ...

最新文章

  1. 一个基于特征向量的近似网页去重算法——term用SVM人工提取训练,基于term的特征向量,倒排索引查询相似文档,同时利用cos计算相似度...
  2. SharePoint 2013 入门教程之创建页面布局及页面
  3. java 读取 excel poi_java poi怎么获取excel单元格的内容?
  4. git gui怎么拉取项目代码_Git可视化极简易教程 —— Git GUI使用方法
  5. 结合现有分布式系统的数据一致性思考
  6. JavaFX官方教程(十一)之动画基础
  7. Android下Opengl ES实现单屏幕双眼显示
  8. 【Linux学习】常用指令-sortunique
  9. C++异常处理类与自定义异常处理类
  10. integer比较_Java中的整型包装类值的比较为什么不能用==比较?原因是因为缓存
  11. mysql高效获取两张表共同字段的交集数据
  12. 【bzoj1742】[Usaco2005 nov]Grazing on the Run 边跑边吃草 区间dp
  13. 担心在机场丢行李?这个日本AI能帮你到处找包
  14. 【BZOJ 3652】大新闻 数位dp+期望概率dp
  15. NOIP 2017 PJ
  16. 离散傅里叶变换(DFT)
  17. Windows系统注册表
  18. Spark的下一代引擎-Project Tungsten启示录
  19. C语言 打地鼠游戏 超级详解,各个函数与算法,设计思路与流程
  20. 古墓丽影10linux,《古墓丽影11:暗影》Linux平台与Windows平台流畅度对比

热门文章

  1. 美国邮政署将展开测试自驾卡车运输服务
  2. 第三节:Windows平台部署Asp.Net Core应用(基于IIS和Windows服务两种模式)
  3. 智能合约不够安全?微软建专项小组从编程语言入手根治
  4. Sharepoint之升级篇
  5. 协同过滤算法 R/mapreduce/spark mllib多语言实现
  6. Oracle 11g必须开启的服务及服务详细介绍
  7. HDU-4403 A very hard Aoshu problem 枚举
  8. 【linux+C】神器 vim + 指针相关客串
  9. PostgreSQL — Overview
  10. NanoPi NEO Air使用三:OverlayFS、CPU温度和频率、wifi、蓝牙、npi-config