Linux学习之expect操作详解

news2024/10/7 15:18:30

一、expect安装介绍

1.expect命令安装

安装语句:yum install expect

2.expect命令含义

expect是一种脚本语言,它能够代替人工实现与终端的交互,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。

3.expect使用场景

(1)并根据预定标准回答其问题,回答“是”、“否”或将控制权交还给您

(2)远程连接设备并执行自动化操作

(3)主要是一些需要人机交互的地方,如果提前知道应该输入什么指令都可以使用expect 工具

二、expect使用原理

1.原理介绍:

spawn启动指定进程—expect获取指定关键字—send向指定程序发送指定字符—执行完成退出

2、spawn命令介绍:

spawm命令就是用来启动新的进程的。spawn后的send和expect命令都是和spawn打开的进程进行交互的、

3、send命令介绍:

send命令接收一个字符串参数,并将该参数发送到进程,这个过程类似模拟人类输入密码

4、interact命令介绍:

结合spawn、expect、send自动化的完成很多任务,interact命令可以在适当的时候进行任务的干预,比如下载完ftp文件时,仍然可以停留在ftp命令行状态,以便手动的执行后续命令

三、expect使用语法

1. expect 启用选项:

  • -c 执行脚本前先执行的命令,可多次使用
  • -d debug模式,可以在运行时输出一些诊断信息,与在脚本开始处使用exp_internal 1相似。
  • -D 启用交换调式器,可设一整数参数。
  • -f 从文件读取命令,仅用于使用#!时。如果文件名为"-",则从stdin读取(使用"./-"从文件名为-的文件读取)。
  • -i 交互式输入命令,使用"exit"或"EOF"退出输入状态
  • -- 标示选项结束(如果你需要传递与expect选项相似的参数给脚本时),可放到#!行:#!/usr/bin/expect --
  • -v 显示expect版本信息

2.expect命令参数:

  • spawn 交互程序开始,执行后面的命令或程序。需要进入到expect环境才可以执行,不能直接在shell环境下直接执行
  • set timeout n 设置超时时间,表示该脚本代码需在n秒钟内完成,如果超过,则退出。用来防止ssh远程主机网络不可达时卡住及在远程主机执行命令宕住。如果设置为-1表示不会超时
  • set 定义变量
  • $argv expect脚本可以接受bash的外部传参,可以使用[ lindex $argv n ]n为0表示第一个传参,为1表示第二个传参,以此类推
  • expect 从交互程序进程中指定接收信息, 如果匹配成功, 就执行send的指令交互;否则等待timeout秒后自动退出expect语句
  • send 如果匹配到expect接受到的信息,就将send中的指令交互传递,执行交互动作。结尾处加上\r表示如果出现异常等待的状态可以进行核查
  • exp_continue 表示循环式匹配,通常匹配之后都会退出语句,但如果有exp_continue则可以不断循环匹配,输入多条命令,简化写法。
  • exit 退出expect脚本
  • expect eof spawn进程结束后会向expect发送eof,接收到eof代表该进程结束
  • interact 执行完代码后保持交互状态,将控制权交给用户。没有该命令执行完后自动退出而不是留在远程终端上
  • puts 输出变量

四、expect使用举例

1.expect脚本实现ssh自动登录远程服务器

1

2

3

4

5

6

7

#!/usr/bin/expect

spawn ssh mrswhite@192.168.37.9

expect "*password:"

send "test20221007\r"

expect "*#"

interact

expect expect_demo1.sh 执行查看运行结果:

2.expect脚本实现ssh自动登录远程服务器(通用脚本,手动输入参数)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#!/usr/bin/expect

if {$argc < 3} {

    puts "Usage:cmd <host> <username> <password>"

    exit 1

}

set timeout -1

set host [ lindex $argv 0 ]

set username [ lindex $argv 1 ]

set password [ lindex $argv 2 ]

spawn ssh  $username@$host

expect "*password*" {send "$password\r"}

interact

./expect_demo2.sh 192.168.37.9 mrswhite  test20221007  执行查看运行结果:

3.在shell 中嵌套expect

通过expect嵌套shell使用语句在shell内直接执行,任何这样可以实现更多的功能

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#!/bin/bash

user="mrswhite"

host="192.168.37.9"

password="test20221007"

/usr/bin/expect << EOF

set time 20

spawn ssh $user@$host

expect {

"*yes/no" { send "yes\r"; exp_continue }

"*password:" { send "$password\r" }

}

expect "*#"

send "pwd\r"

expect "*#"

send "df -h\r"

expect "*#"

send "exit\r"

interact

expect eof

EOF

五、expect相关错误处理

1.invalid command name "/usr/bin/expect"

解决方案:此时是使用bash脚本嵌套了expect代码,所以执行采用以下两种方式都可以

1

2

./expect_demo3.sh

sh expect_demo3.sh

2.invalid command name ":" 转义问题

 解决方案:send里面的内容中的括号[]有问题,不能使用[],将其去除或者添加转义字符

1

2

send "cat 20221007.txt | awk -F : '{print $2}'"

send "cat 20221007.txt | awk -F \[:\] '{print $2}'\r"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/25196.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

疟原虫蛋白复合物疫苗科研

疟疾是一种蚊媒疾病&#xff0c;感染者通常会出现发烧、发冷和流感样疾病。如果不及时治疗&#xff0c;严重者甚至会危及生命。世卫组织新近发布的数据表明&#xff0c;2019 年全球估计发生 2.29 亿疟疾病例&#xff0c;死于该病的人数超过 40 万例。 图 1. 2000 年有病例的国…

Flutter 应用程序中的 Quick Actions

Flutter 应用程序中的 Quick Actions 原文 https://medium.com/vijay-r/quick-actions-in-flutter-app-75b63acc420b 前言 在这篇文章中&#xff0c;我们将讨论如何添加 Quick Actions 在我们的 Flutter 应用程序&#xff0c;使我们的应用程序更加友好的用户。 正文 插件 quick…

LVM逻辑卷

要求&#xff1a;在系统下做LVM逻辑卷2G&#xff0c;并将LVM进行扩容到5G 操作环境&#xff1a;7.8.2003 [rootlocalhost ~]# lsblk #列出所有可用块设备信息 我们使用vdb和vdc两块硬盘做lvm 先将一个盘进行分区&#xff08;/dev/vdb&#xff09; [r…

Leetcode808. 分汤

文章目录题目链接题目大意解题思路代码(C)动态规划记忆化搜索题目链接 点我(^_^) 题目大意 注意不是两个概率加和除以2 解题思路 考虑动态规划&#xff0c;因为汤的分配都是以 25 的倍数进行分配的&#xff0c;所以这里把 25 ml 的汤看作一份&#xff0c;总的份数⌈汤的体…

A-Level经济例题解析及练习Analysis of Tax

今日知识点&#xff1a;Analysis of Tax 例题A. Compute consumer surplus, producer surplus, and total surplus without a tax. B. If $100 tax per ticket, compute consumer surplus, producer surplus, tax revenue, total surplus, and deadweight loss.解析下面我们为大…

搭载北京君正X2000主控芯片的成功案例

汉王e典笔S20 Plus搭载北京君正研发的X2000多核异构跨界处理器。X2000多核异构跨界处理器主要面向于智能音频、图像识别、智能家电、智能家居、智能办公等五大领域。CPU采取三核结构&#xff0c;搭载双XBurst2&#xff0c;主频1.2GHz&#xff0c;跨界第三核XBurst0(240MHz)&…

Linux--进程概念

前言&#xff1a; 在学习操作系统的过程中&#xff0c;我们常常能听到进程这一概念以及相关的一些知识。例如什么是父进程&#xff0c;什么是子进程&#xff0c;如何创建子进程&#xff0c;如何杀死进程等。这些知识后面会一一介绍&#xff0c;在迈入学习进程的第一步我只需要知…

[附源码]java毕业设计校园二手交易平台的设计

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

养殖废水总氮超标的解决方法

养殖废水除总氮。入水是100mg/L&#xff0c;处理水量大概在3T/H&#xff0c;要求养殖废水总氮小于5PPM。 生化前置过滤树脂的工艺&#xff0c;通过阳树脂中含有的阳离子会与水中的游离氨&#xff08;NH3&#xff09;和铵离子&#xff08;NH4&#xff09;进行交换&#xff0c;将…

2.15 这样的小红书图片内容,最容易“踩雷”!【玩赚小红书】

1、笔记中所有图片只展示一件单品 这类内容有可能会被系统判定为广告&#xff0c;或被用户怀疑为软广而举报。据介绍&#xff0c;小红书平台上的用户对软广的接受度较低&#xff0c;这类内容时常因为被举报而限流。 小红书引入“生态官”维护社区内容后&#xff0c;生态官也会…

三层vlan实验

目录 实验拓扑 实验需求 实验解法 5&#xff0c;按照图示配置 IP 地址&#xff0c;其中只有SW1需要配置三层vlan地址&#xff0c;电脑设备为DHCP获取地址 6&#xff0c;在sw1配置DHCP动态地址池塘&#xff0c;DNS为114.114.114.114 7&#xff0c;各台电脑通过交换机划分不…

你的系统如何支撑高并发?大佬手写高并发架构设计笔记帮你圆满回答!

开篇&#xff0c;我们聊聊大量同学问我的一个问题&#xff0c;面试的时候被问到一个让人特别手足无措的问题&#xff1a;你的系统如何支撑高并发&#xff1f; 大多数同学被问到这个问题压根儿没什么思路去回答&#xff0c;不知道从什么地方说起&#xff0c;其实本质就是没经历…

m虚拟MIMO系统的配对调度算法的matlab仿真,对比Random配对,Orthogonal配对以及Deteminant配对

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 利用多输入多输出&#xff08;MIMO&#xff0c;Multiple InputMultiple Output&#xff09;技术通过空间复用能够显著的提高通信系统的容量&#xff0c;并可以很好的缓解时/频资源日益紧…

BCN衍生物:endo-BCN-PEG4-TAMRA/Palmitic/DSPE

凯新生物公司小编分享&#xff1a;endo-BCN-PEG4-TAMRA &#xff0c;endo-BCN-PEG4-Palmitic&#xff0c;endo-BCN-PEG4-DSPE这几种的物理相关数据。 1、endo-BCN-PEG4-TAMRA 四甲基罗丹明&#xff08;TAMRA&#xff09;-叠氮化物是一种化学探针&#xff0c;用于直接在活细胞中…

食品连锁企业怎样结合快解析打造智能安全管理系统

食品质量安全是食品类企业的生命线&#xff0c;对产品质量的安全管控必须十分严苛。A企业是全国知名的一家大型食品连锁企业&#xff0c;为了做好质量监控&#xff0c;A企业研发了一套智能安全管理预警系统&#xff0c;可以从多维度对生产一线的违规事件进行预警记录&#xff0…

MCE | 细胞实验——多溶剂集合

■ 不到不得已&#xff0c;谁也不想现用现配细胞实验的工作浓度通常在 μM 级别&#xff0c;有的还是 nM 和 pM&#xff0c;要做到现用现配&#xff0c;难度系数有点高&#xff0c;好比让一个日均不到 1000 步的人去爬 5000 米的山峰&#xff0c;这难度&#xff0c;你细品&…

Bot代码的执行(微服务)

负责接收一段代码&#xff0c;把代码扔到我们的队列当中、每一次我们去运行一段代码 运行结束之后、把我们的结果返回给我们的服务器 先把依赖复制过来、我们需要动态的把用户传过来的Java代码编译然后执行 需要加入依赖joor-java-8、用Java的代码的写法举例子 未来自己实现的时…

阿里云无影研发负责人任晋奎:端云技术创新,打造全新用户体验

11 月 4 日&#xff0c;阿里云无影研发负责人任晋奎在 2022 云栖大会“无影技术创新与应用实践”论坛上&#xff0c;发表了题为《端云技术创新&#xff0c;打造全新用户体验》的演讲&#xff0c;对无影端云开放架构的技术能力做了深入浅出的分享&#xff0c;解读了无影如何以技…

实现制作动漫版的你---动漫风格迁移网络AnimeGANv2

AI依然火 最近居家太无聊了&#xff0c;无意见逛到了AI社区&#xff0c;发现最近AI算法热度还是很高&#xff0c;什么AI绘画&#xff0c;还有什么AI作诗&#xff0c;写歌。可以说&#xff0c;人工智能领域在一步步挑战人类的高度&#xff0c;从循规蹈矩的简单工作&#xff0c;…

【笔试强训】Day1

&#x1f308;欢迎来到笔试强训专栏 (꒪ꇴ꒪(꒪ꇴ꒪ )&#x1f423;,我是Scort目前状态&#xff1a;大三非科班啃C中&#x1f30d;博客主页&#xff1a;张小姐的猫~江湖背景快上车&#x1f698;&#xff0c;握好方向盘跟我有一起打天下嘞&#xff01;送给自己的一句鸡汤&#x…