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 exit3.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 1234563.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 1234563.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 exit3.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 exit4-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 ...
随机推荐
- 学习maven,看思维导图就够了
一直在用 Mindjet MindManager和xmind 做思维导图.以前在用思维导图写读书笔记时,总是想要事无巨细地写清楚每个知识点,现在想来是事倍功半.思维导图应该是一个帮助我们梳理知识点.理 ...
- spring Security简介
它是spring的权限管理框架
- 利用JavaScript将页面截图生成图片传给后台的插件:html2canvas
利用JavaScript将页面截图生成图片传给后台的插件:html2canvas 一.总结 一句话总结: 10 <script type="text/javascript"& ...
- Java中HashMap 初始化时容量(参数)如何设置合适?
问题引入 注:本文代码源自java 9. 阿里的插件对于初始化HashMap时,调用无参构造方法,提示如下: 那么问题来了,如果已知需要向 map 中 put n次,那么需要设定初始容量为多少? 单纯 ...
- HTMLElement.hidden; CSS Attr Selectors的用处; DOM的className方法; ::before和::after伪元素
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/hidden https://codepen.io/pen/ <elem ...
- bzoj2733: [HNOI2012]永无乡 线段树合并
永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达另一个岛. ...
- UVA-1152 4 Values whose Sum is 0 (二分)
题目大意:在4个都有n个元素的集合中,每个集合选出一个元素,使得4个数和为0.问有几种方案. 题目分析:二分.任选两组求和,剩下两组求和,枚举第一组中每一个和sum,在第二组和中查找-sum的个数,累 ...
- 【转】HTTP协议—— 简单认识TCP/IP协议
转自:www.cnblogs.com/roverliang/p/5176456.html 大学没读计算机专业,所以很多的专业知识都不知道.既然已经从事了IT这个行业,就势必要去了解下网络底层,虽然实际 ...
- T4 模板代码生成
<# //********************************************************* // // Copyright (c) Microsoft. All ...
- python中多进程
多进程 什么是进程 进程:正在进行的一个过程或者说一个任务,而负责执行任务的是CPU. 进程和程序的区别 程序仅仅是一堆代码而已,而进程指的是程序的运行过程. 举例 想象以为有着一手好厨艺的科学家肖亚 ...