如何实现免交互
如何实现免交互
一、免交互
交互:我们发出指令控制程序的运行,程序在接收到指令之后按照指令的效果做出对应的反应
免交互:间接的通过第三方的方式把指令传送给程序,不用直接的下达指令
Here Document免交互:这是命令行格式,也可以写在脚本当中,通过I/O重定向的方式将命令的列表传送给交互式程序或命令。是标准输入的一种替代品,代替了人工的传输方式。
语法格式:
命令 (linux的系统命令)<<标记
内容1
内容2
内容3
标记
注意事项:
1、可以是任意合法字符(一般不用特殊字符,不以数字开头,通常以EOF作为默认的标记位)
2、结尾的标记位一定要顶格写,且前面不能有任何字符,空格也不行
3、结尾的标记后面也不能有任何字符,包括空格
4、开头的标记前后的空格都会被省略掉
举例
1.1
wc -l <<xy102
> 123
> 456
> 789
> xy102
3 #表示三行
1.2
read i <<EOF
> test1
> EOF
echo $i
test1
1.3 创建用户和密码
passwd xiaodai <<EOF
> 123
> 123
> EOF
1.4 在命令行往文本输入内容
cat <<EOF>>test2.txt
> aaa
> bbb
> ccc
> EOF
cat >>test2.txt <<EOF
> aaa
> bbb
> ccc
> EOF
cat test2.txt
aaa
bbb
ccc
1.5 tee命令在EOF结束后直接打印内容
tee test3.txt <<EOF
> 1
> 2
> EOF
1
2
ls
cat test3.txt
1
2
引入变量
vim test1.sh
#!/bin/bash
file="test1.sh"
i=school
cat > $file <<EOF
I am going to $i
EOF
cat test1.sh
I am going to school
整体变量赋值
# 整体变量赋值
vim test2.sh
#!/bin/bash
var="Great! I am going to school"
myvar=$(cat <<EOF ### myvar=$(cat <<'EOF'
this is monday
$var
EOF
)
echo $myvar ### this is monday $var
sh test2.sh
this is monday Great! I am going to school
重定向中打印tab键和空格键
vim test2.sh
#!/bin/bash
cat <<-'EOF'test1 # 三次tab键 test2 #一次空格
EOF
sh test2.sh
test1test2
二、Expect实现免交互
用tcl语言写的一个工具,主要用自动化控制和测试,解决shell脚本的交互问题。
安装expect
rpm -q expect
yum -y install expect
转义符:
\n:换行
\r:回车
\t:相当于一个tab键
\b:表示退格,删除
举例
1.1 指定用户和密码vim passwd.sh
#!/usr/bin/expect
#声明解释器,不再是默认的bash。需要声明
set timeout 5
#set相当于设置,timeout超时时间,expect有一个默认的超时时间10秒,设置超时时间5秒。
#也可以作为设置变量spawn passwd xiaodai
#spawn后面用来声明需要执行的命令,开启会话过程,并且跟踪后续的交互信息expect "新的 密码:"
#捕获需要执行的命令行,只要能够捕获即可,不需要完整的,可以*代表所有send "abc123\r"
输入指定代码expect "重新输入新的 密码:"
send "abc123\r"#最后一定要有结束语,下面两个都可作为结束语,但是只能选一个!
expect eof
#交互指令结束之后,会退回原用户,切换回之前的用户
interact
# 留着当前用户,不会动
chomd 777 passwd.sh
./passwd.sh
1.2 传参表示免交互 vim test1.sh
#!/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,即打印指定内容
#结束语
expect eof
# 使用expect eof,会跳转ok,再跳转命令行
#interact
# 使用interact,只跳转ok,不跳转命令行
chmod 777 test2.sh
su - test1
cd /opt
./test2.sh dn abc123
1.3 嵌套模式
在shell当中加入expect。设计到环境切换的场景不建议使用嵌套。如 ssh 、su不适合使用嵌入模式
1.3.1 vim qiantao.sh
#!/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
chmod 777 qiantao.sh
./qiantao.sh 用户名 密码
1.3.2 ssh免密登录(root@192.168.100.10)
vim ssh.sh
#!/bin/bash
set ip 192.168.100.10
set user root
set password 123
set timeout 5#进入命令行交互
spawn ssh $user$ipexpect {"yes/no" {send "yes\r";exp_continue}
#这里需要捕获两次,表示该项被匹配之后,继续匹配其他的指定内容,类似于循环的continue#允许expect语句继续向下执行"*password" {send "$password\r"}
}
interact
chmod 777 ssh.sh
./ssh.sh
1.3.3 传参实现ssh远程控制
#!/usr/bin/expect
set timeout 5
set hostname [lindex $argv 0]
set password [lindex $argv 1]#进入命令格式
spawn ssh $hostnameexpect {"No route to host" {send_user "主机名/ip有误\n"}"Connection refused" {send_user "ssh连接拒接\n"}"(yes/no)" {send "yes\r";exp_continue}"password" {send "$password\r"}
}
interact
chmod 777 test5.sh
./test5.sh root@192.168.100.11
要求:免交互实现硬盘分区,分一个区即可,分完之后,第一步要格式化,第二步实现挂载,挂载(手动挂载),然后在这个分区的挂载创建一个文件,写入内容"学习真好",并且打印出结果,以上在一个脚本里面完成。
提示:使用嵌入模式。
vim cipan.sh
#!/bin/bash
/usr/bin/expect <<-EOF
spawn fdisk /dev/sdb
expect "命令(输入 m 获取帮助):"
send "n\r"
expect "*Partition type:"
send "\r"
expect "*Select (default p): "
send "\r"
expect "*分区号 (1-4,默认 1):"
send "\r"
expect "*起始 扇区 (2048-41943039,默认为 2048):"
send "\r"
expect "*Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):"
send "\r"
expect "命令(输入 m 获取帮助):"
send "w\r"
interact
EOF
mkfs.xfs -f /dev/sdb1
mkdir /data
mount /dev/sdb1 /data
echo "学习真好" > /data/123.txt
cat /data/123.txt
chmod 777 cipan.sh
./cipan.sh
学习真好
相关文章:
如何实现免交互
如何实现免交互 一、免交互 交互:我们发出指令控制程序的运行,程序在接收到指令之后按照指令的效果做出对应的反应 免交互:间接的通过第三方的方式把指令传送给程序,不用直接的下达指令 Here Document免交互:这是命…...
浏览器userAgent大全及JS判断当前APP
文章目录 userAgent 检测PC/Mobile 浏览器 userAgent 大全Mobile APP userAgent 大全JS 判断当前 APP userAgent 检测 https://useragent.buyaocha.com/ PC/Mobile 浏览器 userAgent 大全 系统浏览器User-Agent字符串MacChromeMozilla/5.0 (Macintosh; Intel Mac OS X 10_12…...
11.异常(java版)
异常的概念 在日常开发时 代码在程序运行过程中 难免会出现一些其奇奇怪怪的问题 有时通过代码很难去控制 比如:数据格式不对、网络不流畅、内存报警等 在Java中 将程序执行过程中发生的不正常行为称为异常 比如我们之前写代码时经常会遇到的: 1.算术…...
单片机学习记录
一,单片机及开发板介绍 1,基本介绍 单片机,英文Micro Controller Unit,简称MCU内部集成了CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能单片机的任务是信息采集(依靠传感器)、处理(依靠CPU)和硬件设备(…...
flask的基本使用1
【 一 】Flask介绍 python 界的web框架 -Django:大而全,使用率较高 :https://github.com/django/django -FastAPI:新项目选择使用它:https://github.com/tiangolo/fastapi -flask:公司一些小项目使用它&a…...
如何编写时区源文件
0、背景 ① 修改TZ环境变量改变时区不能立即生效。要求设置时区后立即生效,只能用修改/etc/localtime方式。 ② 原文作者 Bill Seymour,想要查看原文,点击官网地址https://www.iana.org/time-zones下载 zic 源码,源码目录中的 tz…...
植物大战僵尸杂交版v2.1最新整合版,附PC端+安卓端+iOS端安装包+修改器+安装教程!
嘿,大家好,我是阿星,今天要跟大家聊聊一款游戏,它不是那种让人眼花缭乱的大制作,也不是那种能让人回味无穷的艺术作品,但它在阿星心里,绝对是神作中的佼佼者。没错,它就是《植物大战…...
【5G射频基本架构】
平台框架 平台演进及搭配 5G NR频谱 NSA/SA/ENDC...
4.任务调度
1.基本知识 2.任务的状态 FreeRTOS中任务共存在4种状态:Running 运行态 当任务处于实际运行状态称之为运行态,即CPU的使用权被这个任务占用(同一时间仅一个任务处于运行态)。Ready 就绪态 处于就绪态的任务是指那些能够运行&…...
Github 2024-06-27 Go开源项目日报Top10
根据Github Trendings的统计,今日(2024-06-27统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Ollama: 本地大型语言模型设置与运行 创建周期:248 天开发语言:Go协议类型:MIT LicenseStar数量:42421 个Fork数量:2724 次关注人…...
【D3.js in Action 3 精译】1.2.2 可缩放矢量图形(一)
译注 由于 1.2.2 小节介绍 SVG 的篇幅过多,为了方便查阅,后续将分多个小节依次进行翻译。为了确保整个 1.2.2 小节的完整性,特意将上一篇包含的 SVG 小节的内容整理出来重新编排。敬请留意。 1.2.2 SVG - 可缩放矢量图形 可伸缩矢量图形&…...
「C系列」C 排序算法
文章目录 一、C 排序算法二、C 排序算法-应用场景1. 冒泡排序(Bubble Sort)2. 选择排序(Selection Sort)3. 插入排序(Insertion Sort)4. 快速排序(Quick Sort)5. 归并排序࿰…...
Power BI可视化表格矩阵如何保持样式导出数据?
故事背景: 有朋友留言询问:自己从Power BI可视化矩阵表格中导出数据时,导出的表格样式会发生改变,需要线下再手动调整,重新进行透视组合成自己想要的格式。 有没有什么办法让表格导出来跟可视化一样? Po…...
《UDS协议从入门到精通》系列——图解0x35:请求上传
《UDS协议从入门到精通》系列——图解0x35:请求上传 一、简介二、数据包格式2.1 服务请求格式2.2 服务响应格式2.2.1 肯定响应2.2.2 否定响应 三、通信示例 Tip📌:本文描述中但凡涉及到其他UDS服务的,将陆续提供链接跳转方式以便快…...
Tailwindcss 扩展默认配置来自定义颜色
背景 项目里多个Tab标签都需要设置同样的背景颜色#F1F5FF,在集成tailwindcss之前就是重复该样式,如下图: .body {background-color: #f1f5ff; }集成tailwindcss时,我们希望在class中直接设置该背景色,但是默认的tai…...
C++设计模式---享元模式
1、介绍 原理: 享元模式是一种主要用于减少创建对象的数量,以减少内存占用和提高性能的结构型设计模式。它通过共享多个对象所共有的相同状态,使得在有限的内存容量中能够载入更多的对象。具体来说,享元模式将对象的状态分为内部…...
智慧园区大数据云平台建设方案(Word原件)
第一章 项目建设背景及现状 第二章 园区创新发展趋势 第三章 工业园区大数据存在的问题 第四章 智慧工业园区大数据建设目的 第五章 智慧园区总体构架 第六章 系统核心组件 第七章 智慧工业园区大数据平台规划设计 获取方式:本文末个人名片直接获取。 软件资料清单…...
【学习】如何利用Python技术进行软件测试相关工作
Python是一种广泛使用的高级编程语言,它因其简洁的语法、强大的库支持和跨平台特性而受到开发者的喜爱。在软件测试领域,Python同样发挥着重要作用,它可以帮助测试人员编写自动化测试脚本、进行接口测试、性能测试、以及处理测试数据等。以下…...
Qt:3.项目创建、对象树、乱码问题、Qt命名规则
目录 1.创建项目: 2.Qt可以支持两套基础类: 3.节点的父子关系和对象树: 4.QLabel类: 5.乱码问题: 6.Qt命名规则: 1.创建项目: qt的项目中有一个以.ui为后缀的文件,他本质是一个…...
C# 入门—实现 Hello, World!
目录 一、.net 平台 二、.net 都能干什么? 三、.net 两种交互模式 四、使用 VS Code 开发 C# 程序 五、实现 Hello, World! 一、.net 平台 下载 .NET(Linux、macOS 和 Windows) (microsoft.com) .NET 简介 - .NET | Microsoft Learn C# :一种编程语言,可以开…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
