expect 的简单学习与使用

expect,简单,学习,使用 · 浏览次数 : 317

小编点评

## 使用expect构建数据库实例注册脚本示例 ```expect # 启动新进程,后跟新进程要执行的指令 spawn "./startup-linux.sh" # 等待程序启动完成 expect { \"请选择需要执行的操作\" { send \"3\\";exp_continue } \"kingbase\" { send \"3\\";exp_continue } \"请输入数据库服务器地址\" { send \"10.110.139.206\\";exp_continue } // 其他字段添加... \"是否继续其他操作\" { send \"N\\" }} # 等待程序完成 expect { timeout 10 } # 验证数据库实例是否正常运行 assert -i "ping -c 1 localhost" "Reply from 127.0.0.1:1521" ``` **脚本功能:** 1. 启动应用程序实例 2. 等待程序启动完成 3. 输入数据库服务器地址 4. 输入数据库服务器端口号 5. 输入数据库服务名 6. 输入数据库账户名 7. 输入数据库密码 8. 提交注册请求 **注意:** * 这只是一个示例脚本,你需要根据实际情况进行修改。 * 确保脚本能够访问到应用程序实例和数据库服务器。 * 可以使用不同的关键词进行输入操作,例如 `send_key`, `send_string`等。 * 可以使用 `expect -i` 等选项设置等待时间等参数。

正文

背景

最近工作中总有很多重复的事项.
比较繁琐,想着能够简单一点是一点的角度
准备采用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" }
}

与expect 的简单学习与使用相似的内容:

expect 的简单学习与使用

背景 最近工作中总有很多重复的事项. 比较繁琐,想着能够简单一点是一点的角度 准备采用expect来建华部分工作量. 其实还可以使用其他方式来处理. 但是感觉expect还是能够简单明了的. 所以暂时不引入python这么重的工具 简介 Expect是一个免费的编程工具语言,用来实现自动和交互式任务

[转帖]spawn....expect简介及EOF遇到的坑

spawn....expect简介及EOF遇到的坑 为什么使用spawn expect ....expectexpect命令命令演示在shell脚本中使用expect 为什么使用spawn expect … 很多时候,指令的执行是需要交互的,比如下面这个命令大家一定很熟悉: ssh-keygen -

[转帖]Shell脚本中利用expect实现非交互式

https://developer.aliyun.com/article/885723?spm=a2c6h.24874632.expert-profile.295.7c46cfe9h5DxWK 简介: expect非交互式 expect可以在脚本中完成一些交互式的操作,例如远程登录时要输入yes或者

[转帖]⭐万字长篇超详细的图解Tomcat中间件方方面面储备知识⭐

https://developer.aliyun.com/article/885079?spm=a2c6h.24874632.expert-profile.321.7c46cfe9h5DxWK 2022-04-13 132举报 简介: LNMT 1.JAVA简介 常见的大型平台有LNMP、LNMP、

[转帖]测试环境不稳定&复杂的必然性及其对策

https://developer.aliyun.com/article/1003006?spm=a2c6h.24874632.expert-profile.132.3b0b506fysVD76 简介: 为什么测试环境的不稳定是必然的,怎么让它尽量稳定一点?为什么测试环境比生产环境更复杂,怎么让它尽

[转帖]零信任策略下K8s安全监控最佳实践(K+)

https://developer.aliyun.com/article/1009607?spm=a2c6h.24874632.expert-profile.126.3b0b506fysVD76 简介: 本文重点将围绕监控防护展开,逐层递进地介绍如何在复杂的分布式容器化环境中借助可观测性平台,持续监

[转帖]Nginx四层负载均衡详解

https://developer.aliyun.com/article/885599?spm=a2c6h.24874632.expert-profile.315.7c46cfe9h5DxWK 2022-04-14 322举报 简介: Nginx四层负载均衡就是实现通过访问某个ip的端口转发至对应的

[转帖]Linux文本处理三剑客sed详解(正则匹配、命令示例)

https://developer.aliyun.com/article/885609?spm=a2c6h.24874632.expert-profile.312.7c46cfe9h5DxWK 简介: sed读一行放到模式空间进行处理 sed是一种在线的、非交互式的编辑器,它一次处理一行内容,处理时

[转帖]Linux-文本处理三剑客grep详解

https://developer.aliyun.com/article/885611?spm=a2c6h.24874632.expert-profile.311.7c46cfe9h5DxWK 简介: grep家族 grep:在文件中全局查找指定的正则表达式,并打印所有包含该表达的行 egrep:扩

[转帖]03-rsync传输模式(本地传输、远程方式传输、守护进程模式传输)

https://developer.aliyun.com/article/885801?spm=a2c6h.24874632.expert-profile.282.7c46cfe9h5DxWK 简介: 1.Rsync传输模式 rsync大致使用三种主要的数据传输方式 本地方式 远程方式 守护进程 1