Linux Expect 简介和使用实例
expect简介和使用实例
1 expect 简介 expect 是用来进行自动化控制和测试的工具。 主要是和交互式软件telnet ftp passwd fsck rlogin ssh tip 等进行自动化的交互。 对于大规模的linux 运维很有帮助。expect sourceforge2 expect 基本使用
在linux运维和开发中,我们经常需要远程登录服务器进行操作,登录的过程是一个交互的过程,可能会需要输入yes/no password等信息。为了模拟这种输入,可以使用expect脚本。
expect是由tcl语言演变而来的,所以expect脚本的运行需要tcl的支持。安装tcl和expect的步骤请自行google。2.1 expect 关键命令
send:向进程发送字符串,用于模拟用户的输入。注意一定要加\r回车
expect:从进程接收字符串
spawn:启动进程(由spawn启动的进程的输出可以被expect所捕获)
interact:用户交互
其中expect是关键的部分,expect英文有期待的意思,采用了tcl的模式-动作语法,此语法有以下几种模式:
单一分支语法:expect "hello" {send "you said hello"}
当输出中包含hello后,输出you said hello
多分支模式语法:expect { "lilei" {send "hello lilei"; exp_continue} "hanmeimei" {send "hello hanmeimei"; exp_continue} "how do you do ?" {send "how do you do ?"} }
当输出中包含lilei时 输出hello lilei,同时循环此多分支语句
当输出中包含hanmeimei时 输出hello hanmeimei,同时循环此多分支语句
当输出中包含how do you do ?时 输出dow do you do3 使用实例
3.1 远程登录服务器并创建文件夹
#!/usr/bin/expect set timeout -1 spawn ssh root@192.168.0.107 expect { "password" {send "123456\r";} "yes/no" {send "yes\r";exp_continue} } expect "root" {send "mkdir testExpect\r"} expect eof exit
3.2 expect脚本获取参数
expect.ex
#!/usr/bin/expect set ip [lindex $argv 0] set password [lindex $argv 1] set timeout -1 spawn ssh root@$ip expect { "password" {send "$password\r";} "yes/no" {send "yes\r";exp_continue} } expect "root" {send "mkdir test1\r"} expect "root" {send "mkdir test2\r"} send "exit\r" //退出远程登录 expect eof exit
./expect.ex 192.168.0.107 123456
3.3 远程登录服务器等待手动操作
expect.ex
#!/usr/bin/expect set ip [lindex $argv 0] set password [lindex $argv 1] set timeout -1 spawn ssh root@$ip expect { "password" {send "$password\r";} "yes/no" {send "yes\r";exp_continue} } interact
./expect.ex 192.168.0.107 123456
3.4 使用scp传输文件
#!/usr/bin/expect set timeout -1 spawn scp test.txt root@192.168.0.107:/home/ expect { "password" {send "123456\r";} "yes/no" {send "yes\r";exp_continue} } expect eof exit
3.5 在本地开启socks5的代理
1 #!/usr/bin/expect 2 set timeout -1 //expect匹配输出的超时时间 3 spawn ssh -N -D 0.0.0.0:1080 localhost //新建一个进程,执行ssh命令 4 expect { 5 "yes/no" {send "yes\r";exp_continue} // 6 "password" {send "123\r"} 7 } 8 expect eof 9 exit
4-5行是根据进程输出执行预先设置好的命令:
假如输出包含yes/no,则表示是第一次登入,需要输入yes来添加信任。exp_continue表示继续此循环。
假如输出包含password,表示需要输入密码。
8行的expect eof是在等待结束标志。由spawn启动的命令在结束时会产生一个eof标记,expect eof即在等待这个标记,因为ssh -N -D 0.0.0.107:1080 localhost 程序需要一直运行,所以将timeout 设置为-1即可无限制的等待。作者:lvlvforever
链接:https://www.jianshu.com/p/70556b1ce932
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Linux Expect 简介和使用实例的更多相关文章
- expect简介和使用例子
expect简介和使用例子 expect简介 expect是一款自动化的脚本解释型的工具. expect基于tcl脚本,expect脚本的运行需要tcl的支持. expect对一些需要交互输入的命 ...
- expect学习笔记及实例详解【转】
1. expect是基于tcl演变而来的,所以很多语法和tcl类似,基本的语法如下所示:1.1 首行加上/usr/bin/expect1.2 spawn: 后面加上需要执行的shell命令,比如说sp ...
- 每次进步一点点——linux expect 使用
1. 介绍 expect是建立在tcl(参见:Tcl/Tk快速入门 )基础上的一个工具,它可以让一些需要交互的任务自动化地完成.相当于模拟了用户和命令行的交互操作. 一个具体的场景:远程登陆服务器,并 ...
- Linux平台oracle 11g单实例 + ASM存储 安装部署 快速参考
操作环境:Citrix虚拟化环境中申请一个Linux6.4主机(模板)目标:创建单机11g + ASM存储 数据库 1. 主机准备 2. 创建ORACLE 用户和组成员 3. 创建以下目录并赋予对应权 ...
- APP接口自动化测试JAVA+TestNG(二)之TestNG简介与基础实例
前言 继上篇环境篇后,本篇主要对TestNG进行介绍,给出最最基础的两个实例,通过本文后,学会并掌握TestNG测试用例的编写与运行,以及生成美化后的报告.下一篇为HTTP接口实战(国家气象局接口自动 ...
- linux 文件系统简介
linux文件系统简介 文件系统是linux的一个十分基础的知识,同时也是学习linux的必备知识. 本文将站在一个较高的视图来了解linux的文件系统,主要包括了linux磁盘分区和目录.挂载基 ...
- linux块设备驱动之实例
1.注册:向内核注册个块设备驱动,其实就是用主设备号告诉内核这个代表块设备驱动 sbull_major = register_blkdev(sbull_major, "sbull&quo ...
- linux邮件服务器postfix配置实例
linux邮件服务器postfix配置实例(超级详细!!!) 2013-03-13 13:30:21 标签:邮件服务器 linux 1. 系统安装:1)centos4.3 选上MAIL组件里的全部.2 ...
- Linux 内核简介
Linux内核简介 一.系统架构 (1). Linux系统架构 ##用户空间: 文件系统 C库 ##内核空间: 接口 内核 (2). Linux内核架构 二.Linux内核源代码 下载地址 www.k ...
随机推荐
- IIS 7.5 配置 php 5.4.22 链接 sql 2008(用PDO链接数据库)
最近在接触PHP这块,关于在wndows系统下的php配置,虽然网上已经很多文章,但有时候有些配置找起也麻烦,所以分享给大家. 一.php 5.4.22 下载地址 http://windows.php ...
- redis高可用 - redis集群
redis-sentinel方案提供了单点的高可用解决方案,但是当数据量和业务量极速增长时,单点的reids不可能无限的纵向扩容(增大内存),这个时候就需要redis有集群的能力来扛. redis集群 ...
- Kolakoski数列
2018-04-16 15:40:16 Kolakoski序列是一个仅由1和2组成的无限数列,是一种通过“自描述”来定义的数列.他在整数数列大全网站上排名第二位,足见该数列在组合数学界中的重要性. K ...
- 深入理解javascript之typeof和instanceof
1.https://blog.csdn.net/mevicky/article/details/50353881 (深入理解javascript之typeof和instanceof)
- 操作ACCESS数据库,报INSERT INTO 语句的语法错误
错误类型:Microsoft JET Database Engine (0x80040E14)INSERT INTO 语句的语法错误. 有时候非常郁闷,明明看起来自己的语句没错,为什么还是报错呢?其实 ...
- python3连接MySQL数据库实例
#python3连接MySQL实例 import pymysql """导入连接MySQL需要的包,没有安装pymysql需要先安装 使用命令行切换到python的安装路 ...
- 改造 Ace Admin 模板的 ace_tree 组件的 folderSelect 样式
*注:我用的Ace Admin版本为1.3.4 Ace Admin 是一个轻量,功能丰富,HTML5.响应式.支持手机及平板电脑上浏览的优秀管理后台模板. 关于tree的使用,html文件夹下tree ...
- MapReduce中文翻译
MapReduce:超大机群上的简单数据处理 摘要 MapReduce是一个编程模型,和处理,产生大数据集的相关实现.用户指定一个map函数处理一个key/value对,从而产生中间的key/va ...
- 学习笔记20151211——AXI4 STREAM DATA FIFO
AXI4 STREAM DATA FIFO是输入输出接口均为AXIS接口的数据缓存器,和其他fifo一样是先进先出形式.可以在跨时钟域的应用中用于数据缓冲,避免亚稳态出现.支持数据的分割和数据拼接.在 ...
- 201621123010 《Java程序设计》第2周学习总结
1.本周学习总结 Java有基本数据类型(类似c)和引用数据类型(不同于c)两种数据类型. Java是面向对象的语言,引用类型变量存放指向对象的引用,而不是该对象本身.因此判断两对象值是否相等时,需使 ...