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标签实现文…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
