shell脚本-expect

浩客7个月前技术文章345

一、概述

      Expect是建立在tcl基础上的一个工具,Expect 是用来进行自动化控制和测试的工具。主要解决shell脚本中不可交互的问题。

      在一些需要交互输入指令的场景下, 可通过脚本设置自动进行交互通信. 其交互流程是: spawn启动指定进程 -> expect获取指定关键字 -> send想指定进程发送指定指令 -> 执行完成, 退出.

      在linux运维和开发中,我们经常需要远程登录服务器进行操作,登录的过程是一个交互的过程,可能会需要输入yes/no password等信息。为了模拟这种输入,可以使用Expect脚本,由于expect是基于tcl的, 所以需要确保系统中安装了tcl。


# 检查是否安装了tcl、expect
rpm -qa |grep tcl
rpm -qa |grep expect

# 如果没有安装, 使用yum安装tcl和expect:
yum install -y tcl
yum install -y expect

# 查看expect的安装路径:
command -v expect

image.png

二、expect常用命令

命 令

说 明

spawn

启动新的交互进程, 后面跟命令或者指定程序

expect

从进程中接收信息, 如果匹配成功, 就执行expect后的动作(判断上次输出结果里是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回。只能捕捉由spawn启动的进程的输出)

send

向进程发送字符串,用于模拟用户的输入,该命令不能自动回车换行,一般要加 \r(回车)

send exp_send

用于发送指定的字符串信息

exp_continue

在expect中多次匹配就需要用到

send_user

用来打印输出 相当于shell中的echo

interact

允许用户交互,执行完成后保持交互状态,把控制权交给控制台

exit

退出expect脚本

eof

expect执行结束, 退出

set

定义变量

puts

输出变量

timeout

设置超时时间,过期则继续执行后续指令

$argv 参数数组

Expect脚本可以接受从bash传递的参数.可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个,第三个…参数

示例:远程ssh另一台主机

#!/usr/bin/expect

set ip 192.168.xxx.xxx
set pass 123456
set timeout 10

spawn ssh root@$ip
expect {
    "yes/no" { send "yes\r";exp_continue }
    "password:" { send "$pass\r" }
}
interact
# interact 这个写在最后代表交互,如果不写执行完动作就会退出

脚本执行方式:
# ./expect.sh
# /shell/expect.sh
# expect -f expect.sh


相关文章

达梦数据库初始化

达梦数据库初始化

1、dm数据库初始化认证dm数据库默认开启了ssl,在第一次登录时,使用SYSDBA用户登录,需要通过命令指定对应的ssl文件。不然会出现ssl 初始化失败的报错./disql SYSDBA/SYSD...

C++ 编程:程序组成部分 & 函数 & 输入

C++ 编程:程序组成部分 & 函数 & 输入

程序结构首先从一个最简单的程序来看 C++ 程序结构:第一部分:#include <iostream> 专业名词叫:预处理器编译指令 其实效果就类似于导包; 第二部分:main() 程序的...

Hbase部署

安装前准备1.1. 设置环境变量所有hbase节点都要做vi /etc/profile export HBASE_HOME=/opt/hbaseexport PATH=$PATH:$HBASE_HOM...

Prometheus 监控 Nginx

Prometheus 监控 Nginx

一、Nginx_exporter安装下载链接:https://github.com/discordianfish/nginx_exporter下载nginx_exporter的docker镜像。doc...

K8S中 CNI 插件的解读

K8S中 CNI 插件的解读

一.CNI是什么首先我们介绍一下什么是 CNI,它的全称是 Container Network Interface,即容器网络的 API 接口。它是 K8s 中标准的一个调用网络实现的接口。Kubel...

开源大数据集群部署(五)Freeipa客户端部署及配置(kerberos+ldap)

开源大数据集群部署(五)Freeipa客户端部署及配置(kerberos+ldap)

1、安装IPA-Client安装(每个节点均需安装)yum install ipa-client -y2、执行安装命令ipa-client-install3、执行完成后进入交互阶段4、安装完成后查看页...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。