当前位置: 首页 > news >正文

DAY 37 shell免交互

Here Document 概述

常用的交互程序:read,ftp,passwd,su,sudo

cat也可配合免交互的方式重定向输出到文件

Here Document 的作用

  • 使用I/O重定向的方式将命令列表提供给交互式程序
  • 标准输入的一种替代品

格式

命令 <<标记输入内容标记

Here Document使用注意事项

  • 标记可以使用任意合法字符
  • 结尾的标记一定要顶格写,前面不能有任何字符
  • 结尾的标记后面也不能有任何字符(包括空格)
  • 开头标记前后的空格会被省略掉

Here Document操作

read命令  只能打印第一行内容

 统计行数

 免交互修改密码

 查看内容

 tee: 实现标准输入与输出

 Here Document变量设定

Here Document 也支持使用变量,如果标记之间有变量被使用,会先替换变量值。如果想要将一些内容写入文件,除了常规的方法外,也可以使用 Here Document。如果写入的内容中包含变量,在写入文件时要先将变量替换成实际值,在结合 cat 命令完成写入


涉及到换行时,输出变量要加双引号

如果涉及到换行,输出变量时要加双引号,不然会显示在同一行

 输入的内容不进行变量的替换

如果希望输入的内容不进行变量的替换,将开始标记加上单引号

 多行注释使用冒号为开头的Here Document,是多行注释。输入的内容不会被执行。(一般直接使用#进行注释)

 Expect

Expect是建立在 tcl 语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互相关的问题

需要安装两个软件包:expect,tcl

建立在 tcl 语言基础上的一个工具,常被用于进行自动化控制和测试,解决 shell 脚本中交互相关的问题

Expect基本命令

1.脚本解释器

  • expect 脚本中首先引入文件,表明使用的是哪一个 shell
  • #!/usr/bin/expect

2. spawn 启动进程并捕捉交互信息

  • spawn 后面通常跟一个 Linux 执行命令,表示开启一个会话、启动进程,并跟踪后续交互信息。
  • 例如:spawn passwd root

3. expect 从进程接收字符串

  • 判断上次输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回;
  • 只能捕捉由 spawn 启动的进程的输出;
  • 用于接收命令执行后的输出,然后和期望的字符串匹配。

4. send 用于向进程发送字符串

  • 向进程发送字符串,用于模拟用户的输入;

  • 该命令不能自动回车换行,一般要加\r (回车)或者\n

 方式一:  expect "密码" {send "abc123\r"}  #同一行 send 部分要有{} 方式二:  expect "密码"  send "abc123\r"     #换行send部分不需要有{} 方式三: expect支持多个分支 expect               #只要匹配了其中一个情况,执行相应的send语句后退出该 expect 语句 {  "密码1" {send "abc123\r"}  "密码2" {send "123456\r"}  "密码3" {send "123123\r"}}

5. 结束符(expect eof 和 interact只能二选一)

expect eof

  • 表示交互结束,等待执行结束,退回到原用户,与spawn对应。
  • 比如切换到root用户,expect脚本默认的是等待10s当执行完命令后,默认停留10s后,自动切回了原用户

interact

  • 执行完后保持交互状态,把控制权交给控制台会停留在目标终端而不会退回到原终端,这个时候就可以手工操作了,interact后的命令不起作用;
  • 例如:interact后添加exit,并不会退出root用户。而如果没有interact则登录完成后会退出,而不是留在远程终端上。
  • 使用interact会保持在终端而不会退回到原终端;
  • 例如:切换到root用户,会一直在root用户状态下;比如ssh到另外一台服务器,会一直在目标服务器终端,而不会切换到原来服务器

注意:expect eof 与interact只能二选一

6. set 设置会话超时时间

  • expect 默认的超时时间是10秒,通过set 命令可以设置会话超时时间,若不限制超时时间则应设置为-1
  • 例如: set time out 30

7. exp_continue

  • exp_continue 附加于某个 expect 判断项之后,可以使该项被匹配后,还能继续匹配该 expect 判断语句内的其他项。
  • exp_continue 类似于控制语句中的 continue 语句。表示允许 expect 继续向下执行指令。
  • 并行执行,exp_continue 前面的匹配如果有就执行,没有就不执行;但后面的一定会执行。

注意:使用exp_continue时,如果跟踪像 passwd 这样的输入密码后就结束进程的命令,expect{}外不要再加上expect eof 因为spawn进程结束后会默认向expect发送eof,会导致后面的expect eof 执行报错

8. send_users

  • 表示回显命令,相当于echo

9. 接收参数

  • expect 脚本可以接受从bash命令行传递参数,使用 [lindex $argv n]获得。其中你从0开始,分别表示第一个,第二个,第三个.....参数

passwd 修改用户密码

 

相关文章:

DAY 37 shell免交互

Here Document 概述 常用的交互程序&#xff1a;read&#xff0c;ftp&#xff0c;passwd&#xff0c;su&#xff0c;sudo cat也可配合免交互的方式重定向输出到文件 Here Document 的作用 使用I/O重定向的方式将命令列表提供给交互式程序标准输入的一种替代品 格式 命令 …...

用python脚本从Cadence导出xdc约束文件

用python脚本从Cadence导出xdc约束文件 概述转换方法先导出csv文件修改CSV文件 CSV转XDC检查输出XDC文件csv2xdc源代码下载 概述 在Cadence设计完成带有FPGA芯片的原理图的时候&#xff0c;往往需要将FPGA管脚和网络对应关系导入vivado设计软件中&#xff0c;对于大规模FPGA管…...

【C++ 六】内存分区、引用

内存分区、引用 文章目录 内存分区、引用前言1 内存分区模型1.1 程序运行前1.2 程序运行后1.3 new 操作符 2 引用2.1 引用基本使用2.2 引用注意事项2.3 引用做函数参数2.4 引用做函数返回值2.5 引用本质2.6 常量引用 总结 前言 本文包含内存分区、引用基本使用、引用注意事项、…...

markdown基本语法

来自神秘人儿的投稿&#xff01; markdown的使用&#xff0c;可以参考https://markdown.com.cn/basic-syntax/ 标题&#xff1a;用 # 表示 段落&#xff1a;enter即可&#xff0c;两端之间有一个空行 换行&#xff1a;一行的末尾加两个或者多个空格&#xff0c;两端之间没有…...

第十篇 Spring 集成Redis

《Spring》篇章整体栏目 ————————————————————————————— 【第一章】spring 概念与体系结构 【第二章】spring IoC 的工作原理 【第三章】spring IOC与Bean环境搭建与应用 【第四章】spring bean定义 【第五章】Spring 集合注入、作用域 【第六章】…...

PADS-LOGIC项目原理图设计

最小板原理图设计 目录 1 菜单与工具使用 2 常用设置 2.1选项卡 2.2 图纸设置 2.3 颜色设置 3 设计技巧 3.1 模块化设计思路 3.2 元件放置 3.3 走线及连接符 4 原理图绘制 4.1 POWER原理图设计 4.2 MCU原理图设计 4.2.1晶振电路 4.2.2复位电路 4.2.3 BOOT电路 …...

36岁大龄程序员被裁,找了2个月工作,年包从100万降到50万,要不要接?

为了找到工作&#xff0c;你愿意接受降薪多少&#xff1f; 一位36岁的杭州程序员问&#xff1a; 36岁被裁&#xff0c;找了2个月工作&#xff0c;年包从100万降到50万&#xff0c;真心纠结&#xff0c;要不要接&#xff1f; 网友们分成了旗帜鲜明的两派&#xff0c;一派人认为不…...

Android Retrofit 源码分析

1、简介 Retrofit 是一种基于 Java 的 RESTful Web Service 客户端库&#xff0c;它可以将网络请求抽象出来并支持多种转换器&#xff0c;可以将 JSON、XML 和其他格式的响应数据自动转换为 Java 对象。Retrofit 通过注解的方式来描述 REST API 调用&#xff0c;使开发人员能够…...

CDN如何阻止网络攻击

随着网络技术的发展&#xff0c;网络攻击事件也越来越多&#xff0c;对企业和个人的安全和稳定造成严重威胁。为此&#xff0c;高防CDN应运而生&#xff0c;成为广大用户保障网络安全的重要工具。什么是高防CDN?高防CDN的特点有哪些?高防CDN如何阻止网络攻击?接下来让我们一…...

Mybatis-Plus -04 条件构造器与代码生成器

Mybatis-Plus--条件构造器与代码生成器 1 条件构造器1.1 > < 1.2 in notin1.3 between...1.4 orderBy...1.5 like... 2 代码生成器2.1 引入依赖2.2 生成器代码 1 条件构造器 通过条件构造器可以更加轻松的完成条件查询与更新(底层就是动态SQL) 1.1 > < ge 小于 &l…...

MapReduce高级篇——全局计数器

MapReduce Counter 计数器 概念 在执行MapReduce程序的时候&#xff0c;控制台输出日志中通常下面片段&#xff0c;可以发现输出信息中的核心词是counter,中文叫做计数器 在执行MapReduce城西过程中&#xff0c;许多时候&#xff0c;用户希望了解程序的运行情况&#xff0c;H…...

轻松掌握K8S目录持久卷PV/PVC的kubectl操作知识点04

1、介绍 在docker中可以将容器中的目录挂载出来&#xff0c;在k8s中pod可以部署在不同节点&#xff0c;假如该节点的机器宕机了&#xff0c;k8s可能就会将此Pod转移到其他机器&#xff0c;就不是原先的机器了。k8s有自己的一套挂载方案&#xff0c;如下图所示&#xff0c; 原…...

Appuploader证书申请教程

转载&#xff1a;IOS证书制作教程 点击苹果证书 按钮 点击新增 输入证书密码&#xff0c;名称 这个密码不是账号密码&#xff0c;而是一个保护证书的密码&#xff0c;是p12文件的密码&#xff0c;此密码设置后没有其他地方可以找到&#xff0c;忘记了只能删除证书重新制作&…...

acwing17给了一个头节点,从尾到头输出链表的元素,顺便练练容器

方法一 建立一个数组&#xff0c;从头到尾遍历一遍链表&#xff0c;然后将链表的每个元素的值赋给数组 犯了一个错误 新建的vector容器是一个可变长的数组&#xff0c;要想像数组下标那样访问前提是这个下标所指向的元素得存在&#xff0c;这也就跟那个声明一维数组得写出长度来…...

Linux 性能优化大全!

性能指标 高并发和响应快对应着性能优化的两个核心指标&#xff1a;吞吐和延时 应用负载角度&#xff1a;直接影响了产品终端的用户体验 系统资源角度&#xff1a;资源使用率、饱和度等 性能问题的本质就是系统资源已经到达瓶颈&#xff0c;但请求的处理还不够快&#xff0…...

精通 TensorFlow 2.x 计算机视觉:第一部分

原文&#xff1a;Mastering Computer Vision with TensorFlow 2.x 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;…...

mulesoft MCIA 常用词汇、知识点汇总

mandate 授权 carry out 执行 subscriptions 订阅 stakeholders 利益相关者 periodically 定期地 Idempotent 幂等的 on-premises 本地 mutual 相互 two-way 双向的 arbitrary 任意的 mandatory 强制性的 round-robin 循环 replicate 复制 compensating actions 补…...

Python 单样本学习实用指南:1~6 全

原文&#xff1a;Hands-On One-shot Learning with Python 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;只关心如…...

心血管疾病数据探索分析

心血管疾病数据探索分析 初步数据分析 首先,导入挑战所需模块: import pandas as pd import numpy as np import seaborn as sns import matplotlib import matplotlib.pyplot as plt import matplotlib.ticker from matplotlib import rcParams import warnings warnings…...

Pandas的应用-1

Pandas是一个开源的数据分析工具&#xff0c;它提供了高性能、易于使用的数据结构和数据分析工具。其中&#xff0c;Series是Pandas中最基本的数据结构之一&#xff0c;它是一种类似于一维数组的对象&#xff0c;可以储存任何数据类型。在本文中&#xff0c;我们将介绍Series的…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...