免交互 实验

免交互

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

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

Here document 免交互

这是命令行格式,也可以写在脚本当中。通过I/O重定向的方式将命令的列表传送给交互式程序或命令。

是标准输入的一种替代品。代替了人工的输入方式。

语法格式:

命令(linux的系统命令)<<标记
内容1
内容2
内容3
标记
[root@test2 opt]# wc -l << xy102
> 123
> 456
> xy102
2

注意事项:

1、标记可以是任意合法字符(一般不使用特殊字符,不以数字开头,通常以EOF作为默认的标记位)

2、结尾的标记一定要顶格写。且前面不能有任何字符,空格也不行。

3、结尾的标记后面也不能有任何字符,包括空格。

4、开头的标记前后的空格都会被省略掉

[root@test2 opt]# cat <<eof>>test2.txt
> aaa
> bbb
> cccc
> dddd
> eof
[root@test2 opt]# cat test2.txt 
aaa
bbb
cccc
dddd
[root@test2 opt]# tee test3.txt<<eof
> aa
> bbc
> ss
> eof
aa
bbc
ss
[root@test2 opt]# cat test3.txt 
aa
bbc
ss

整体变量赋值

​
[root@test2 opt]# vim test1.txt 
#!/bin/bash
#引入变量
var="Great! I am going to school"
myvar=$(cat <<EOF
this is mondy
$var
EOF
)
echo $myvar
​
[root@test2 opt]# sh test1.txt 
this is mondy Great! I am going to school

标记加引号就不再往里传值

[root@test2 opt]# vim test1.txt 
#!/bin/bash
#引入变量
var="Great! I am going to school"
myvar=$(cat <<'EOF'
this is mondy
$var
EOF
)
echo $myvar
​
[root@test2 opt]# sh test1.txt 
this is mondy $var

免交互只对tab键

[root@test2 opt]# vim test1.txt 
#!/bin/bash
cat <<-'EOF'test1
test2
EOF
​
[root@test2 opt]# sh test1.txt 
test1
test2

Expect实现免交互

用cl语言写一个工具,主要用自动化控制和测试。解决shell脚本交互问题。

转义符

\n:换行

\r:回车

\t:相当于一个tab键

\b:表示退格,删除

免交互修改密码
[root@test3 opt]# vim passwd.sh
#!/usr/bin/expect
#声明解释器,不再是默认的bash。必须要写
set timeout 5
#set相当于设置,timeout超时时间,expect有一个默认超时时间10秒。设置超时时间5秒
​
spawn passwd wbl
#spawn后用来声明需要执行的命令,开启会话过程,并且跟踪后续的交互信息
expect "新的 密码:"
#捕获需要执行的命令行
send "abc123\r"
#输入指令代码
expect "重新输入新的 密码:"
send "abc123\r"
#最后结束语,结束语只能写一个
expect eof
#交互指令结束之后,会退回原用户,切换回之前的用户
#interact
#留在当前用户,不动
​
[root@test3 opt]# chmod 777 passwd.sh
​
[root@test3 opt]# ./passwd.sh
spawn passwd wbl
更改用户 wbl 的密码 。
新的 密码:
无效的密码: 密码少于 7 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
invalid command name "~"while executing
"~                                                                                                                                                     ..."(file "./passwd.sh" line 19)
连接另一台主机
#!/usr/bin/expect
set ip 192.168.65.22
set user root
set password 123
set timeout 5
​
#进入命令行
spawn ssh $user@$ip
expect {"yes/no" {send "yes\r";exp_continue}
#捕获两次,表示该项被匹配之后继续匹配其他指定内容。类似循环continue允许继续执行"*password" {send "$password\r"}
}
interact
结果
[root@test3 opt]# ./test1.sh
spawn ssh root@192.168.65.22
The authenticity of host '192.168.65.22 (192.168.65.22)' can't be established.
ECDSA key fingerprint is SHA256:vArlM9v0tBqTAeP9OCssdmVcDMvpAQlZkb3UPFaH0hY.
ECDSA key fingerprint is MD5:28:e9:05:f9:e5:68:ce:f8:4a:e3:98:2a:1a:43:88:e4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.65.22' (ECDSA) to the list of known hosts.
root@192.168.65.22's password: 
Last login: Tue Jun 25 10:51:59 2024 from 192.168.65.1
​

免交互磁盘分区?

#免交互实现磁盘分区,分一个区,第一步要格式,第二部要实现挂载(手动), #在这个分区的挂载创建一个文件,写入内容“学习正好”,并且打印 #在一个脚本里完成

[root@test3 opt]# vim disk.sh 
#!/bin/bash
disk=$1
/usr/bin/expect <<-EOF
spawn fdisk $disk
expect "命令(输入 m 获取帮助):"send "n\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 "+200M\r"
expect "命令(输入 m 获取帮助):"send "w\r"
expect eof
EOF
mkfs.xfs -f /dev/sdb1
if [ $? -eq 0 ]
then
mkdir /opt/date
mount /dev/sdb1 /opt/date
file="/opt/date/date.txt"
i="学习真好"
cat > $file <<EOF
$i
EOF
cat /opt/date/date.txt
else
echo "脚本有问题"
fi

结果

[root@test3 opt]# ./disk.sh /dev/sdb
spawn fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
​
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
​
​
命令(输入 m 获取帮助):n
Partition type:p   primary (0 primary, 0 extended, 4 free)e   extended
Select (default p): 
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+200M
分区 1 已设置为 Linux 类型,大小设为 200 MiB
​
命令(输入 m 获取帮助):w
The partition table has been altered!
​
Calling ioctl() to re-read partition table.
正在同步磁盘。
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=12800 blks=                       sectsz=512   attr=2, projid32bit=1=                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=51200, imaxpct=25=                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=855, version=2=                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
学习真好

1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/35356.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决Java中的数组越界异常的技术

解决Java中的数组越界异常的技术 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在Java开发中&#xff0c;处理数组越界异常是一项关键的技术挑战。当我们访问…

CesiumJS【Basic】- #015 深度测试对渲染的影响

文章目录 深度测试对渲染的影响1 目标2 实现main.ts深度测试对渲染的影响 1 目标 探究depthTestAgainstTerrain关闭和开启对渲染的影响 2 实现 当 viewer.scene.globe.depthTestAgainstTerrain = true 时,深度测试将与地形进行对比。这意味着所有的几何体都会与地形进行深…

PIL、cv2、numpy,和pytorch(torch)之间的转换

一、单通道图片&#xff08;灰度图&#xff09;的读取和转换 1、OpenCV读取&#xff08;BGR&#xff09;&#xff1a; 因为大多数显示或处理图像的函数都期望图像是BGR格式&#xff08;即Blue-Green-Red&#xff09;&#xff0c;而不是灰度格式。 在OpenCV imread函数图片读取…

QT QML 生成二维码

Qt生成二维码 C版 文章目录 步骤1&#xff1a;安装libqrencode步骤2&#xff1a;创建C类生成二维码步骤3&#xff1a;将C类与QML绑定步骤4&#xff1a;创建QML界面步骤5&#xff1a;配置项目文件总结 在Qt QML中实现二维码生成&#xff0c;可以使用一个C库来生成二维码&#x…

DAMA数据管理各职能总结

数据管理职能目标和原则活动主要交付物角色和职责一级活动二级活动负责角色批准角色贡献角色数据治理&#xff1a;数据资产管理的实际管理和控制&#xff08;计划、监控和提升&#xff09;1.定义、审批、沟通数据战略、政策、标准、架构、流程和度量体系1.1 数据管理计划P1.1.1…

鼠标与键盘交互设计

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在海龟绘图中&#xff0c;也支持与鼠标或键盘的交互操作。它提供了监听键盘按键事件、鼠标事件以及定时器等方法&#xff0c;下面分别进行介绍。 1键…

spark查看日志

Logger 当 Spark 任务已经提交到集群运行后&#xff0c;可以通过以下几种方式查看LoggerFactory输出的日志&#xff1a; Web 界面&#xff1a;在 Spark 任务运行时&#xff0c;可以通过访问 Spark 的 Web UI 来查看日志。通常&#xff0c;可以在浏览器中输入http://<drive…

背包模型——AcWing 423. 采药

背包模型 定义 背包模型是一种常见的算法问题模型&#xff0c;它主要涉及将一些物品放入一个容量有限的背包中&#xff0c;以达到某种最优目标&#xff0c;如最大化价值或最小化重量等。 运用情况 常用于资源分配、项目选择、货物装载等实际问题中。例如&#xff0c;在选择…

AWS云中的VPC启用流日志保存S3(AWS中国云)

问题 需要在AWS中国云中对VPC启用流日志操作。 步骤 创建s3桶 这里设置一个s3桶名&#xff0c;创建即可。如果出现已存在具有相同名称的存储桶错误&#xff0c;就换个桶名再试一试吧。 启用vpc流日志 找到vpc流日志入口操作&#xff0c;如下图&#xff1a; 设置vpc流日志…

『亚马逊云科技产品测评』程序员最值得拥有的第一台专属服务器 “亚马逊EC2实例“

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 引言 自2006年8月9日&#xff0c;在搜索引擎大会&#xff08;SES San Jo…

嵌入式EMC

名词介绍&#xff1a; EMC&#xff1a;兼容&#xff0c;设备间相互兼容在共同环境下工作的能力。包括&#xff1a;EMI和EMS EMI&#xff1a;interference干扰&#xff0c;自身对其他设备的干扰 EMS&#xff1a;susceptibility抗干扰能力 EMS包含以下&#xff1a; 浪涌&…

Java文件操作小项目-带GUI界面统计文件夹内文件类型及大小

引言 在Java编程中&#xff0c;文件操作是一项基本且常见的任务。我们经常需要处理文件和文件夹&#xff0c;例如读取、写入、删除文件&#xff0c;或者遍历文件夹中的文件等。本文将介绍如何使用Java的File类和相关API来统计一个文件夹中不同类型文件的数量和大小。 准备工作…

c++基本数据类型和计算(三)习题讲解

1.【单选题】 int a450; int main() { int a100; { int a 999; std::cout << a; } } A.999 B.100 C.450 解析&#xff1a;这道题考察作用域&#xff0c;本身遵守就近原则&#xff0c;所以选A。 2.【单选题】 int a; { int b 100; } ab<&l…

MySQL 基础概念

MySQL逻辑架构 MySQL 服务器逻辑架构图 最上层的服务并不是MySQL所独有的&#xff0c;大多数基于网络的客户端/服务器的工具或者服务都有类似的架构&#xff0c;比如连接管理、授权认证、安全等等。 大多数MySQL的核心服务都在第二层&#xff0c;包括查询解析、分析、优化、…

手持小风扇品牌有哪些?分享口碑最好的五款手持小风扇

手持小风扇在炎热的夏季成为了许多人解暑的好帮手。它们不仅轻便便携&#xff0c;随时随地都能为我们带来清凉和舒适。然而&#xff0c;市场上手持小风扇的品牌繁多&#xff0c;让人眼花缭乱。为了帮助大家做出更明智的选择&#xff0c;接下来我们将分享口碑最好的五款手持小风…

HTML/CSS 基础 2

9、给div盒子设置圆角&#xff0c;基于边框&#xff1a; border:1px solid; #设置实线&#xff1b; border-radius:50px; #设置圆角 10、间距 1&#xff09;内间距&#xff1a;padding 2&#xff09;外间距&#xff1a;margin 11、#浮动和清除浮动# 第一种&#xff1a;在style…

vscode关于java扩展

包含IDEA同款代码提示&#xff0c;vscode的debug&#xff0c;除了创建类要手动新建java文件以外&#xff0c;其他都还行&#xff0c;满足初学者要求。

Python+Pytest+Allure+Yaml接口自动化测试框架详解

PythonPytestAllureYaml接口自动化测试框架详解 编撰人&#xff1a;CesareCheung 更新时间&#xff1a;2024.06.20 一、技术栈 PythonPytestAllureYaml 版本要求&#xff1a;Python3.7.0,Pytest7.4.4,Allure2.18.1,PyYaml6.0 二、环境配置 1、安装python3.7&#xff0c;并配置…

C++编程逻辑讲解step by step:根据关键词自动判断文章的类别,去掉无关词后统计文章中每个单词出现的频率。

题目分析 根据关键词自动判断文章的类别。共2篇文章&#xff08;用char s1[]和char s2[]保存&#xff09;&#xff0c;去掉无关词后&#xff08;用char irrelevant[][10]保存&#xff09;&#xff0c;统计文章里面每个单词出现的频率&#xff1a;关键词个数去掉无关词后的文章…

go编译报错

missing go.sum entry for module providing package gihub.com/xxxxxxxxxxx; to add:xxxx 在go项目目录下执行命令&#xff1a; go mod tidy