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

Shell 编程之免交互

 一、Here Document

语法格式:
命令 << 标记
......
......
 标记

1.用wc -l的命令统计输入的文字的行数

[root@localhost ~]# wc -l <<EOF
> aaa
> bbb
> ccc
> EOF
3

 备注:
显示行数。

2.整体赋值给变量,通过echo打印出来

[root@localhost ~]# vim aaa.sh
a="很高兴认识你"
b=$(cat <<EOF
你好,
$a
EOF
)
echo $b
[root@localhost ~]# bash ccc.sh
你好, 很高兴认识你

备注:
你好,   $a     EOF在使用 tab键时,b=$(cat <<EOF要改写成b=$(cat <<-EOF

3. 添加注释符 #,多行注释

[root@localhost ~]# vim ddd.sh
echo 11
:<<EOF
echo 22
echo 33
EOF
echo 44
​​​​​​​[root@localhost ~]# bash ddd.sh   
11
44

 备注:
:表示什么命令都不做的空命令

二、expect

1.基础命令

expect 建立在TCL语言基础之上的一个工具,需要一些交互任务自动完成,解决交互的相关问题。

(1)expect  

  • 判断输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回
  • 只能捕捉由spawn启动的进程的输出
  • 用于接收命令执行后的输出,然后和期望的字符串匹配

(2) send  发送字符串,用户输入,无法自动换行,+r回车
(3) spawn 开起会话,后面跟系统命令,启动进程
(4) expect  eof 结束符  等待执行结束
(5) interact  结束交互,但依旧停留在目标终端,不会返回原始终端。

2.ssh无交互登录到远程服务器

[root@localhost ~]# yum -y install expect
[root@localhost ~]# vim eee.sh
#!/usr/bin/expect
spawn ssh 192.168.10.102
expect {
"*yes/no" {send "yes\r";exp_continue}
"password:" {send "aptech\r";}
}
expect "#"
interact
[root@localhost ~]# chmod +x eee.sh
[root@localhost ~]# ./eee.sh

备注:

  • #!/usr/bin/expect    这里需要用expect自己的解释器,注意不要写成bash否则无法识别。
  • spawn ssh root@192.168.100.102   开启一个程序,这个程序是ssh远程登录。
  • "*yes/no" {send "yes\r"; exp_continue}   当提示符中出现yes/no的时候,自动发送一个yes字符。
  • "password: " { send "aptech\r"; }    当出现password的时候,就会向程序发送密码,默认是不换行的,所以需要\r回车换行,多个条件需要大括号括起来。
  • interact    需要继续交互,不要用expect eof,否则会直接退出远程服务器。
  • 3. 对方服务器上进行一下操作后再退出可执行以下脚本

[root@localhost ~]# vim eee.sh
#!/usr/bin/expect
spawn ssh 192.168.10.102
expect {
"*yes/no" {send "yes\r";exp_continue}
"password:" {send "aptech\r";}
}
expect "#"
send "ifconfig ens33\r"
send "exit\r"
expect eof
[root@localhost ~]# chmod +x eee.sh
[root@localhost ~]# ./eee.sh

备注:

expect "#"                   //当捕获到#的时候
send "ls \r"                 //执行ls命令
send "ifconfig ens33 \r"     //执行ifconfig ens33命令
send "exit\r"                //执行完exit退出登陆
expect eof                   //不需要进行交互了,意味着结束expect程序

4. 创建用户并设置密码

[root@localhost ~]# vim fff.sh
#!/bin/bash
user=$1
password=$2
useradd $user
expect<<EOF
spawn passwd $user
epect "New password:"
send "${password}\r"expect "Retry new password:"
send "${password}\r"
expect eof 
EOF
[root@localhost ~]# cat /etc/shadow

5.  ssh远程自动登录

102主机服务器

​​​​​​​[root@localhost ~]# yum -y install vsftpd
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl start vsftpd

101客户端

#!/usr/bin/expect
spawn ftp 192.168.10.102
expect "Name"
send "ftp\r"
expect "Password:"
send "\r"
expect "ftp>"
send "exit\r"
expect eof
[root@localhost ~]# chmod +x hhh.sh 
[root@localhost ~]# ./hhh.sh 

相关文章:

Shell 编程之免交互

一、Here Document 语法格式&#xff1a; 命令 << 标记 ...... ...... 标记 1.用wc -l的命令统计输入的文字的行数 [rootlocalhost ~]# wc -l <<EOF > aaa > bbb > ccc > EOF 3 备注&#xff1a; 显示行数。 2.整体赋值给变量&#xff0c;通过ech…...

github有趣项目:Verilog在线仿真( DigitalJS+edaplayground)

DigitalJS https://github.com/tilk/digitaljs这个项目是一个用Javascript实现的数字电路模拟器。 它旨在模拟由硬件设计工具合成的电路 像 Yosys&#xff08;这里是 Github 存储库&#xff09;&#xff0c;它有一个配套项目 yosys2digitaljs&#xff0c;它可以转换 Yosys 将文…...

性能测试学习-基本使用-元件组件介绍(二)

jmeter优点是&#xff1a;开源免费&#xff0c;小巧&#xff0c;丰富的学习资料和扩展组件 缺点是&#xff1a;1.不支持IP欺骗&#xff0c;分析和报表能力相对于LR欠缺精确度&#xff08;以分钟为单位&#xff09; 工具用户量分析报表IP欺骗费用体积扩展性Loadrunner多(万)精…...

基于大模型的智慧零售教育科研平台——技术方案

一、概述 1.1背景 随着数字经济的快速发展和全社会数字化水平的升级&#xff0c;人工智能的积极作用越来越凸显&#xff0c;人工智能与各个行业的深度融合已成为促进传统产业转型升级的重要方式之一。ChatGPT的出现掀起了又一波人工智能发展热潮&#xff0c;人工智能行业发展势…...

C# using的几个用途

using 关键字有三个主要用途&#xff1a; 1.using 语句定义一个范围&#xff0c;在此范围的末尾将释放对象&#xff1a; string filePath "example.txt"; string textToWrite "Hello, this is a test message!"; // Use the using statement to ensure …...

MyBatis3.4全集笔记

MyBatis 1. MyBatis 简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code&#xff0c;并且改名为MyBatis 。2013年11月迁移到Github。 iBATIS一词来源于“internet”和“abatis”的组合&#xff0c;是一个基于Ja…...

IDEA一键启动多个微服务

我们在做微服务项目开发的时候&#xff0c;每次刚打开IDEA&#xff0c;就需要把各个服务一个个依次启动&#xff0c;特别是服务比较多时&#xff0c;逐个点击不仅麻烦还费时。下面来说一下如何一键启动多个微服务。 操作步骤 点击Edit Configurations 2.点击“”&#xff0c;…...

【Python3】random.choices 权重随机选取 详解

random.choices是Python 3中random模块中的一个函数&#xff0c;用于从指定的序列中以指定的权重随机选择元素。下面我将对该函数进行详细介绍&#xff0c;并提供一些示例代码和注意事项。 函数签名&#xff1a; random.choices(population, weightsNone, *, cum_weightsNone…...

【面试题-015】Redis的线程模型是什么 为什么速度快

redis面试题 Redis的线程模型是什么 为什么速度快&#xff1f; Redis是一个开源的、高性能的键值对&#xff08;key-value&#xff09;数据库。它之所以速度快&#xff0c;主要得益于以下几个方面的设计&#xff1a; 单线程模型&#xff1a; Redis的操作是单线程的&#xff…...

EasyV开发人员的使用说明书

在可视化大屏项目时&#xff0c;开发人员通常需要承担以下任务&#xff1a; 技术实现&#xff1a;根据设计师提供的设计稿&#xff0c;利用前端技术&#xff08;如HTML、CSS、JavaScript等&#xff09;和后端技术&#xff08;根据具体项目需求&#xff0c;可能是Java、Python、…...

构造列表初始化和构造初始化区别

构造列表初始化和构造初始化在C等编程语言中&#xff0c;是两种不同的初始化类实例成员的方式。以下是它们之间的主要区别&#xff1a; 构造列表初始化&#xff08;初始化列表&#xff09; 定义&#xff1a;初始化列表以一个冒号开始&#xff0c;接着是一个以逗号分隔的数据成…...

Message passing mechanism (消息传递机制)

objc_msgSend 是 Objective-C 运行时系统中的一个核心函数&#xff0c;用于实现消息传递机制。在 Objective-C 中&#xff0c;方法调用实际上是消息传递的过程&#xff0c;当你在代码中调用一个方法时&#xff0c;编译器会将其转换为 objc_msgSend 函数的调用。 objc_msgSend …...

详解 Spark SQL 代码开发之数据读取和保存

一、通用操作 /** 基本语法&#xff1a;1.读取&#xff1a;SparkSession.read[.format("format")[.option("...")]].load("path")2.保存&#xff1a;DataFrame.write[.format("format")[.option("...")]][.mode("Save…...

Pulsar 社区周报 | No.2024-05-30 | BIGO 百页小册《Apache Pulsar 调优指南》

“ 各位热爱 Pulsar 的小伙伴们&#xff0c;Pulsar 社区周报更新啦&#xff01;这里将记录 Pulsar 社区每周的重要更新&#xff0c;每周发布。 ” BIGO 百页小册《Apache Pulsar 调优指南》 Hi&#xff0c;Apache Pulsar 社区的小伙伴们&#xff0c;社区 2024 上半年度的有奖问…...

第二证券股票杠杆:4分钟直线涨停!这一赛道,AH股集体爆发!

今日早盘&#xff0c;A股继续小幅震动收拾&#xff0c;首要股指涨跌互现&#xff0c;两市个股跌多涨少&#xff0c;成交有萎缩的趋势。 盘面上&#xff0c;医药、中字头、旅游、房地产等板块相对活跃&#xff0c;混合实践、玻璃基板、AI手机PC、光刻机等板块跌幅居前。 “中字…...

JavaScript 进阶征途:解锁Function奥秘,深掘Object方法精髓

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;JavaScript 精粹 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 &#x1f235;Function方法 与 函数式编程&#x1f49d;1 call &#x1f49d…...

斜拉桥智慧施工数字孪生

基于图扑自主研发的 HT for Web 产品&#xff0c;利用现场照片及 CAD 图纸&#xff0c;结合 PBR 材质&#xff0c;搭建了具有赛博朋克风格的智慧斜拉桥可视化解决方案&#xff0c;精准复现斜拉桥建造规划过程&#xff0c;辅助运维人员对桥梁基建过程的网格化管理。提高桥梁的建…...

【chatGPT API】Function Calling:将自然语言转换为API调用或数据库查询

文章目录 一. 介绍二. 常见用例与Function Calling调用逻辑三. 调用细节1. 调用行为&#xff1a;tool_choice2. 调用规定&#xff1a;functions 四. 实战&#xff1a;查询公司相关产品 一. 介绍 OpenAI可以根据用户的要求输出一个符合用户要求的入参值。然后用户拿到入参值之后…...

Oracle Hint /*+APPEND*/插入性能总结

oracle append用法 Oracle中的APPEND用法主要用于提高数据插入的效率。 基本用法&#xff1a;在使用了APPEND选项后&#xff0c;插入数据会直接加到表的最后面&#xff0c;而不会在表的空闲块中插入数据。这种做法不需要寻找freelist中的free block&#xff0c;从而避免了在…...

正邦科技(day3)

出厂测试 设备校准 这个需要注意的是校准电流、电压、电感的时候有时候负感器会装反&#xff0c;mcu会坏&#xff0c;需要flash一下清空内存...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...