Linux免交互

免交互概念

不需要进入文件内部,可以在文件外对文件内容进行操作

sed 最强大的功能:改 新增

awk 最强大的功能:按行取列

如何对文本内容进行免交互

here document 免交互

对文本内容进行操作:标准输入的替代品

语法格式:

命令 <<标记

内容

标记

命令指的是Linux命令

以什么为开头,就以什么为结尾

注意事项:

1.标记可以使用任意合法字符。(字母和数字,一般不适用特殊符号。以字母为开头。EOF)

2.结尾的标记一定要顶格写,而且结尾的标记前不能有任何字符(包括空格,也不行)

3.开头的标记可以加空格,但是会被自动省略。

wc命令对行的统计

-l:统计行数

-c:统计字节数

-w:统计单词数

通过read命令读取

[root@hj opt]# read i <<EOF
> test
> 123
> EOF
[root@hj opt]# echo $i
test
[root@hj opt]# 

免交互设置密码

因为设置密码需要输入两遍,一遍设置,一遍确认,所以有两行

免交互在文本中输入内容

tee

tee:本身就有标准输出的作用,可以直接把内容输入到文件当中

例:

向test2.txt输入了  I HAVE $i

外部再给i赋值

#!/bin/bash
#声明编辑器
file="test2.txt"
i="123"
#给i赋值
cat > $file <<EOF
I HAVE $i
#test2.txt输入  IHAVE $i
EOF
#标记结尾

整体赋值给变量

#!/bin/bash
var="Great! Hello World!"
#给var整体赋值
myvar=$(cat <<EOF
this is line 1;
today is weekends
$var
#引用
EOF
)
echo $myvar

若给EOF加上单引号,则无法交互,输出结果则直接是$var.没有具体内容

expect 免交互

主要作用:

自动化控制和测试,解决shell脚本中交互的问题。

expect建立在tcl语言基础上的工具

常用的转义字符:

\n:相当于换行,回车

\t:制表符,相当于tab键

\r:就是回车

\b:退格符

因为expect的文件位置在/usr/bin/expect中,所以他的shell并不是默认,得手动区分

多行注释

expect免交互

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

需要安装两个软件包:expect,tcl。但是安装了expect后就会有tcl(yum解决依赖关系就安装了tcl)

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

使用前需要先检查 :rpm -q expect   是否安装

如果没有安装需要  yum -y install expect  安装

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

相关命令

spawn

spawn后面一般都是Linux命令,表示开启会话或者进程,跟踪后续的交互信息。

expect:捕获

捕获命令相关内容,字符串匹配

send

发送指令,模拟用户输入

方式一:

expect "密码" {send "123456\r" }

写在一行必需要用花括号括起来

方式二:

expect “密码”

send "123456\r"

换行不需要花括号

方式三:多分支匹配模式

expect

{

"密码1" {send "123456\r"}

"密码2" {send "123456\r"}

"密码3" {send "123456\r"}

}

结束符:

1.expect eof

表示交互结束,等待执行结束,退回到原来的用户

expect默认等待时间是10秒 #退回之前的终端

2.interact

执行完成之后保持状态,把控制权交给控制台,然后停留在目标终端,不会退回原终端。

注意:只能二选一

set定义变量,设置参数

set timeout 5

[lindex $argv 0]为位置变量

exp_continue 和 expect是结合起来一起使用的,附加在expect判断项之后,匹配到expect的捕获内容之后的其他选项

以 ssh@root 20.0.0.10为例

expect {"connecting (yes/no)?"  {send "yes\r"; exp_continue;}}expectsetsend_user#回显命令,跟echo一样,打印内容

免交互修改密码

#!/usr/bin/expect
#使用expect得声明编辑器
set time 5
#设置超时时间
spawm passwd hj
#给hj用户修改密码
expect "New passwd:"
#捕获的内容是后续需要模拟用户输入的内容
send "123456\r"
expect "Retype passwd:"
send "123456\r"expect eof

自动修改成功

一定要给脚本权限,否则无法运行

嵌入执行模式

将expect免交互的过程和shell结合起来

ssh su 会涉及到终端切换,不建议使用嵌入式执行

ssh自动登录实现

#!/usr/bin/expect
set timeout 5
set username [lindex $argv 0]
set passwd [lindex $argv 1]
#传参#开启进程,捕获spawn ssh $username#捕获条件
expect {
"No route to host" {send_user "主机名/IP有误\n"}
"Connection refused" {send_user "ssh访问被拒绝\n}
"(yes/no)?" {send "yes\r";exp_continue;}
"passwd" {send "$passwd\r"}
}
interact

免交互的方式进行硬盘分区和格式化以及挂载

#!/bin/bashname=$1/usr/bin/expect <<-EOF
set timeout 5
spawn fdisk $nameexpect "Command"
send "n\r"expect "Select"
send "p\r"expect "Partition"
send "\r"expect "First sector"
send "\r"expect "Last sector"
send "+2G\r"expect "Command (m for help)"
send "w\r"interact
EOFpartprobe
num=$(lsblk | egrep -o sd[b-z][1-9]+ | sed -n '$p')
#进行过滤,取最后一行,所以创建分区必须从头到尾
#如果想避免此情况可以设定参数直接在最后赋值
mkfs.xfs /dev/${num}
#创建文件系统
mkdir /opt/${num}
#创建挂载目录
mount /dev/${num} /opt/${num}
#挂载

免交互任务完成思路

1.实现免交互任务,可以先手动进行一边此任务,记住需要手动输入的项,该项就是此任务需要捕获的内容,后续进行expect匹配捕获和send发送捕获内容的指令即可

2.spawn一般为linux 命令,表示开启会话或者进程(就是运行后会有一系列操作的命令,如fdisk,passwd等等),单行实现的命令(如mkdir mount挂载等)直接写入脚本内即可

3涉及到终端切换的,不建议使用嵌入式执行

4.脚本书写完一定要给权限  chmod 777 xx.sh

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

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

相关文章

火山引擎 ByteHouse:TB 级数据下,如何实现高效、稳定的数据导入

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 近期&#xff0c;火山引擎开发者社区、火山引擎数智平台&#xff08;VeDI&#xff09;联合举办以《数智化转型背景下的火山引擎大数据技术揭秘》为主题的线下 Meeup…

【算法学习】-【双指针】-【盛水最多的容器】

LeetCode原题链接&#xff1a;盛水最多的容器 下面是题目描述&#xff1a; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。…

【软件测试】自动化测试selenium(二)

文章目录 三. 掌握Selenium常用的API使用1. webdriver API2. 操作测试对象3. 添加等待4. 打印信息5. 浏览器的操作6. 键盘事件7. 鼠标事件8. 定位一组元素9. 多层框架/窗口定位10. 下拉框处理11. 弹窗处理12. 上传文件13. 关闭浏览器14. 切换窗口15. 截图操作 三. 掌握Selenium…

做私域,转化成交的秘诀!

数字化时代&#xff0c;企业开始重新定义和客户的关系&#xff0c;不仅是交易关系&#xff0c;更重要的是建立长久的、有价值的关系。 01. 私域的本质是客户经营 我们为什么要做私域&#xff1f;其实就是为了扩量提效&#xff0c;提复购加利润&#xff0c;把客户变成真正的自…

【LeetCode热题100】--199.二叉树的右视图

199.二叉树的右视图 思路&#xff1a; 使用根->右->左方法进行遍历节点&#xff0c;同时记录层数&#xff0c;将当前层数与记录的层数进行比较&#xff0c;如果当前层数大于记录的层数&#xff0c;添加该元素&#xff0c;若当前层数小于记录的层数&#xff0c;说明该层已…

博途1200/1500 ALT指令

SMART PLC的ALT指令实现代码,请查看下面文章博客 SMART PLC如何构造ALT指令_smart200类似alt指令-CSDN博客单按钮启停这些老生常谈的问题,很多人感兴趣。这篇博文讨论下不同的实现方法,希望对大家有所帮助。指令虽然简单,但是在编程的时候合理使用对我们高效率编程帮助还是…

蓝桥杯每日一题2023.10.5

3420. 括号序列 - AcWing题库 题目描述 题目分析 对于这一我们需要有前缀知识完全背包 完全背包的朴素写法&#xff1a; #include<bits/stdc.h> using namespace std; const int N 1010; int n, m, v[N], w[N], f[N][N]; int main() {cin >> n >> m;fo…

10链表-单链表构造LinkedList

目录 LeetCode之路——707. 设计链表 分析&#xff1a; Code&#xff1a; LeetCode之路——707. 设计链表 你可以选择使用单链表或者双链表&#xff0c;设计并实现自己的链表。 单链表中的节点应该具备两个属性&#xff1a;val 和 next 。val 是当前节点的值&#xff0c;n…

solidity 合约转java

Generate a Java Wrapper from your Smart Contract Solidity Gradle Plugin - Web3j web3j / web3j-maven-plugin GitLab

mysql面试题16:说说分库与分表的设计?常用的分库分表中间件有哪些?分库分表可能遇到的问题有哪些?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说说分库与分表的设计? 在MySQL中,分库与分表是常用的数据库水平扩展技术,可以提高数据库的吞吐量和扩展性。下面将具体讲解MySQL中分库与分表…

C++ - 布隆过滤器

前言 之前介绍了 位图&#xff0c;位图在判断某一个 数是否存在&#xff0c;或者在计算某个数是否出现 一次 或者 两次这些问题之上有着非常高效的实现复杂度&#xff0c;它的时间复杂度 可以达到 O&#xff08;1&#xff09;&#xff0c;因为都是逻辑判断和 &#xff0c;常数…

【重拾C语言】五、模块化程序设计——函数(定义、调用、参数传递、结果返回、函数原型;典例:打印字符图形、验证哥德巴赫猜想)

目录 前言 五、模块化程序设计——函数 5.1 计算三角形的重心 5.2 函数 5.2.1 函数定义 5.2.2 函数调用 a. 函数调用的形式和过程 b. 参数传递 值传递 指针传递 c. 函数结果返回 5.2.3 函数原型&#xff08;先调用后定义&#xff09; 5.3 程序设计实例 5.3.1 打印…

React18入门(第二篇)——React18+Ts项目配置husky、eslint、pretttier、commitLint

前言 我的项目版本如下&#xff1a; React&#xff1a; V18.2.0Node.js: V16.14.0TypeScript&#xff1a;最新版工具&#xff1a; VsCode 本文将采用图文详解的方式&#xff0c;手把手带你快速完成在React项目中配置husky、prettier、commitLint&#xff0c;实现编码规范的统…

基于SpringBoot的ElasticSearch操作(超详细教程)

一、ElasticSearch 简介 1、简介 ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多员工能力的全文搜索引擎&#xff0c;基于 RESTful web 接口。Elasticsearch 是用 Java 语言开发的&#xff0c;并作为 Apache 许可条款下的开放源码发布&#xff0c;是一种…

天地无用 - 修改朋友圈的定位: 高德地图 + 爱思助手

1&#xff0c;电脑上打开高德地图网页版 高德地图 (amap.com) 2&#xff0c;网页最下一栏&#xff0c;点击“开放平台” 高德开放平台 | 高德地图API (amap.com) 3&#xff0c;在新网页中&#xff0c;需要登录高德账户才能操作。 可以使用手机号和验证码登录。 4&#xff0c…

经典算法-----汉诺塔问题

前言 今天我们学习一个老经典的问题-----汉诺塔问题&#xff0c;可能在学习编程之前我们就听说过这个问题&#xff0c;那这里我们如何去通过编程的方式去解决这么一个问题呢&#xff1f;下面接着看。 汉诺塔问题 问题描述 这里是引用汉诺塔问题源自印度一个古老的传说&#x…

微信公众号模板消息First,Remark字段不显示,备注字段不见了

今天在开发公众号过程中有个需求发模板消息我设置的如下 成绩单打印通知&#xff01;姓名&#xff1a;{{name.DATA}} 学号&#xff1a;{{stuid.DATA}}状态&#xff1a;{{status.DATA}}时间&#xff1a;{{date.DATA}} 备注&#xff1a;{{remark.DATA}} 然后发完通知发现《…

AtCoder Beginner Contest 232(A-G)

A - QQ solver (atcoder.jp)直接按题意模拟即可。 B - Caesar Cipher (atcoder.jp)按题意模拟即可 C - Graph Isomorphism (atcoder.jp)按题意模拟即可 D - Weak Takahashi (atcoder.jp) 一个非常套路的网格dp E - Rook Path (atcoder.jp) &#xff08;1&#xff09;题意 有…

Python的NumPy库(一)基础用法

NumPy库并不是Python的标准库&#xff0c;但其在机器学习、大数据等很多领域有非常广泛的应用&#xff0c;NumPy本身就有比较多的内容&#xff0c;全部的学习可能涉及许多的内容&#xff0c;但我们在这里仅学习常见的使用&#xff0c;这些内容对于我们日常使用NumPy是足够的。 …

5个适合初学者的初级网络安全工作,网络安全就业必看

前言 网络安全涉及保护计算机系统、网络和数据免受未经授权的访问、破坏和盗窃 - 防止数字活动和数据访问的中断 - 同时也保护用户的资产和隐私。鉴于公共事业、医疗保健、金融以及联邦政府等行业的网络犯罪攻击不断升级&#xff0c;对网络专业人员的需求很高&#xff0c;这并…