Shell免交互

Shell免交互

  • 一. 变量配置
    • 1.1 在E0F外面的变量可以直接传入使用
    • 1.2 EOF的输入内容可以直接赋值给变量
  • 二. expect语句
    • 2.1 转义符
    • 2.2 expect的语法
    • 2.3 格式
    • 2.4 脚本外传参
    • 2.5 嵌套
  • 三. 访问其它主机

  • 交互:当我们使用程序时,需要进入程序发出对应的指令,然后程序做出对应的执行结果
  • 免交互:I/O重定向,通过这种方式把指令提交给程序,程序运行指令。

文本免交互:
Here Document
命令<<标记
。。。
。。。
。。。
内容
标记

root@u3:/opt# wc -l <<EOF
> 6
> 5
> 4
> EOF
3
root@u3:/opt# cat <<EOF>>test2.txt
> 1
> 2
> 3
> EOF
root@u3:/opt# cat test2.txt 
1
2
3
  1. 标记为可以是任意合法字符(EOE作为标记)
  2. 结尾的标记一定要顶格写,前面不能有空格,也不能有任何其他字符

一. 变量配置

1.1 在E0F外面的变量可以直接传入使用

file='test3.sh'
i='sum'
cat >> $file <<EOF
today is ${i} day
EOF
root@u3:/opt# cat test3.sh
today is sum day

1.2 EOF的输入内容可以直接赋值给变量

var="7 8 9"
myvar=$(cat <<EOF
1 2 3
4 5 6
$var
EOF
)
echo $myvar
root@u3:/opt# bash test2.txt 
1 2 3 4 5 6 7 8 9
var="7 8 9"
myvar=$(cat <<'EOF'
#在开头的标记位使用单引号,外部的变量就不会被秒交互内部使用
1 2 3
4 5 6
$var
EOF
)
echo $myvar
root@u3:/opt# bash test2.txt 
1 2 3 4 5 6 $var
去掉每行之前的tab键
可以自动抑制tab键的空格
cat >>test4.txt<<-EOF
                  66#普通空格
			77#tab键的空格
EOF
root@u3:/opt# bash lx.sh 
root@u3:/opt# ls
lx.sh  test4.txt
root@u3:/opt# cat test4.txt 
                  66
77

二. expect语句

建立在tcl(类c语言)的一个工具,可以用来对程序进行自动化控制和测试。解决shell脚本中交互的问题
apt -y install expect

2.1 转义符

  • \n:换行
  • \t:制表符(tab键)
  • \r:表示回车键
  • \b:表示退格键(backspace)

2.2 expect的语法

  1. #!/usr/bin/expect 必须声明使用的解释器
  2. 使用expect的脚本不可以使用bash编译,必须是赋权执行权限才能执行

2.3 格式

#!/usr/bin/expect
#必须先声明解释器
set timeout 5
#定义超时时间,5秒到了,进程直接结束,默认超时时间是10秒
#set可以作为设置变量名(expect)
spawn passwd dn
#spawn表示开启一个会话,监控一个命令的执行过程,跟踪后续的交互信息

expect "新的密码:"
#开启捕获,匹配到需要输入的内容行
send "123abcd\r"
#send 用来模拟用户的输入过程
expect "重新输入新的密码:"
send "123abcd\r"
#expect的结束语句(只能从中选一个):
expect eof
#当交互结束之后,退回到上一次的用户,也就是spawn开始执行的用户是谁,就推回到谁
#interact
#当交互结束之后,留在当前用户不变

root@u3:/opt# chmod 777 passwd.sh   #必须给权限才能使用
root@u3:/opt# ./test1.sh passwd dn

2.4 脚本外传参

#!/usr/bin/expect
set username [lindex $argv0]
#相当于shell脚本的位置变量
#set username dn
#username=dn
set password [lindex $argv 1]
spawn su - $username
expect "密码"
send "$password\r'
expect "#"
send_user "ok"
#send user相当于echo,打印指定内容
expect eof

2.5 嵌套

#创建用户
#!/bin/bash
user=$1
password=$2
useradd -m-s /bin/bash $user
#开始使用嵌套,执行免交互
/usr/bin/expect <<-EOF## 标题
spawn passwd $user
expect "新的*"
send "${password}\r"
expect "重新*"
send "${password}\r'
expect eof
EOF
root@u3:/opt# bash sul.sh test2 123

三. 访问其它主机

#!/usr/bin/expect
set timeout 5
set ip 192.168.246.7
set user root
set password 123
spawn ssh $user@$ip
expect {
"(yes/no/\[fingerprint])?"{send "yes\n";exp_continue}
"password:"{send "$password\n"}
}
expect eof

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

清风数学建模学习笔记——Topsis法

数模评价类&#xff08;2&#xff09;——Topsis法 概述 Topsis:Technique for Order Preference by Similarity to Ideal Solution 也称优劣解距离法&#xff0c;该方法的基本思想是&#xff0c;通过计算每个备选方案与理想解和负理想解之间的距离&#xff0c;从而评估每个…

【认证法规】安全隔离变压器

文章目录 定义反激电源变压器 定义 安全隔离变压器&#xff08;safety isolating transformer&#xff09;&#xff0c;通过至少相当于双重绝缘或加强绝缘的绝缘使输入绕组与输出绕组在电气上分开的变压器。这种变压器是为以安全特低电压向配电电路、电器或其它设备供电而设计…

喆塔科技携手国家级创新中心,共建高性能集成电路数智化未来

集创新之力成数智之塔 近日&#xff0c;喆塔科技与国家集成电路创新中心携手共建“高性能集成电路数智化联合工程中心”并举行签约揭牌仪式。出席此次活动的领导嘉宾包含&#xff1a;上海市经济和信息化委员会、上海市集成电路行业协会、复旦大学微电子学院、国家集成电路创新中…

OpenCV-图像阈值

简单阈值法 此方法是直截了当的。如果像素值大于阈值&#xff0c;则会被赋为一个值&#xff08;可能为白色&#xff09;&#xff0c;否则会赋为另一个值&#xff08;可能为黑色&#xff09;。使用的函数是 cv.threshold。第一个参数是源图像&#xff0c;它应该是灰度图像。第二…

手游和应用出海资讯:怪物猎人AR手游累计总收入已超过2.5亿美元、SuperPlay获得迪士尼纸牌游戏发行许可

NetMarvel帮助游戏和应用广告主洞察全球市场、获取行业信息&#xff0c;以下为12月第一周资讯&#xff1a; ● 怪物猎人AR手游累计总收入已超过 2.5 亿美元 ● SuperPlay获得迪士尼纸牌游戏发行许可 ● 腾讯混元大模型上线文生视频能力 ● 网易天下事业部一拆三&#xff0c;蛋仔…

ARINC 标准全解析:航空电子领域多系列标准的核心内容、应用与重要意义

ARINC标准概述 ARINC标准是航空电子领域一系列重要的标准规范&#xff0c;由航空电子工程委员会&#xff08;AEEC&#xff09;编制&#xff0c;众多航空公司等参与支持。这些标准涵盖了从飞机设备安装、数据传输到航空电子设备功能等众多方面&#xff0c;确保航空电子系统的兼…

代码随想录Day35 本周小结动态规划,动态规划:01背包理论基础,动态规划:01背包理论基础(滚动数组),416. 分割等和子集。

1.本周小结动态规划 周一 动态规划&#xff1a;不同路径 (opens new window)中求从出发点到终点有几种路径&#xff0c;只能向下或者向右移动一步。 我们提供了三种方法&#xff0c;但重点讲解的还是动规&#xff0c;也是需要重点掌握的。 dp[i][j]定义 &#xff1a;表示从…

tomcat+jdbc报错怎么办?

1. 虽然mysql8.0以上的不用手动添加driver类&#xff0c;但是一旦加上driver类&#xff0c;就要手动添加了 不然会报找不到driver类的错误 2. java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:xXX?serverTimezoneU…

【电子仪器】蓝牙测试仪的使用

大家好&#xff0c;我是山羊君Goat。 蓝牙测试仪是专门对于蓝牙信号&#xff0c;RF射频等进行综合测试的电子仪器。 掌握蓝牙测试仪是部分硬件工程师&#xff0c;特别是RF射频硬件工程师一个必备的技能了。 那要如何操作蓝牙测试仪呢&#xff1f; 这里以一款以前市场上比较流…

ansible基础教程(上)

一、介绍&#xff1a; Ansible是一款用于软件配置、配置管理和软件部署的开源自动化和编排工具。相比于其它的工具&#xff0c;Ansible的安装更加简单、易于使用。通过SSH到客户端的方式进行连接&#xff0c;因此它不需要在客户端有特殊的代理&#xff0c;并且通过将模块推送到…

典型常见的知识蒸馏方法总结一

来源&#xff1a;https://github.com/HobbitLong/RepDistiller收录的方法 NeurIPS2015: Distilling the Knowledge in a Neural Network 知识蒸馏开山之作&#xff0c;从logits中蒸馏知识&#xff0c;KL散度损失 ICLR2015&#xff1a;FitNets: Hints for Thin Deep Nets A h…

挑战用React封装100个组件【010】

Hello&#xff0c;大家好&#xff0c;今天我挑战的组件是这样的&#xff01; 今天这个组件是一个打卡成功&#xff0c;或者获得徽章后的组件。点击按钮后&#xff0c;会弹出礼花。项目中的勋章是我通过AI生成的&#xff0c;还是很厉害的哈&#xff01;稍微抠图直接使用。最后面…

【Liunx篇】基础开发工具 - yum

文章目录 &#x1f335;一.Liunx下安装软件的方案&#x1f43e;1.源代码安装&#x1f43e;2.rpm包安装&#x1f43e;3.包管理器进行安装 &#x1f335;二.软件包管理器-yum&#x1f335;三.yum的具体操作&#x1f43e;1.查看软件包&#x1f43e;2.安装软件包&#x1f43e;3.卸载…

MongoDB的简单使用

MongoDB(文档数据库)的简单使用 MongoDB最好的学习资料就是他的官方文档&#xff1a;SQL 到 MongoDB 的映射图表 - MongoDB 手册 v8.0 1.MongoDB CRUD操作 1.1Insert操作 基本方法&#xff1a; db.collection.insertOne() 将单个文档(document)插入集合中 db.collectio…

【射频IC进阶实践教程】2.6 LNA版图设计及DRC/LVS验证

射频集成电路的版图设计非常关键&#xff0c;他对寄生参数非常敏感&#xff0c;需要使其最小化。还需要注意相互耦合的方式本次课程主要介绍射频IC的一些相关布局和连线方面的考虑。 一、版图设计 1. 版图的元件布局 首先打开对应的原理图 点击进行版图设计 由于已经有做好的…

go语言的sdk项目搭建与git 操作标签tag并推送至远程仓库

在搭建 SDK 项目并结合 Git 操作标签&#xff08;Tag&#xff09;时&#xff0c;通常会涉及项目初始化、版本管理、Git 标签的创建与管理等内容。以下是一个完整的步骤指南&#xff0c;帮助您搭建 SDK 项目并学习如何使用 Git 标签。 ### 1. **搭建 SDK 项目** 首先&#xff…

超融合承载 PostgreSQL 数据库和 AI 系统的性能评测|金融行业实践

随着人工智能技术的日渐成熟&#xff0c;不少金融用户也开发了自己的 AI 应用系统&#xff0c;协助实际业务中诸如文字识别、图像转换、信息录入等工作&#xff0c;提升业务效率。不过&#xff0c;AI 应用系统普遍依赖 GPU 提供强大算力&#xff0c;对底层存储的性能也有较高的…

数据结构代码归纳

线性表 线性表的顺序表示 定义与初始化 typedef struct SqList{ElemType data[MaxSize];//ElemType *data 开动态数组 int length; }Sqlist; void InitList(SqList &L){L.length0;//若静态数组//若动态数组 //L.data(ElemType*)malloc(sizeof(ElemType)*MaxSize); } …

华为的USG6000为什么不能ping通

前言&#xff1a; 防火墙usg6000v的镜像 链接: https://pan.baidu.com/s/1uLRk0-hnHRTLYLx1Pnplow?pwdtymp 提取码: tymp 看了好多毒文章&#xff0c;感觉写作业更有意思&#xff0c;可以了解新的知识 内容&#xff1a; 首先看毒文章是这样说的&#xff0c;华为的防火墙是…

“量子跃迁与数据织网:深入探索K最近邻算法在高维空间中的优化路径、神经网络融合技术及未来机器学习生态系统的构建“

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…