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

【Shell】Shell编程之免交互

免交互:不需要人为控制就可以完成的自动化操作

自动化运维

Shell脚本和免交互是一个概念,但是两种写法

here document        使用i/o重定向的方式将命令的列表提供给交互式的程序或者命令

                                是一种标准输入,只能接受正确的指令或命令(错误的不行)

格式:
命令 <<标记
...
...
标记
注意事项:

1.标记可以使用合法的字符(通常使用EOF,也可以自定义)

2.结尾的标记一定要顶格写,并于开头的标记一致;后标记的前后不能有任何字符

3.如果开头的标记前有空格,这个空格会被自动省略

结合免交互实现重定向输出到指定文件

cat <<EOF>> test.txt
> 1
> 2                                                        
> 3
> 4
> 5
> EOF[root@test1 opt]# ls
test.txt  work7.15
[root@test1 opt]# cat test.txt 
1
2
3
4
5

         免交互创建文件并写入内容

[root@test1 opt]# vim test.sh #!/bin/bash
file="test.txt"
i="school"
cat > $file <<EOF
I am goning to $i
EOF[root@test1 opt]# sh test.sh 
[root@test1 opt]# ls
test.sh    test.txt
[root@test1 opt]# cat test.txt 
I am goning to school
[root@test1 opt]# 

       去掉每行之前的tab字符

[root@test opt]# vim test.txt cat <<-'EOF'ky30boge
EOF[root@test opt]# sh test.txt 
ky30boge

        多行注释

        ***Expect免交互

tcl基础语言之上的一种工具;自动化测试和控制,主要是在脚本中解决人机交互的问题

which expect        查看服务的位置
rpm -qa expect      查看服务是否安装
转义符:\n    换行\t    制表符,TAB\r    回车\b    删除键
基本命令格式:
#!/usr/bin/expect        #使用时需要先在开头生命使用expect

执行方式:

1.必须赋权执行;给权限(chmod 777)

2.不能用 bashsh        只能使用./

语法:
spawn    后面通常跟一个linux的执行命令,表示开启一个会话,启动一个进程,并且跟踪后续的交互信息
spawn passwd 用户名        #跟踪(修改用户密码)命令的执行情况

expect    捕获上一次执行的命令中,是否包含指定的字符串,如果有则立即返回,否则等待超时时间(默认10秒),超时时间自动退出
expect只能捕获有spawn启动的进程输出

        send向进程发送字符串,用于模拟用户输入;该命令不能自动回车,一般后面要加一个回车键(/r或/n)

        第一种写法:
expect "密码" {send "abc123\r"}
        第二种写法:
expect ""
send "abc123\r"
        第三种写法:多分支结构

多分支语句,只要匹配一个就会执行相应的send语句,然后就退出expect

expect
{
"密码1" {send "123\r"}
"密码2" {send "123\r"}
"密码3" {send "123\r"}
}

结束符:

expect eof        会切换回之前的终端
interact          保留当前终端不变

设置超时时间

set timeout5        获取不到,5秒后会自动退出
set timeout-1       -1表示永不超时

exp_continue

可以在expect判断之后,继续匹配expect捕获的其他内容,类似于脚本中continue,表示允许继续向下执行命令

exp_contine        结束语句不能直接使用expect eof,否则会报错

expect{"(yes/no)" {send "yes\r";exp_continue}"password" {send "123\r"}
}send_user        回显信息,相当于echo,跟上用户想要输出的内容
send_user ok     打印ok

接收参数:类似于shell当中的位置变量$1 $2

set 变量名 [lindex $argv 0] $1
set 变量名 [lindex $argv 1] $2

嵌入模式:涉及到终端切换时,最好不要用嵌入模式写

#!/bin/bash
user=$1
passwd=$2
useradd $user
/usr/bin/expect <<-EOF
spawn passwd $user
expect ""
send "${passwd}\r"
expect ""
send "${passwd}\r"
interact
EOF

ssh远程登录

通过免交互脚本实现自动远程登录

#!/usr/bin/expect
set ip 192.168.220.30            #指定远程登录的IP地址
set user root                    #指定登录root用户
set password 123                 #设定密码为123
set timeout 5                    #设定超时时间
spawn ssh $user@$ip
expect {"yes/no" {send "yes\r";exp_continue}"password" {send "$password\r"}
}
expect eof

传参自动登录

#!/usr/bin/expect
set name [lindex $argv 0]
set ip [lindex $argv 1]
set password [lindex $argv 2]
set timeout 5
spawn ssh $name@$ip
expect {"refused" {send_user "访问被拒绝\r"}"No route to host" {send_user "主机名或者IP地址有误!\n"}"yes/no" {send "yes\r";exp_continue}"password" {send "$password\r"}
}
expect eof

实验:

用免交互的方式给硬盘分区,格式化,和挂载

相关文章:

【Shell】Shell编程之免交互

免交互&#xff1a;不需要人为控制就可以完成的自动化操作 自动化运维 Shell脚本和免交互是一个概念&#xff0c;但是两种写法 here document 使用i/o重定向的方式将命令的列表提供给交互式的程序或者命令 是一种标准输入&#xff0c;只能接受正确的指令或命令&#x…...

从Vue2到Vue3【七】——Vue2中响应式原理的实现及其缺陷

系列文章目录 内容链接从Vue2到Vue3【零】Vue3简介从Vue2到Vue3【一】Composition API&#xff08;第一章&#xff09;从Vue2到Vue3【二】Composition API&#xff08;第二章&#xff09;从Vue2到Vue3【三】Composition API&#xff08;第三章&#xff09;从Vue2到Vue3【四】C…...

用C语言实现堆排序算法

1.设计思路 排序的思想将一个数组按递增的顺序进行排序&#xff0c;将数组的第一个位置空下&#xff08;下标为0&#xff09;&#xff0c;因为会导致子节点和本身同一个结点&#xff08;i和2i一致&#xff09;&#xff0c;每次堆排序在下标1的位置放上了最大值&#xff0c;然后…...

tauri在github上进行自动更新打包并发版过程,实战操作避坑

从网上找了很多很多的文章&#xff0c;结果还是入坑了&#xff0c;一个问题找了一天才解决&#xff1a; Error A public key has been found, but no private key. Make sure to set TAURI_PRIVATE_KEY environment variable. 596 ELIFECYCLE  Command failed with exit code…...

css中flex后文本溢出的问题

原因&#xff1a; 为了给flex item提供一个合理的默认最小尺寸&#xff0c;flex将flex item的min-width 和 min-height属性设置为了auto flex item的默认设置为&#xff1a; min-width&#xff1a; auto 水平flex布局 min-height&#xff1a;auto 垂直flex布局 解决办法&…...

restful接口设计规范[仅供参考]

1. 域名 应该尽量将API部署在专用域名之下。 https://api.example.com 如果确定API很简单&#xff0c;不会有进一步扩展&#xff0c;可以考虑放在主域名下。 https://www.example.org/api/2. 版本&#xff08;Versioning&#xff09; 应该将API的版本号放入URL。 http://…...

Metabase 远程代码执行(CVE-2023-38646)

漏洞描述 Metabase是一款开源数据分析及可视化工具。它可允许用户连接至各种不同类型数据源,未经身份认证的攻击者可利用本漏洞在服务器上以运行 Metabase服务器的权限进行任意命令执行。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩…...

【TiDB理论知识 07】SQL执行流程

一 DML语句读写流程 1 DML语句读流程概要 用户发出SQL 被协议层接收 Protocal Layer 通过PD获取时间戳 parse模块 解析SQL&#xff0c;通过词法解析 与 语法解析 生成AST语法树 编译SQL Compile模块 ,区分点查 与 非点查&#xff0c;生成执行计划 发送给Executor,从TIKV获…...

微服务——服务异步通讯RabbitMQ

前置文章 消息队列——RabbitMQ基本概念容器化部署和简单工作模式程序_北岭山脚鼠鼠的博客-CSDN博客 消息队列——rabbitmq的不同工作模式_北岭山脚鼠鼠的博客-CSDN博客 消息队列——spring和springboot整合rabbitmq_北岭山脚鼠鼠的博客-CSDN博客 目录 Work queues 工作队列…...

事件冒泡、事件捕获和事件委托

原文合集地址如下&#xff0c;有需要的朋友可以关注 本文地址 合集地址 什么是事件冒泡、事件捕获和事件委托&#xff1f; 事件冒泡&#xff08;Event Bubbling&#xff09;、事件捕获&#xff08;Event Capturing&#xff09;和事件委托&#xff08;Event Delegation&…...

WEB 典型安全功能说明

WEB 典型安全功能 认证Authentication 认证是指通过验证用户的身份来确认用户是否有权访问某个系统或资源。在Web安全中&#xff0c;认证是非常重要的一环&#xff0c;它可以防止未经授权的访问&#xff0c;保护用户的数据和系统的安全。 登录 登录是用户认证的常见方式之一…...

SQL编译优化原理

最近在团队的OLAP引擎上做了一些SQL编译优化的工作&#xff0c;整理到了语雀上&#xff0c;也顺便发在博客上了。SQL编译优化理论并不复杂&#xff0c;只需要掌握一些关系代数的基础就比较好理解&#xff1b;比较困难的在于reorder算法部分。 文章目录 基础概念关系代数等价 j…...

qt signal slots lambda

这里用到了qt的版本检测 连接 Combox的currentIndexChanged事件 emit来触发处理的事件 &#xff0c;进行业务或逻辑处理 这样的写法是lambda表达式的写法&#xff0c;和c#中的 (obj)>{ //todo } 类同 [](int indx){ //todo } #if QT_VERSION > QT_VERSION_CHECK(5,7,0)c…...

Spring【声明式事务】

事务简介 把一组业务当成一个业务来做&#xff1b;要么都成功&#xff0c;要么都失败&#xff01;事务在项目开发中&#xff0c;十分重要&#xff0c;涉及到数据一致性的问题&#xff0c;需要十分注意&#xff01;确保完整性和一致性&#xff01; 事务的ACID原则&#xff1a;…...

【雕爷学编程】MicroPython动手做(17)——掌控板之触摸引脚2

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…...

pytorch 中 view 和reshape的区别

在 PyTorch&#xff08;一个流行的深度学习框架&#xff09;中&#xff0c; reshape 和 view 都是用于改变张量&#xff08;tensor&#xff09;形状的方法&#xff0c;但它们在实现方式和使用上有一些区别。下面是它们之间的主要区别&#xff1a; 实现方式&#xff1a; reshap…...

认识数组指针

文章目录 数组指针的定义数组指针的应用 数组指针的定义 类比 整形数组——存放整形的数组 指针数组——存放指针的数组 整形指针——存放整形地址的指针 数组指针——存放数组地址的指针 深度理解 在之前我们知道&#xff1a;数组名表示首元素地址&#xff0c;但是有&#xf…...

SSM面试题-Spring容器的启动流程

解答: 1. BeanDefinitionReader读取配置文件(xml yml properties),创建BeanDefinition(存储bean的定义信息) 2. 配置文件读取成功后&#xff0c;将相应的配置转换成 BeanDefinition 的对象实例保存在DefaultListableBeanFactory#beanDefinitionMap 中 3. 根据配置的 BeanFacto…...

Vue 3:玩一下web前端技术(八)

前言 本章内容为VUE基础与相关技术讨论。 上一篇文章地址&#xff1a; Vue 3&#xff1a;玩一下web前端技术&#xff08;七&#xff09;_Lion King的博客-CSDN博客 下一篇文章地址&#xff1a; &#xff08;暂无&#xff09; 一、基础 官方文档&#xff1a;创建一个 Vue…...

AI绘画Stable Diffusion原理之Autoencoder-Latent

前言 传送门&#xff1a; stable diffusion&#xff1a;Git&#xff5c;论文 stable-diffusion-webui&#xff1a;Git Google Colab Notebook&#xff1a;Git kaggle Notebook&#xff1a;Git 今年AIGC实在是太火了&#xff0c;让人大呼许多职业即将消失&#xff0c;比如既能帮…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...