Linux:Shell编程之免交互
目录
绪论
1、here Document免交互
1.1 格式
1.2 cat结合免交互实现重定向输出到指定文件
1.3 变量替换
2、Expect免交互
2.1 三种写法
3、免交互实现普通用户切换root
3.1 send_user
4、接收参数
5、嵌入执行模式
6、ssh远程登录
绪论
免交互:不需要人为控制就可以完成的自动化操作(自动化运维)
1、here Document免交互
使用i/o(输入/输出)重定向的方式,将命令的列表提供给交互式的程序或者命令
cat read 是一种标准输入,只能接受正确的指令或者命令
1.1 格式
命令 <<标记
...
...
标记
eg:
注意事项
· 标记可以使用人以合法字符(通常用EOF)
· 结尾的标记一定要顶格写,前面不能有任何字符
· 结尾的标记后面,也不能有任何字符,包括空格
· 如果开头的标记前有空格,这个空格会被自动省略
eg:read i <<EOF read只能输入一次
>123
>EOF
echo $i
1.2 cat结合免交互实现重定向输出到指定文件

1.3 变量替换
vim test.sh进入编辑
#!/bin/bash
file="test.txt"
i="school"
cat > $file <<EOF
I am going to $i
EOF 保存退出
2、Expect免交互
tcl语言基础之上的一种工具,自动化测试和控制,在脚本中解决交互的问题
转义符:\n 换行 \t制表符,tab键 \r回车 \b退格键,就是删除键
基本命令格式: #!/usr/bin/expect

语法:
· spawn后面通常跟一个linux的执行命令,表示开启一个会话,启动一个进程,并且跟踪后续的交互信息
· expect,捕获,上一次执行的命令中,是否包含指定的字符串,如果有立即返回,否则等待超时,自动退出(默认超时时间为10s)
· expect 只能捕获由spawn启动的进程输出
· send 向进程发送字符串,用于模拟用户的输入,该命令不能自动回车,一般后面加一个回车键:\r 或者\n
2.1 三种写法
第一种写法
#!/use/bin/expect
set timeout 5
spawn passwd lisi
expect "新的密码"
send "abc123\r"
expect "重新输入新的密码"
send "abc123\r"
expect eof第二种写法
#!/use/bin/expect
set timeout 5
spawn passwd lisi
expect "New password" {send "123\r"}
expect "Retype new password" {send "123\r"}
expect eof第三种写法:多分支结构
#!/use/bin/expect
set timeout 5
spawn passwd lisi
expect{
"密码1"{send "abc123\r"}
"密码2"{send "abc123\r"}
"密码3"{send "abc123\r"} 只要匹配其中一个情况,执行相应的send语句,然后退出}
结束符
expect eof 会切换回之前的终端
interact 留在当前终端不变
set 设置超市等待时间,默认是10s
set timeout 5 -1()则表示永不超时
3、免交互实现普通用户切换root
vim qiehuan.sh
#!/usr/bin/expect
set timeout 5
spawn su root
expect "passwd"
send "123\r"
expect eof 保存退出
chmod 777 目录
su - lisi
sh qiehuan.sh
expect_continue 可以在expect判断之后,继续匹配expect,捕获的其他内容,类似于脚本中continue,表示允许继续向下执行指令
使用expect_continue的结束语不能使用expect eof
expect {
"(yes/no)" {send "yes\r";exp_continue}
"passwd" {send"123\r"}
}
3.1 send_user
send_user 会先信息,相当于echo跟上用户想要输出的内容
4、接收参数
类似于shell当中的位置变量$1 $2
set hostname [linux $argv 0] $1
set password [linux $argv 0] $2
eg:
set timeout 5
set usr [lindex $argv 0]
set passwd [lindex $argv 1]
spawn su - $user
expect "密码" (或者passwd)
send "$passwd\r"
expect "]$"
send_user "普通用户"
expect "]#"
send_user "管理员"
interact
保存退出
./qiehuan lisi 123
5、嵌入执行模式
如果涉及终端切换,最好不要用嵌入模式
将expect过程融入shell中,方便执行和处理
eg:vim useradd.sh
#!/bin/bash
user=$1
passwd=$2
useradd $user
/usr/bin/expect << -EOF
#expect 开始表示
spawn passwd $user
expect "新的*"
send "${passwd}\r"
expect "重新*"
send "${passwd}\r"
expect eof
EOF
保存退出
sh useradd.sh lisi 123
6、ssh远程登录
#!/usr/bin/expect
set ip 192.168.233.30 #指定远程登录的ip地址
set user root
#指定为root用户
set password 123
#设定密码为123
set timeout 5spawn ssh $user@$ip
expect {"yes/no" isend "yes\r" ;exp_continue}
"password" isend " $password\r" }
}
expect eof保存退出
chmod 777 ssh.sh
./ssh.sh
6.1 通过传参的方式实现
#!/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
保存退出
./ssh.sh root 20.0.0.30 123
相关文章:
Linux:Shell编程之免交互
目录 绪论 1、here Document免交互 1.1 格式 1.2 cat结合免交互实现重定向输出到指定文件 1.3 变量替换 2、Expect免交互 2.1 三种写法 3、免交互实现普通用户切换root 3.1 send_user 4、接收参数 5、嵌入执行模式 6、ssh远程登录 绪论 免交互:不需要人…...
最强自动化测试框架Playwright(18)- 执行js脚本
page.evaluate() API 可以在网页上下文中运行 JavaScript 函数,并将结果带回 Playwright 环境。 href page.evaluate(() > document.location.href) 如果结果是 Promise 或函数是异步的,则计算将自动等待,直到解析…...
阿里云云主机_ECS云服务器_轻量_GPU_虚拟主机详解
阿里云云主机分为云虚拟主机、云服务器ECS、轻量应用服务器、GPU云服务器、弹性裸金属服务器、专有宿主机、FPGA云服务器、高性能计算E-HPC、无影云电脑等,阿里云百科来详细说下阿里云云主机详解: 目录 阿里云云主机 云服务器ECS 轻量应用服务器 云…...
[QT编程系列-41]:Qt QML与Qt widget 深入比较,快速了解它们的区别和应用场合
目录 1. Qt QML与Qt widget之争 1.1 出现顺序 1.2 性能比较 1.3 应用应用领域 1.4 发展趋势 1.5 QT Creator兼容上述两种设计风格 2. 界面描述方式的差别 3. QML和Widgets之间的一些比较 4. 选择QML和Widgets之间的Qt技术时,可以考虑以下几个因素ÿ…...
springboot 使用zookeeper实现分布式锁
一.添加ZooKeeper依赖:在pom.xml文件中添加ZooKeeper客户端的依赖项。例如,可以使用Apache Curator作为ZooKeeper客户端库: <dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</…...
ViewUI表格Table嵌套From表单-动态校验数据合法性的解决方法
项目场景: 项目需求:在表格中实现动态加减数据,并且每行表格内的输入框,都要动态校验数据,校验不通过,不让提交数据,并且由于表格内部空间较小,我仅保留红边框提示,文字…...
服务器安装Tomcat
下载Tomcat 下载地址在这: Tomcat官网 下载完成以后把压缩包上传到服务器中(我传到了www/java),进行解压(解压到),如果没有进行指定解压到哪里,默认是到root文件夹中 tar -zxvf /www/java/apache-tomcat-9.0.103.tar.…...
【Apollo】自动驾驶的平台背景,平台介绍
作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖…...
docker 安装与配置
一、 环境准备 IP主机名操作系统版本docker版本192.168.168.128master01CentOS Linux release 7.9.2009 (Core)docker-20.10.15.tgz 二、安装 # 安装包获取 cd /root wget -c https://download.docker.com/linux/static/stable/x86_64/docker-20.10.15.tgz [rootmaster01 ~]…...
Titanic--细节记录三
目录 image sklearn模型算法选择路径图 留出法划分数据集 ‘留出’的含义 基本步骤和解释 具体例子 创造一个数据集 留出法划分 预测结果可视化 分层抽样 设置方法 划分数据集的常用方法 train_test_split 什么情况下切割数据集的时候不用进行随机选取 逻辑回归…...
k8s-----集群调度
目录 一:调度约束 二:Pod 启动创建过程 三:k8s调度过程 1、Predicate 有一系列的常见的算法 2、常见优先级选项 3、指定调度节点 (1)nodeName指定 (2)nodeSelector指定 四:亲和…...
01-Spark环境部署
1 Spark的部署方式介绍 Spark部署模式分为Local模式(本地模式)和集群模式(集群模式又分为Standalone模式、Yarn模式和Mesos模式) 1.1 Local模式 Local模式常用于本地开发程序与测试,如在idea中 1.2 Standalone模…...
HOT86-单词拆分
leetcode原题链接:单词拆分 题目描述 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1:…...
开源数据集分类汇总(医学,卫星,分割,分类,人脸,农业,姿势等)
本文汇总了医学图像、卫星图像、语义分割、自动驾驶、图像分类、人脸、农业、打架识别等多个方向的数据集资源,均附有下载链接。 该文章仅用于学习记录,禁止商业使用! 1.医学图像 疟疾细胞图像数据集 下载链接:http://suo.nz/2V…...
Linux:Firewalld防火墙
目录 绪论 1、firewalld配置模式 2、预定义服务:系统自带 3端口管理 绪论 firewalld 防火墙,包过滤防火墙,工作在网络层,centos7自带的默认的防火墙 作用是为了取代iptables 1、firewalld配置模式 运行时配置 永久配置 i…...
mysql死锁;锁表排查
概述 有时候提前终止了navicat执行线程,但是实际mysql还在执行这个线程, 需要通过mysql本身去终止. mysql:8.0 三板斧第一斧 捞点网上线程现成的执行命令 1.查询是否锁表 show OPEN TABLES where In_use > 0;2.查询进程(如果您有SUP…...
YAMLException: java.nio.charset.MalformedInputException: Input length = 1
springboot项目启动的时候提示这个错误:YAMLException: java.nio.charset.MalformedInputException: Input length 1 根据异常信息提示,是YAML文件有问题。 原因是yml配置文件的编码有问题。 需要修改项目的编码格式,一般统一为UTF-8。 或…...
无需求文档,保障测试质量的可行性做法
这篇文章,内容是:无需求文档的情况下,作为一个测试人员,应该如何做 ,才能保障测试质量不出问题,以及如何不背锅 ? 001 没有需求文档3种可能情况 : 1、公司都没产品经理࿰…...
SpringBoot项目学习笔记
第一章 SpringBoot有哪些优点? Spring Boot作为Java开发的框架和工具集,具有许多优点,这些优点有助于简化开发过程并提高效率。以下是一些主要的优点: 简化配置: Spring Boot采用约定优于配置的原则,通过自…...
如何在Vue表单处理中实现表单字段的文件下载
Vue.js 是一种流行的JavaScript框架,用于构建用户界面。在Vue应用中,我们经常需要处理表单操作,其中一个常见需求是实现文件下载。以下介绍如何在Vue表单处理中实现表单字段的文件下载,大家共同交流。 一、使用HTML的a标签实现文…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
