Linux的免交互

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

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

1、here document免交互

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

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

语法格式:

命令(linux的系统命令)<<标记

内容1

内容2

内容3

标记

#wc 统计字符串
[root@localhost /]# wc -l << xy102
> 123
> 456
> 789
> xy102
3

注意事项:

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

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

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

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

#使用免交互修改用户密码
[root@localhost /]# passwd dn <<EOF
> 123
> 123
> EOF
#使用免交互赋值
[root@localhost /]# read i << EOF
123
EOF
[root@localhost /]# echo $i
123

2、tee命令免交互

[root@localhost opt]# tee jh1.txt <<EOF
> 1
> 2
> 3
> EOF
1
2
3

3、引入变量

创建mjh1.sh脚本写入以下内容
[root@localhost opt]# cat mjh1.sh 
#!/bin/bash
file="test9.sh"
i=school
cat > $file <<EOF
I am going to $i
EOF

运行脚本生成test9.sh脚本文件
查看test9.sh脚本内容 

 

4、 整体变量赋值

将var字符串内容整体赋值给myvar
#!/bin/bash
var="good I am going to school"
#整体赋值方式
myvar=$(
cat <<EOF
zhangsan say
$var
EOF
)
echo  $myvar输出结果
[root@localhost opt]# sh mjh1.sh 
zhangsan say good I am going to school将EOF加单引号,关闭整体变量赋值
#!/bin/bash
var="good I am going to school"
myvar=$(
cat <<'EOF'
zhangsan say
$var
EOF
)
echo  $myvar
输出结果
[root@localhost opt]# sh mjh1.sh 
zhangsan say $var

5、Expect实现免交互

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

需要先下载

[root@localhost opt]# yum -y install expect

实例

#!/usr/bin/expect
#声明解释器,不再是默认的bash,需要声明,使用whereis expect 查找目录位置
set timeout 5
#set 设置,timeout 超时时间,expect有一个默认的超时时间10秒,设置超时时间5秒
#set也可以作为设置变量
spawn passwd dn
#spawn用来声明需要执行的命令,开启会话过程,并且跟踪后续的交互信息
expect "新的 密码:"
#expect来捕获需要执行的命令行
#捕获不需要完整的可以使用*代表所有
send "zlm12388\r"
#send 表示输入指令代码,\r表示回车
expect "重新输入新的 密码:"
send "zlm12388\r"expect eof
#交互指令结束之后,会退回原用户,切换回之前的用户
#interact
#留在当前用户,不会改变#最后一定要有结束语,以上两个只能选一个

 执行脚本要先赋权,使用./的方式执行  

实例:普通用户进行切换 

#!/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 打印指定内容
#结束语
interact

 实现效果

结束语使用 expect eof效果

6、 嵌入执行模式

嵌入执行模式,在shell当中加入expect,涉及到环境切换的场景不建议使用嵌套

例如ssh su 不适用使用嵌入模式

#!/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

 实现效果

7、使用ssh连接其他主机  

基础版

#!/usr/bin/expect
set ip 192.168.10.30
set user root
set password 123
set timeout 5#进入命令行
spawn ssh $user@$ip
expect {"(yes/no)" {send "yes\r";exp_continue}
#这里捕获两次,表示该项被匹配之后,继续匹配其他的指定的内容
#类似于循环的continue,允许expect语句继续向下执行
"password" {send "$password\r"}
}
interact

实验效果

进阶版

#!/usr/bin/expect
set timeout 5
#使用位置变量,手动输入
set hostname [lindex $argv 0]
set password [lindex $argv 1]#进入命令行
spawn ssh $hostname
expect {
#出现异常情况显示实现
"NO route to host" {send_user "主机名/ip有误\n"}
"Connection refusedi" {send_user "ssh连接拒绝\n"}
"(yes/no)" {send "yes\r";exp_continue}
"password" {send "$password\r"}
}
interact

8、小练习

免交互实现硬盘分区,分一个区即可,分完之后,第一步要格式,第二步实现挂载,挂载(手动挂载)然后在这个分区的挂载文件创建一个文件,写入内容“学习真好”,并且打印出结果,在一个脚本里完成,嵌入模式。

#!/bin/bash
# 使用shell
scan
# 列出所有块设备
lsblk
set timeout 5
# 设置超时时间为5秒
/usr/bin/expect <<-EOF
spawn fdisk /dev/sdb
#进行分区
expect  "命令" 
send "n\r"
expect  "(default p)"
send "p\r"
expect  "分区号" 
send "1\r"
expect  "起始 扇区 " 
send "\r"
expect  "Last" 
send "\r"
expect  "(输入 m 获取帮助)" 
send "w\r"expect eof
EOF
# 刷新分区表
partprobe /dev/sdb
# 列出所有块设备以检查新分区 以及过滤想要出现的分区
lsblk | grep sdb1 >& /dev/null
if [[ $? -eq 0 ]]
then
echo "分区被建立"
mkfs.xfs -f /dev/sdb1
mkdir /data1
mount /dev/sdb1 /data1
df -hT
else
echo "分区没有被建立"
fi
#写入内容
cat >/data1/test1.txt <<EOF
学习真好
EOF
cat /data1/test1.txt

输出效果

 

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

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

相关文章

【大数据】大数据的核心特征与挑战:Volume、Velocity、Variety、Veracity

目录 Volume&#xff1a;海量数据的挑战与机遇 挑战 技术挑战 机遇 Velocity&#xff1a;数据处理的速度与实时性 挑战 技术挑战 机遇 Variety&#xff1a;数据类型的多样性与复杂性 挑战 技术挑战 机遇 Veracity&#xff1a;数据的真实性与质量控制 挑战 技术挑…

数字内容“遍地开花”,AI技术如何创新“造梦”?

文 | 智能相对论 作者 | 陈泊丞 这是春晚舞台西安分会场《山河诗长安》的一幕&#xff1a;“李白”现世&#xff0c;带领观众齐颂《将进酒》&#xff0c;将中国人骨子里的豪情与浪漫演绎得淋漓尽致。 这又是浙江义乌商品市场里的另一幕&#xff1a;只会说几个英文单词的女老板…

因为存在技术问题?《幻兽帕鲁》开发商称很难登录Switch

原标题&#xff1a;《幻兽帕鲁》首席执行官&#xff1a;移植Switch平台存在技术难度 易采游戏网6月25日消息&#xff1a;近日&#xff0c;《幻兽帕鲁》的开发商Pocketpair在接受媒体采访时讨论了将游戏移植到任天堂Switch平台的可能性。Pocketpair首席执行官Takuro Mizobe表示&…

fail2ban自动屏蔽之jumpserver

fail2ban是一款实用软件&#xff0c;可以监视你的系统日志&#xff0c;然后匹配日志的错误信息&#xff08;正则式匹配&#xff09;执行相应的屏蔽动作。 jumpserver是一款开源堡垒机&#xff0c;其拥有一定的防护登录&#xff0c;也可以做登录限制&#xff0c;但是相对于防火…

【深度强化学习】如何使用多进程(multiprocessing、pipe)来加速训练

文章目录 实验结果实现思路思路1思路2 进程与线程介绍如何实现multiprocessing、Pipe的范例关于时间对比上的问题代码修改收敛为何不稳定 技巧进程资源抢占问题线程问题cpu和gpu问题 进阶&#xff08;还没看懂/还没实验&#xff09;附代码raw代码mul代码 实验结果 实验平台&am…

Vue下载接口返回流的处理

1.下载接口返回流如下&#xff1a; 2.可以写公共方法处理 excelDownload(obj, name Date.now(), suffix xlsx) {//Date.now()获取当前日期const url window.URL.createObjectURL(//Blob是二进制大对象new Blob([obj], { type: application/vnd.ms-excel }))const aDOM docu…

在Visual Studio Code中使用Phi-3模型

更多数字生产力内容&#xff0c;欢迎关注我的公众号“ONE生产力”。 先前的文章中&#xff0c;我们已经介绍使用LM Studio在本地环境中运行Phi-3。LM Studio是一款革命性的桌面应用程序&#xff0c;它允许用户在自己的计算机上本地运行、管理和部署大型语言模型&#xff0c;但有…

走近数据变更捕获(CDC):定义、优势和用例

在当今快节奏的数字化环境下&#xff0c;企业需要数据来做出决策、提高运营效率、优化客户体验。然而&#xff0c;获得最新最准确的数据有时并不容易&#xff0c;尤其是当数据来自于多个系统和应用程序时。这时&#xff0c;数据变更捕获&#xff08;Change Data Capture&#x…

内存卡数据移走了怎样恢复?简易步骤与解决方案

随着科技的快速发展&#xff0c;内存卡已成为我们日常生活中不可或缺的一部分&#xff0c;特别是在行车记录仪、手机、相机等设备上。然而&#xff0c;当内存卡中的数据意外移走或删除时&#xff0c;我们往往会感到焦虑和困惑。本文将为您介绍如何简易恢复内存卡中移走的数据&a…

基于SpringBoot+Vue北部湾地区助农平台设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还…

震惊!CURRENT_TIMESTAMP不能乱用

事情发生在签到和查询签到记录. 设置mysql时间默认值为CURRENT_TIMESTAMP可以随系统生成默认时间戳,即生成该数据的时间戳, 但是有些特殊场景要避免由mysql给我们生成默认时间: 1、首先签到成功之后返回给前端, 2、前端收到执行成功之后立马去查询签到记录, 3、发现并没有…

leetcode-17-[235]二叉搜索树的最近公共祖先[701]二叉搜索树中的插入操作[450]删除二叉搜索树中的节点

一、[235]二叉搜索树的最近公共祖先 class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(rootnull){return null;}//左子树if (root.val > p.val && root.val > q.val) {return lowestCommonAncestor(root.left…

智慧校园-实习管理系统总体概述

智慧校园实习管理系统是专为高校、企业和学生设计的一体化数字解决方案&#xff0c;它革新了传统实习管理的方式&#xff0c;通过科技手段促进了实习资源的高效对接与管理。该系统整合了实习信息发布、申请管理、过程监督、评估反馈等多个核心环节&#xff0c;构建了一个无缝连…

钡铼BL101网关6串口Modbus转MQTT优化智慧园区设备互联

BL101网关&#xff1a;优化智慧园区设备互联的关键利器 在当今快速发展的智能化时代&#xff0c;智慧园区管理对于设备之间的高效互联至关重要。钡铼&#xff08;BL101&#xff09;网关作为一款功能强大的Modbus转MQTT设备&#xff0c;不仅支持多种通信协议和硬件接口&#xf…

Excel条件格式的经典用法

目录&#xff1a; 一、自动设置填充颜色 二、设置Excel到期自动销毁 三、隔行自动标记 四、美化表格 五、快速突出显示重复值 六、标记空单元格 七、突出显示前N名单元格数值 八、表格添加新内容自动加边框 一、自动设置填充颜色 1、选择内容 首先我们选中表格的数据…

常微分方程算法之编程示例三(预估-校正法)

目录 一、研究问题 二、C代码 三、计算结果 一、研究问题 本节我们采用预估校正法&#xff08;改进欧拉法&#xff09;求解算例。 预估-校正法的原理及推导请参考&#xff1a; 常微分方程算法之预估-校正法&#xff08;改进Euler法&#xff09;_、改进欧拉法-CSDN博客https…

规则引擎-Aviator 表达式校验是否成立

目录 介绍特性使用更多文献支持 介绍 Aviator是一个轻量级、高性能的Java表达式执行引擎&#xff0c;它动态地将表达式编译成字节码并运行。 特性 支持绝大多数运算操作符&#xff0c;包括算术操作符、关系运算符、逻辑操作符、位运算符、正则匹配操作符(~)、三元表达式(?:…

IDEA services模块无法启动springboot服务(添加了springboot但是为空白)

https://blog.csdn.net/m0_54042402/article/details/117918995 https://blog.csdn.net/qq_46550964/article/details/122235235 Alt8 显示services模块 发现有springboot启动模块&#xff0c;点一下springboot之后&#xff0c;这个模块就消失了 会自动在.idea文件夹下的work…

五十八、openlayers官网示例Map Graticule解析——给地图添加经纬度网格线

这篇没啥好说的&#xff0c;写出来完全是嘲笑一下自己蠢&#xff0c;以及&#xff0c;&#xff0c;&#xff0c;帮大家避个坑。。。。 之前一个项目需要展示这种经纬线&#xff0c;但是我不知道openlayers有这种图层&#xff0c;于是拿canvas画上去的。。。。 很好&#xff0c…

【嵌入式Linux】<总览> 多进程

文章目录 前言 一、进程的概念与结构 1. 相关概念 2. 内核区中的进程结构 3. 进程的状态 4. 获取进程ID函数 5. 进程组 6. 会话 二、进程创建 1. fork和vfork函数 2. 额外注意点 3. 构建进程链 4. 构建进程扇 三、进程终止 1. C程序的启动过程 2. 进程终止方式…