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

如何实现免交互

如何实现免交互

一、免交互

交互:我们发出指令控制程序的运行,程序在接收到指令之后按照指令的效果做出对应的反应

免交互:间接的通过第三方的方式把指令传送给程序,不用直接的下达指令

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。设计到环境切换的场景不建议使用嵌套。如 sshsu不适合使用嵌入模式

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
学习真好

相关文章:

如何实现免交互

如何实现免交互 一、免交互 交互&#xff1a;我们发出指令控制程序的运行&#xff0c;程序在接收到指令之后按照指令的效果做出对应的反应 免交互&#xff1a;间接的通过第三方的方式把指令传送给程序&#xff0c;不用直接的下达指令 Here Document免交互&#xff1a;这是命…...

浏览器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版)

异常的概念 在日常开发时 代码在程序运行过程中 难免会出现一些其奇奇怪怪的问题 有时通过代码很难去控制 比如&#xff1a;数据格式不对、网络不流畅、内存报警等 在Java中 将程序执行过程中发生的不正常行为称为异常 比如我们之前写代码时经常会遇到的&#xff1a; 1.算术…...

单片机学习记录

一&#xff0c;单片机及开发板介绍 1&#xff0c;基本介绍 单片机&#xff0c;英文Micro Controller Unit&#xff0c;简称MCU内部集成了CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能单片机的任务是信息采集(依靠传感器)、处理(依靠CPU)和硬件设备(…...

flask的基本使用1

【 一 】Flask介绍 python 界的web框架 -Django&#xff1a;大而全&#xff0c;使用率较高 &#xff1a;https://github.com/django/django -FastAPI&#xff1a;新项目选择使用它&#xff1a;https://github.com/tiangolo/fastapi -flask&#xff1a;公司一些小项目使用它&a…...

如何编写时区源文件

0、背景 ① 修改TZ环境变量改变时区不能立即生效。要求设置时区后立即生效&#xff0c;只能用修改/etc/localtime方式。 ② 原文作者 Bill Seymour&#xff0c;想要查看原文&#xff0c;点击官网地址https://www.iana.org/time-zones下载 zic 源码&#xff0c;源码目录中的 tz…...

植物大战僵尸杂交版v2.1最新整合版,附PC端+安卓端+iOS端安装包+修改器+安装教程!

嘿&#xff0c;大家好&#xff0c;我是阿星&#xff0c;今天要跟大家聊聊一款游戏&#xff0c;它不是那种让人眼花缭乱的大制作&#xff0c;也不是那种能让人回味无穷的艺术作品&#xff0c;但它在阿星心里&#xff0c;绝对是神作中的佼佼者。没错&#xff0c;它就是《植物大战…...

【5G射频基本架构】

平台框架 平台演进及搭配 5G NR频谱 NSA/SA/ENDC...

4.任务调度

1.基本知识 2.任务的状态 FreeRTOS中任务共存在4种状态&#xff1a;Running 运行态 当任务处于实际运行状态称之为运行态&#xff0c;即CPU的使用权被这个任务占用&#xff08;同一时间仅一个任务处于运行态&#xff09;。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 的篇幅过多&#xff0c;为了方便查阅&#xff0c;后续将分多个小节依次进行翻译。为了确保整个 1.2.2 小节的完整性&#xff0c;特意将上一篇包含的 SVG 小节的内容整理出来重新编排。敬请留意。 1.2.2 SVG - 可缩放矢量图形 可伸缩矢量图形&…...

「C系列」C 排序算法

文章目录 一、C 排序算法二、C 排序算法-应用场景1. 冒泡排序&#xff08;Bubble Sort&#xff09;2. 选择排序&#xff08;Selection Sort&#xff09;3. 插入排序&#xff08;Insertion Sort&#xff09;4. 快速排序&#xff08;Quick Sort&#xff09;5. 归并排序&#xff0…...

Power BI可视化表格矩阵如何保持样式导出数据?

故事背景&#xff1a; 有朋友留言询问&#xff1a;自己从Power BI可视化矩阵表格中导出数据时&#xff0c;导出的表格样式会发生改变&#xff0c;需要线下再手动调整&#xff0c;重新进行透视组合成自己想要的格式。 有没有什么办法让表格导出来跟可视化一样&#xff1f; Po…...

《UDS协议从入门到精通》系列——图解0x35:请求上传

《UDS协议从入门到精通》系列——图解0x35&#xff1a;请求上传 一、简介二、数据包格式2.1 服务请求格式2.2 服务响应格式2.2.1 肯定响应2.2.2 否定响应 三、通信示例 Tip&#x1f4cc;&#xff1a;本文描述中但凡涉及到其他UDS服务的&#xff0c;将陆续提供链接跳转方式以便快…...

Tailwindcss 扩展默认配置来自定义颜色

背景 项目里多个Tab标签都需要设置同样的背景颜色#F1F5FF&#xff0c;在集成tailwindcss之前就是重复该样式&#xff0c;如下图&#xff1a; .body {background-color: #f1f5ff; }集成tailwindcss时&#xff0c;我们希望在class中直接设置该背景色&#xff0c;但是默认的tai…...

C++设计模式---享元模式

1、介绍 原理&#xff1a; 享元模式是一种主要用于减少创建对象的数量&#xff0c;以减少内存占用和提高性能的结构型设计模式。它通过共享多个对象所共有的相同状态&#xff0c;使得在有限的内存容量中能够载入更多的对象。具体来说&#xff0c;享元模式将对象的状态分为内部…...

智慧园区大数据云平台建设方案(Word原件)

第一章 项目建设背景及现状 第二章 园区创新发展趋势 第三章 工业园区大数据存在的问题 第四章 智慧工业园区大数据建设目的 第五章 智慧园区总体构架 第六章 系统核心组件 第七章 智慧工业园区大数据平台规划设计 获取方式&#xff1a;本文末个人名片直接获取。 软件资料清单…...

【学习】如何利用Python技术进行软件测试相关工作

Python是一种广泛使用的高级编程语言&#xff0c;它因其简洁的语法、强大的库支持和跨平台特性而受到开发者的喜爱。在软件测试领域&#xff0c;Python同样发挥着重要作用&#xff0c;它可以帮助测试人员编写自动化测试脚本、进行接口测试、性能测试、以及处理测试数据等。以下…...

Qt:3.项目创建、对象树、乱码问题、Qt命名规则

目录 1.创建项目&#xff1a; 2.Qt可以支持两套基础类&#xff1a; 3.节点的父子关系和对象树&#xff1a; 4.QLabel类&#xff1a; 5.乱码问题&#xff1a; 6.Qt命名规则&#xff1a; 1.创建项目&#xff1a; qt的项目中有一个以.ui为后缀的文件&#xff0c;他本质是一个…...

C# 入门—实现 Hello, World!

目录 一、.net 平台 二、.net 都能干什么&#xff1f; 三、.net 两种交互模式 四、使用 VS Code 开发 C# 程序 五、实现 Hello, World! 一、.net 平台 下载 .NET(Linux、macOS 和 Windows) (microsoft.com) .NET 简介 - .NET | Microsoft Learn C# :一种编程语言,可以开…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...