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

Linux的免交互

交互:我们发出指令控制程序的运行,程序在接收到指令之后按照指令的效果做出对应的反应。

免交互:间接的通过第三方的方式把指令传送给程序,不用直接的下达指令。

1、here document免交互

ere document免交互:是命令行格式,也可以写在脚本当中,通过I/O重定向的方式将命令的列表传送给交互式程序或者命令

是标准输入的一种替代品,代替了人工的输入方式

语法格式:

命令(linux的系统命令)<<标记

内容1

内容2

内容3

标记

#wc 统计字符串
[root@localhost /]# wc -l << xy102
> 123
> 456
> 789
> xy102
3

注意事项:

1、标记可以是任意的合法字符(一般不用特殊字符,不以数字开头,通常以EOF作为默认的标记位)

2、结尾的标记位一定要顶格写,且前面不能有任何字符,空格也不行。

3、结尾的标记后面也不能有任何字符,包括空格

4、开头的标记前后的空格都会被省略掉

#使用免交互修改用户密码
[root@localhost /]# passwd dn <<EOF
> 123
> 123
> EOF
#使用免交互赋值
[root@localhost /]# read i << EOF
123
EOF
[root@localhost /]# echo $i
123

2、tee命令免交互

[root@localhost opt]# tee jh1.txt <<EOF
> 1
> 2
> 3
> EOF
1
2
3

3、引入变量

创建mjh1.sh脚本写入以下内容
[root@localhost opt]# cat mjh1.sh 
#!/bin/bash
file="test9.sh"
i=school
cat > $file <<EOF
I am going to $i
EOF

运行脚本生成test9.sh脚本文件
查看test9.sh脚本内容 

 

4、 整体变量赋值

将var字符串内容整体赋值给myvar
#!/bin/bash
var="good I am going to school"
#整体赋值方式
myvar=$(
cat <<EOF
zhangsan say
$var
EOF
)
echo  $myvar输出结果
[root@localhost opt]# sh mjh1.sh 
zhangsan say good I am going to school将EOF加单引号,关闭整体变量赋值
#!/bin/bash
var="good I am going to school"
myvar=$(
cat <<'EOF'
zhangsan say
$var
EOF
)
echo  $myvar
输出结果
[root@localhost opt]# sh mjh1.sh 
zhangsan say $var

5、Expect实现免交互

用tcl语言写的一个工具,主要用自动化控制和测试。解决shell脚本交互的问题

需要先下载

[root@localhost opt]# yum -y install expect

实例

#!/usr/bin/expect
#声明解释器,不再是默认的bash,需要声明,使用whereis expect 查找目录位置
set timeout 5
#set 设置,timeout 超时时间,expect有一个默认的超时时间10秒,设置超时时间5秒
#set也可以作为设置变量
spawn passwd dn
#spawn用来声明需要执行的命令,开启会话过程,并且跟踪后续的交互信息
expect "新的 密码:"
#expect来捕获需要执行的命令行
#捕获不需要完整的可以使用*代表所有
send "zlm12388\r"
#send 表示输入指令代码,\r表示回车
expect "重新输入新的 密码:"
send "zlm12388\r"expect eof
#交互指令结束之后,会退回原用户,切换回之前的用户
#interact
#留在当前用户,不会改变#最后一定要有结束语,以上两个只能选一个

 执行脚本要先赋权,使用./的方式执行  

实例:普通用户进行切换 

#!/usr/bin/expect
set timeout 5
set username [lindex $argv 0]
set password [lindex $argv 1]
#位置变量#开始追踪
spawn su - $username
#免交互开始执行
expect "密码"
send "$password\r"
#继续捕获
expect "~]$"
send_user "ok"
#send_user =echo 打印指定内容
#结束语
interact

 实现效果

结束语使用 expect eof效果

6、 嵌入执行模式

嵌入执行模式,在shell当中加入expect,涉及到环境切换的场景不建议使用嵌套

例如ssh su 不适用使用嵌入模式

#!/bin/bash
user=$1
password=$2
#非交互命令,使用的是shell
useradd $user
#嵌入免交互
/usr/bin/expect <<-EOF
spawn passwd $user
expect "新的*"
send "$password\r"
expect "重新*"
send "$password\r"
expect eof
EOF

 实现效果

7、使用ssh连接其他主机  

基础版

#!/usr/bin/expect
set ip 192.168.10.30
set user root
set password 123
set timeout 5#进入命令行
spawn ssh $user@$ip
expect {"(yes/no)" {send "yes\r";exp_continue}
#这里捕获两次,表示该项被匹配之后,继续匹配其他的指定的内容
#类似于循环的continue,允许expect语句继续向下执行
"password" {send "$password\r"}
}
interact

实验效果

进阶版

#!/usr/bin/expect
set timeout 5
#使用位置变量,手动输入
set hostname [lindex $argv 0]
set password [lindex $argv 1]#进入命令行
spawn ssh $hostname
expect {
#出现异常情况显示实现
"NO route to host" {send_user "主机名/ip有误\n"}
"Connection refusedi" {send_user "ssh连接拒绝\n"}
"(yes/no)" {send "yes\r";exp_continue}
"password" {send "$password\r"}
}
interact

8、小练习

免交互实现硬盘分区,分一个区即可,分完之后,第一步要格式,第二步实现挂载,挂载(手动挂载)然后在这个分区的挂载文件创建一个文件,写入内容“学习真好”,并且打印出结果,在一个脚本里完成,嵌入模式。

#!/bin/bash
# 使用shell
scan
# 列出所有块设备
lsblk
set timeout 5
# 设置超时时间为5秒
/usr/bin/expect <<-EOF
spawn fdisk /dev/sdb
#进行分区
expect  "命令" 
send "n\r"
expect  "(default p)"
send "p\r"
expect  "分区号" 
send "1\r"
expect  "起始 扇区 " 
send "\r"
expect  "Last" 
send "\r"
expect  "(输入 m 获取帮助)" 
send "w\r"expect eof
EOF
# 刷新分区表
partprobe /dev/sdb
# 列出所有块设备以检查新分区 以及过滤想要出现的分区
lsblk | grep sdb1 >& /dev/null
if [[ $? -eq 0 ]]
then
echo "分区被建立"
mkfs.xfs -f /dev/sdb1
mkdir /data1
mount /dev/sdb1 /data1
df -hT
else
echo "分区没有被建立"
fi
#写入内容
cat >/data1/test1.txt <<EOF
学习真好
EOF
cat /data1/test1.txt

输出效果

 

相关文章:

Linux的免交互

交互&#xff1a;我们发出指令控制程序的运行&#xff0c;程序在接收到指令之后按照指令的效果做出对应的反应。 免交互&#xff1a;间接的通过第三方的方式把指令传送给程序&#xff0c;不用直接的下达指令。 1、here document免交互 ere document免交互&#xff1a;是命令…...

查看es p12证书文件过期方法

查看证书过期时间: openssl pkcs12 -in elastic-certificates.p12 -nokeys -out elastic-certificates.crt (需要输入证书生成时配置密码) openssl x509 -enddate -noout -in elastic-certificates.crt...

1.8 无符号大数加、减运算

作者 李卫明 单位 杭州电子科技大学 1.8 无符号大数加、减运算。程序设计中经常遇到无符号大数加、减运算问题&#xff0c;请在样例程序Ex1.4基础上实现无符号大数减运算。题目要求输入两个无符号大数&#xff0c;保证一个大数不小于第二个大数&#xff0c;输出它们的和、差。…...

Java常用类--包装类

包装类 一方面出于性能方面的考虑&#xff0c;java为数值使用基本类型&#xff0c;而不是对象。基本类型不是对象层次的组成部分&#xff0c;它们不继承Object。 另一方面有时需要创建表示基本类型的对象&#xff0c;例如集合类只处理对象。为了在类中存储基本类型&#xff0c;…...

SpringMvcの拦截器全局异常处理

一、拦截器 我们在网上发贴子的时候如果没有登录&#xff0c;点击发送按钮会提示未进行登录&#xff0c;跳转到登录页面。这样的功能是如何实现的。 1、 拦截器的作用 Spring MVC 的处理器拦截器类似于Servlet开发中的过滤器Filter&#xff0c;用于对处理器进行预处理和后处理…...

JVM虚拟机的组成

一、为什么要学习 JVM &#xff1f; 1. “ ⾯试造⽕箭&#xff0c;⼯作拧螺丝” &#xff0c; JVM 属于⾯试官特别喜欢提问的知识点&#xff1b; 2. 未来在⼯作场景中&#xff0c;也许你会遇到以下场景&#xff1a; 线上系统突然宕机&#xff0c;系统⽆法访问&#xff0c;甚⾄直…...

探索CSS clip-path: polygon():塑造元素的无限可能

在CSS的世界里&#xff0c;clip-path 属性赋予了开发者前所未有的能力&#xff0c;让他们能够以非传统的方式裁剪页面元素&#xff0c;创造出独特的视觉效果。其中&#xff0c;polygon() 函数尤其强大&#xff0c;它允许你使用多边形来定义裁剪区域的形状&#xff0c;从而实现各…...

【华为OD机试B卷】单词接龙(C++/Java/Python)

题目 题目描述 单词接龙的规则是: 可用于接龙的单词首字母必须要前一个单词的尾字母相同;当存在多个首字母相同的单词时,取长度最长的单词,如果长度也相等,则取字典序最小的单词;已经参与接龙的单词不能重复使用。现给定一组全部由小写字母组成单词数组,并指定其中的一个…...

项目实训-vue(十七)

项目实训-vue&#xff08;十七&#xff09; 文章目录 项目实训-vue&#xff08;十七&#xff09;1.概述2.问诊类型3.问诊时间统计4.看诊时间统计 1.概述 本篇博客将记录我在数据统计页面中的工作。因为项目并未实际运行&#xff0c;因此我们拟定了一些数据&#xff0c;并构建了…...

Android10 SystemUI系列 需求定制(二)隐藏状态栏通知图标,锁屏通知,可定制包名,渠道等

一、前言 SystemUI 所包含的界面和模块比较多,这一节主要分享一下状态栏通知图标和通知栏的定制需求:隐藏状态栏通知图标,锁屏通知,可定制包名,渠道等 来熟悉一下Systemui。 二、准备工作 按照惯例先找到核心类。这里提前说一下,这个需求的修改方法更多,笔者这里也只…...

Linux:RAID磁盘阵列

目录 一、RAID&#xff08;磁盘阵列&#xff09; 1.1、概念 1.2、RAID 0&#xff08;条带化存储&#xff09; 1.3、RAID 1&#xff08;镜像存储&#xff09; 1.4、RAID 5 1.5、RAID 6 1.6、RAID 10 (先做镜像&#xff0c;再做条带) 二、创建RAID 2.1、建立RAID 0 …...

MongoDB和AI 赋能行业应用:零售

欢迎阅读“MongoDB 和 AI 赋能行业应用”系列的第三篇。 本系列重点介绍 AI 应用于不同行业的关键用例&#xff0c;涵盖制造业和汽车行业、金融服务、零售、电信和媒体、保险以及医疗保健行业。 利用生成式 AI 技术&#xff08;Gen AI&#xff09;&#xff0c;零售商可以创造…...

MQ~消息队列能力、AMQP协议、现有选择(Kafka、RabbitMQ、RocketMQ 、Pulsar)

消息队列 消息队列看作是一个存放消息的容器&#xff0c;当我们需要使用消息的时候&#xff0c;直接从容器中取出消息供自己使用即可。由于队列 Queue 是一种先进先出的数据结构&#xff0c;所以消费消息时也是按照顺序来消费的。 常⽤的消息队列主要这 五 种&#xff0c;分别…...

开源网安参与编制的《代码大模型安全风险防范能力要求及评估方法》正式发布

​代码大模型在代码生成、代码翻译、代码补全、错误定位与修复、自动化测试等方面为研发人员带来了极大便利的同时&#xff0c;也带来了对安全风险防范能力的挑战。基于此&#xff0c;中国信通院依托中国人工智能产业发展联盟&#xff08;AIIA&#xff09;&#xff0c;联合开源…...

【树状数组 队列】1505. 最多 K 次交换相邻数位后得到的最小整数

本文涉及知识点 树状数组 队列 LeetCode1505. 最多 K 次交换相邻数位后得到的最小整数 给你一个字符串 num 和一个整数 k 。其中&#xff0c;num 表示一个很大的整数&#xff0c;字符串中的每个字符依次对应整数上的各个 数位 。 你可以交换这个整数相邻数位的数字 最多 k 次…...

【附精彩文章合辑】当谈到程序的“通用性”与“过度设计”的困境时,我们可以通过一些具体的例子来更直观地阐述这些解决方案

当谈到程序的“通用性”与“过度设计”的困境时&#xff0c;我们可以通过一些具体的例子来更直观地阐述这些解决方案。以下是一些示例&#xff1a; 一、明确需求与目标 例子1&#xff1a;在线购物平台 需求分析&#xff1a;平台需要支持用户注册、登录、浏览商品、下单购买、…...

Word中删除空白页

① 文字后面出现的空白页 把鼠标放在空白页的位置&#xff0c;按住Ctrl Delete即可。 ② 表格后面的空白页 把鼠标放在空白页左侧&#xff0c;直到出现一个空白的箭头&#xff0c;点击一下选中空白页&#xff0c;然后再Ctrl D&#xff0c;打开字体选项卡&#xff0c;在效果中…...

30.Netty进阶-黏包半包解决方案-短链接

客户端发送一次完整的消息,然后就把与服务端的链接断开。服务端读到的结果就是-1。 服务器就知道 从链接建立到断开,发送的数据是一条完整的数据。 客户端代码 package com.xkj.nian;import io.netty.bootstrap.Bootstrap; import io.netty.buffer.ByteBuf; import io.net…...

斜堆(数据结构篇)

数据结构之斜堆 斜堆 概念&#xff1a; 斜堆是左式堆的自调节形式&#xff0c;斜堆和左式堆间的关系类似于伸展树和AVL树间的关系斜堆是具有堆序性的二叉树&#xff0c;但是不存在对树的结构限制不同于左式堆&#xff0c;关于任意节点的零路径长的任何信息都不保留&#xff…...

河南大学24计算机考研数据,有三个学院招收计算机相关专业,都是考的408!

河南大学&#xff08;Henan University&#xff09;&#xff0c;简称“河大”&#xff0c;是河南省人民政府与中华人民共和国教育部共建高校&#xff0c;国家“双一流”建设高校&#xff0c;入选国家“111计划”、中西部高校基础能力建设工程、卓越医生教育培养计划、卓越法律人…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...

WebRTC调研

WebRTC是什么&#xff0c;为什么&#xff0c;如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...

密码学基础——SM4算法

博客主页&#xff1a;christine-rr-CSDN博客 ​​​​专栏主页&#xff1a;密码学 &#x1f4cc; 【今日更新】&#x1f4cc; 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...

Java中HashMap底层原理深度解析:从数据结构到红黑树优化

一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一&#xff0c;是基于哈希表的Map接口非同步实现。它允许使用null键和null值&#xff08;但只能有一个null键&#xff09;&#xff0c;并且不保证映射顺序的恒久不变。与Hashtable相比&#xff0c;Hash…...