首页 > 其他分享 >expect 的简单学习与使用

expect 的简单学习与使用

时间:2022-11-26 00:22:53浏览次数:38  
标签:send 学习 continue expect exp 简单 输入 Expect

背景

最近工作中总有很多重复的事项.
比较繁琐,想着能够简单一点是一点的角度
准备采用expect来建华部分工作量.
其实还可以使用其他方式来处理.
但是感觉expect还是能够简单明了的.
所以暂时不引入python这么重的工具

简介

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

下载与安装

CentOS,OpenEuler,Anolis
都可以使用
yum install expect -y 的方式进行安装.
如果是不联网的机器
可以使用 yum install yum* -y
然后yumdownloader expect  的方式下载rpm包便于安装.
我这边下载好的介质主要有:
expect-5.45-14.el7_1.x86_64.rpm
expect-5.45.4-3.ky10.aarch64.rpm
expect-5.45.4-6.oe2203.x86_64.rpm

expect 的命令写法

expect有四个核心的指令:
spawn:     启动新进程,后跟新进程要执行的指令;
expect:   指定要监听的字符串,如果spawn进程返回了匹配的字符串
          (如标准输入的提示信息),则触发send;
send:     发送指定的字符串到spawn进程,代替标准输入;
interact: 用户参与交互;

注意还有一个 exp_continue 的命令,用于继续等待一下次的输入.
学习来源:https://www.jianshu.com/p/e70cb5979678

一个样例

  • 场景是我要进行一个数据库实例的注册:
  • 注意我增加了一个sleep 4 避免启动满是无法处理.
  • 注意不同的数据库的选项不一样, 需要严格进行处理.
  • 注意输入项目可以使用 \n或者是\r表示回车.前面不能有空格.
#!/usr/bin/expect
spawn ./startup-linux.sh
sleep 4
expect {
  "请选择需要执行的操作" { send "3\n";exp_continue }

  "kingbase" { send "3\n";exp_continue }
  "请输入数据库服务器地址" { send "10.110.139.206\n";exp_continue }
  "请输入数据库服务器端口号" { send "1521\n";exp_continue }
  "请输入数据库服务名" { send "ora19cpdb\n";exp_continue }
  "请输入数据库账户名" { send "cloud2211\n";exp_continue }
  "请输入数据库密码:" { send "Testxxxx?!\n";exp_continue }
  "是否继续其他操作" { send "N\n" }
}

标签:send,学习,continue,expect,exp,简单,输入,Expect
From: https://www.cnblogs.com/jinanxiaolaohu/p/16926740.html

相关文章

  • 2022-2023-1 20221318 《计算机基础和程序设计》第十三周学习总结
    作业信息这个作业属于那个班级https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求https://www.cnblogs.com/rocedu/p/9577842.html#WEEK13作业目标学习......
  • 基于Sklearn机器学习代码实战
    LinearRegression线性回归入门数据生成为了直观地看到算法的思路,我们先生成一些二维数据来直观展现importnumpyasnpimportmatplotlib.pyplotaspltdeftrue_f......
  • 杂记03:深度学习的缺点和未来
    【转载-摘录-侵删】【小宇科技说】【撞墙了吗?深度学习未来十年的发展方向】https://www.bilibili.com/video/BV1Me4y1v78B一、深度学习的缺点1.1泛化性深度学习目前的......
  • TypeScript学习笔记-03 TS基础语法
    即使有错还是可以编译为JS文件。ts方法指定参数的类型,指定返回值的类型:这样都会对返回值的类型和参数都会进行校验!......
  • 协程学习
    协程学习很早之前,其实也就半年前吧,我当时用golang写了mit6.824这门课程,众所周知,golang里面协程算是这门语言核心的特点。我一直很想搞清楚协程到底是啥,但是有点畏难情绪,趁......
  • C语言实现最简单的2048存档读档功能(获取当前路径和文件IO)
    简介最近大一的学弟开始布置C语言的大作业了,于是在此提供一种比较简单的2048存档读档功能的实现1获取当前目录及存档文件记得自己大一的时候在这里研究了很久,在这里提......
  • 简单组合逻辑电路
    verilog中的数字表示在VerilogHDL中一个信号可能有如下四种基本的值:i.0:逻辑0或假ii.1:逻辑1或真iii.x:未知iv.z:高阻态(三态)在门电路的输入端或是表达式中的z值通常会......
  • C语言学习笔记---volatile关键字
    一段代码想要最终被计算机执行,首先需要被翻译成机器可识别和执行的指令,代码编译的过程往往包含几个步骤:代码->词法语法分析->语义分析->中间代码生成->目标代码生......
  • 学习python-Day93
    bs4搜索文档树rombs4importBeautifulSouphtml_doc="""<html><head><title>TheDormouse'sstory</title></head><body><pid="myp"class="title">asdfasdf<b......
  • 爬虫学习-03
    一、bs4搜索文档树第一个参数html_doc是要解析的内容  第二个参数lxml是解析器(解析速度快一些)搜索文档树:find找一个 find_all找所有 ......