shell脚本-免交互

一、Here Document免交互:

1.交互概述:

交互:当计算机播放某多媒体程序的时候,编程人员可以发出指令控制该程序的运行,而不是程序单方面执行下去,程序在接受到编程人员相应的指令后而相应地做出反应。

对于Linux操作系统中,有许多操作都会触及到交互(根据系统的指示做出相对应的操作满足操作者的需求),对于shell脚本的自动化运维,就要实现免交互来达到自动化运维的效果。

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

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

2.Here Doucument 的作用和格式:

Here Document 的作用:

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

 语法格式:

命令 <<标记
.......
内容			#标记之间是传入内容
.......
标记

注意事项:

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

示例:

统计行数

免交互方式实现对行数的统计,将要统计的内容置于标记"EOF"之间

3.Here Document 的使用:

3.1 cat命令的读取:

覆盖文件:

追加文件:

3.2 tee命令:

tee和cat相似,但tee 可以直接生成文件

选项:

-a内容追加到给定的文件而非覆盖
-i忽略中断信号

3.3 read :

read只读取第一行输入的内容

3.4 passwd 用户修改密码:

4.Here Document 变量的使用:

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

4.1变量替换实际值:

#!/bin/bash
file="EOF1.txt"
var="Zhuzi"
cat > $file <<EOF
Hi,my name is $var
EOF

4.2 整行内容作为变量并输出结果:

#!/bin/bash
file="1.txt"
var="park"
my=$(cat <<EOF >$file
I am going to the $var
EOF
)
echo $my

4.3 交互内容中输出变量:

#!/bin/bashx="nihao"
y=$(cat <<EOF
111
222
$x
EOF
)
echo "$y"

4.4 使输出内容换行:

#!/bin/bash
var="Me too!"
myvar=$(cat <<EOF
How are you?
I'm fine,And you?
$var
EOF
)
echo "$myvar"

 4.5 多行注释:

#!/bin/bash
file="zs.txt"
var="bamboo"
myvar=$(cat <<EOF >$file
My name is $var.
How old are you?
Do you want play with me?EOF
)
echo $myvar
###下面部分就被注释了不会显示
:<<EOF
echo "My name is $var."
echo "Do you want play with me?"
EOF

4.6去除tab键的影响:

tab键的空行

解决方法:

再EOF前添加 -

4.7  完成自动划分磁盘免交互:

fdisk /dev/sdb <<EOF
> n
> p
> 
> 
> 
> 
> w
> EOF

二. Expect进行免交互:

1.Expect 定义:

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

使用expect命令前需要先进行安装tcl与expect软件,在安装expect软件自动安装依赖包tcl
先检查系统内是否安装expect软件包。

检查expect安装包和依赖包tcl是否安装

没有安装使用:yum install expect -y 安装 

 2.Expect的基本使用:

2.1脚本解释器的声明:

Expect 脚本中首先引入文件,表明使用的是哪一个 shell

#!/usr/bin/expect

2.2 spawn——启动进程并捕捉交互信息:

 spawn 后面通常跟一个 Linux 执行命令,表示开启一个会话、启动进程,并跟踪后续交互信息(监控  捕捉)

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

2.4——send 用于向进程发送字符串:

  • 向进程发送字符串,用于模拟用户的输入;
  • 该命令不能自动回车换行,一般要加\r (回车)或者\n
方式一:
expect "密码" {send "abc123\r"}     #同一行send部分要有{}方式二:
expect "密码"  
send "abc123\r"                    # 换行send部分不需要有{}方式三:
expect 支持多个分支
expect          #只要匹配了其中一个情况,执行相应的send 语句后退出该expect 语句
只匹配一次
expect
{
{"密码1"  {send "abc123\r"}
{"密码2"  {send "123123\r"}
{"密码3"  {send "123456\r"}}

2.5.结束符:

expect eof:

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

interact:

执行完后保持交互状态,把控制权交给控制台会停留在目标终端而不会退回到原终端,这个时候就可以手工操作了,interact 后的命令不起作用;
使用 interact 会保持在终端而不会退回到原终端;

需要注意的是,expect eof 与 interact 只能二选一

2.6 exp_continue:

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

2.7 set  设置会话超时时间:

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

2.8 send_users:

表示回显命令,相当于 echo

2.9 接收参数:

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

3.Expect 免交互的脚本运用:

3.1免交互传输文件:

#!/usr/bin/expectspawn scp /etc/passwd  172.16.195.4:/opt
#监控scp命令,出现scp命令开始捕捉屏幕内容expect {"yes/no"  {send  "yes\n";exp_continue}"password" {send "123\n";}
}
#捕捉屏幕上的关键字,出现yes/no输入yes
#exp_continue 代表继续捕捉password
#出现 password 输入密码。 \n  \r 回车expect eof
#代表结束

3.2 免交互修改用户密码:

#!/usr/bin/expext#脚本用于实现免交互修改gg用户的密码set timeout 2
#设置超时时间为2秒,默认情况是10秒spawn passwd gg
#spawn追踪后面指令产生的交互过程expect "新的密码"
send "123123\r"
expect "重新输入新的密码"
send "123123\r"
#匹配交互过程中的提示信息
#send 相当于echo,传送在该交互过程中你的预设值expect eof
#结束符

3.3 免交互ssh远程登陆:

#!/usr/bin/expect
#开启ssh命令,ssh后面跟要远程控制的IP地址
spawn ssh 172.16.195.4
expect {"yes/no" { send "yes\n";exp_continue }"password" { send "123123\n"}}
interact

3.4 su 命令切换用户:

#!/usr/bin/expectset timeout 1set username [lindex $argv 0]
set password [lindex $argv 1]spawn su $usernameexpect "密码"
send "$password\n"expect "*]$"
send_user "$username 切换成功!"interact

3.5 免交互fdisk分区操作:

#!/usr/bin/expectset timeout 2
set name [lindex $argv 0]spawn fdisk $name
expect "获取帮助"
send "n\r"
expect "Select"
send "p\r"
expect "分区号"
send "\r"
expect "起始"
send "\r"
expect "Last"
send "+10G\r"
expect "命令"
send "w\r"interact

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

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

相关文章

铁轨语义分割(Unet结合resnet系列)

数据介绍 一类是图片&#xff0c;一类是图像标签。 引入库&#xff0c;处理数据 import torch.nn as nn import torch import torch.nn.functional as F import os from PIL import Image import torch from torch.utils.data import Dataset import torchvision.transfor…

Unity SRP 管线【第七讲:URP LOD实现以及Reflections反射探针】

目录 一、URP LOD 组件1、LOD Group的使用2、LOD切换原理Cross Fade(淡入淡出)模式Animated Cross-Fading如果未设置Clip&#xff0c;并且Fade Transition Width不为0LOD物体烘培 SpeedTree 模式 二、反射探针1. 获取反射探针数据2. 环境光照明 IBL3. 反射探针&#xff08;Refl…

部署前后端分离项目详细教程

部署前后端分离项目详细教程 1、准备工作 首先你需要一台服务器&#xff0c;然后在服务器上安装好你所需要的环境&#xff0c;我这里用的宝塔界面来安装环境。 如果有人不知道怎么安装宝塔界面&#xff0c;可参考这篇文章&#xff0c;如果不知道怎么买服务器&#xff0c;可以参…

菜鸡后端的前端学习记录-2

前言 记录一下看视频学习前端的的一些笔记&#xff0c;以前对Html、Js、CSS有一定的基础&#xff08;都认得&#xff0c;没用过&#xff09;&#xff0c;现在不想从头再来了&#xff0c;学学Vue框架&#xff0c;不定时更新&#xff0c;指不定什么时候就鸽了。。。。 忘了记一下…

前端工程化基础(四):Git代码版本控制工具详解

Git版本控制工具详解 认识版本控制&#xff08;版本控制&#xff09; 是维护 工程蓝图的标准做法&#xff0c;能追踪工程蓝图从诞生一直到定案的过程版本控制也是 一种软件工程技巧&#xff0c;借此能在软件开发的过程中&#xff0c;确保不同的人所编辑的同一程序都能得到同步…

tcp/ip模型中,帧是第几层的数据单元?

在网络通信的世界中&#xff0c;TCP/IP模型以其高效和可靠性而著称。这个模型是现代互联网通信的基石&#xff0c;它定义了数据在网络中如何被传输和接收。其中&#xff0c;一个核心的概念是数据单元的层级&#xff0c;特别是“帧”在这个模型中的位置。今天&#xff0c;我们就…

有趣的css - 简约的动态关注按钮

页面效果 此效果主要使用 css 伪选择器配合 css content 属性&#xff0c;以及 transition(过渡)属性来实现一个简约的动态按钮效果。 此效果可适用于关注按钮、详情按钮等&#xff0c;增强用户交互体验。 核心代码部分&#xff0c;简要说明了写法思路&#xff0c;看 css 部分的…

一文详解docker swarm

文章目录 1、简介1.1、涉及到哪些概念&#xff1f;1.2、需要注意什么&#xff1f; 2、集群管理2.1、创建集群2.2、将节点加入集群2.3、查看集群状态。2.4、将节点从集群中移除2.5、更新集群2.6、锁定/解锁集群 3、节点管理4、服务部署4.1、准备4.2、服务管理4.2.1、常用命令4.2…

[C++]继承(续)

一、基类和派生类对象赋值转换 在public继承时&#xff0c;父类和子类是一个“is - a”的关系。 子类对象赋值给父类对象/父类指针/父类引用&#xff0c;我们认为是天然的&#xff0c;中间不产生临时对象&#xff0c;也叫作父子类赋值兼容规则&#xff08;切割/切片&#xff…

idea查看日志的辅助插件 --- Grep Console (高亮、取消高亮)

&#x1f680; 分享一款很有用的插件&#xff1a;Grep Console &#x1f680; 我们在查看日志的时候可能会有遗漏&#xff0c;使用这款插件可以让特定的关键词高亮&#xff0c;可以达到不遗漏的效果&#xff01; 如果你是一个开发者或者对日志文件分析感兴趣&#xff0c;不要…

记录一次使用ant design 中 ConfigProvider来修改样式导致样式改变的问题(Tabs嵌套Tabs)

一 说明 继之前的一篇文章&#xff1a;antd5 Tabs 标签头的文本颜色和背景颜色修改 后&#xff0c;发现在被修改后的Tab中继续嵌套Tabs组件&#xff0c;这个新的Tabs组件样式跟外层Tabs样式也是一致的&#xff0c;如下图所示&#xff1a; 二 原因 在修改外层tabs样式时&…

又涨又跌 近期现货黄金价格波动怎么看?

踏入2024年一月的下旬&#xff0c;现货黄金价格可以说没了之前火热的状态&#xff0c;盘面上是又涨又跌。面对这样的行情&#xff0c;很多投资者不知道如何看了。下面我们就来讨论一下怎么把握近期的行情。 先区分走势类型。在现货黄金市场中有两种主要的走势类型&#xff0c;一…

【SpringCloud】使用OpenFeign进行微服务化改造

目录 一、需求与背景二、OpenFeign 远程调用技术原理三、项目代码演示3.1 引入依赖3.2 实现OpenFeign注解修饰接口3.3 指定 OpenFeign 远程调用接口的扫描路径 四、OpenFeign 在日志中打印Request和Response五、OpenFeign 客户端超时配置六、使用 OpenFeign 实现服务降级6.1 实…

《区块链简易速速上手小册》第10章:区块链的未来与趋势(2024 最新版)

文章目录 10.1 区块链的未来展望10.1.1 基础知识10.1.2 主要案例&#xff1a;区块链在金融领域的发展10.1.3 拓展案例 1&#xff1a;区块链在供应链管理中的应用10.1.4 拓展案例 2&#xff1a;区块链在身份管理和隐私保护中的应用 10.2 新兴技术与区块链的融合10.2.1 基础知识1…

智能家居的网关新形态:Aqara 方舟智慧中枢 M3 体验

如果说在刚刚结束的 2023 年有哪些备受期待的智能家居产品&#xff0c;Aqara 方舟智慧中枢 M3 一定榜上有名&#xff0c;我的多位朋友也曾在装修过程中多次向我询问是否有这款产品的相关资讯&#xff1b;谁能想到自从在 2022 年 11 月首次亮相之后&#xff0c;这款产品一直等了…

vulhub靶机activemq环境下的CVE-2015-5254(ActiveMQ 反序列化漏洞)

影响范围 Apache ActiveMQ 5.x ~ Apache ActiveMQ 5.13.0 远程攻击者可以制作一个特殊的序列化 Java 消息服务 (JMS) ObjectMessage 对象&#xff0c;利用该漏洞执行任意代码。 漏洞搭建 没有特殊要求&#xff0c;请看 (3条消息) vulhub搭建方法_himobrinehacken的博客-CSD…

iOS图像处理----探索图片解压缩到渲染的全过程以及屏幕卡顿

一&#xff1a;图像成像过程 ①、将需要显示的图像&#xff0c;由CPU和GPU通过总线连接起来&#xff0c;在CPU中输出的位图经总线在合适的时机上传给GPU &#xff0c;GPU拿到位图做相应位图的图层渲染、纹理合成。 ②、将渲染后的结果&#xff0c;存储到帧缓存区&#xff0c;帧…

【脑电信号处理与特征提取】P7-贾会宾:基于EEG/MEG信号的大尺度脑功能网络分析

基于EEG/MEG信号的大尺度脑功能网络分析 Q: 什么是基于EEG/MEG信号的大尺度脑功能网络分析&#xff1f; A: 基于脑电图&#xff08;EEG&#xff09;或脑磁图&#xff08;MEG&#xff09;信号的大尺度脑功能网络分析是一种研究大脑活动的方法&#xff0c;旨在探索脑区之间的功能…

【JavaSE篇】——继承

目录 &#x1f393;继承 ✅为什么需要继承 ✅继承概念 ✅继承的语法 ✅父类成员访问 &#x1f6a9;子类中访问父类的成员变量 1. 子类和父类不存在同名成员变量的情况 2. 子类和父类成员变量同名 &#x1f6a9;子类中访问父类的成员方法 1. 成员方法名字不同 2. 成员…

SAM:基于 prompt 的通用图像分割模型

Paper: Kirillov A, Mintun E, Ravi N, et al. Segment anything[J]. arXiv preprint arXiv:2304.02643, 2023. Introduction: https://segment-anything.com/ Code: https://github.com/facebookresearch/segment-anything SAM 是 Meta AI 开发的一款基于 prompt 的通用视觉大…