Shell脚本——免交互

news2024/12/24 21:19:52

目录

一、Here Document免交互

1、免交互概述

2、语法格式

2.1示例:免交互方式实现对行数的统计,将要统计的内容置于标记EOF之间,直接将内容传给wc-l来统计

3、变量设定

①变量图换成实际值

②整行内容作为变量并输出结果

③使输出内容换行

④多行注释

⑤完成自动划分磁盘免交互

二、Expect进行免交互

1、Expect定义

2、expect中的免交互操作

①expect脚本解释器

②spawn:启动新的进程并监控和捕捉

③expect:从进程接收字符串

④send:用于向进程发送字符串

⑤exp_continue:匹配多个字符串在执行动作后加此命令

⑥expect eof :结束符

⑦interact:允许用户交互

⑧set:设置会话超时时间

⑨send_users:回显命令

⑩接收参数

三、示例脚本:免交互su切换目录


一、Here Document免交互

1、免交互概述

①使用I/O重定向的方式将命令列表提供给交互式程序

②标准输入的一种替代品,可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地生产出一个文件并用作命令的标准输入,here document可以与非交互式程序和命令一起使用。

2、语法格式

命令 <<标记
.......
内容			#标记之间是传入内容
.......
标记

注意事项:

①标记可以使用任意合法字符(通用的字符是EOF)

②结尾的标记一定要顶格写,前面不能有任何字符

③结尾的标记后面也不能有任何字符(包括空格)

④开头标记前后的空格会被省略掉

2.1示例:免交互方式实现对行数的统计,将要统计的内容置于标记EOF之间,直接将内容传给wc-l来统计

3、变量设定

如果标记之间有变量被使用,会先替换变量值。如果想要将一些内容写入文件,除了常规的方法外,也可以使用here document。如果写入的内容中包含变量,在写入文件时要先将变量替换成实际值,再结合cat命令完成写入

①变量图换成实际值
#!/bin/bash
file="EOF1.txt"
var="Zhuzi"
cat > $file <<EOF
Hi,my name is $var
EOF

②整行内容作为变量并输出结果
#!/bin/bash
file="1.txt"
var="park"
my=$(cat <<EOF >$file
I am going to the $var
EOF
)
echo $my

③使输出内容换行
#!/bin/bash
var="Me too!"
myvar=$(cat <<EOF
How are you?
I'm fine,And you?
$var
EOF
)
echo "$myvar"

④多行注释

Bash的默认注释是“#”,该注释方法支支持单行注释:here document的引入解决了多行注释的问题;":"代表什么都不做的空命令。中间标记区域的内容不会被执行,会被bash忽略掉,因此可达到批量注释的效果

#!/bin/bash
file="zs.txt"
var="bamboo"
myvar=$(cat <<EOF >$file
My name is $var.
How old are you?
Do you want play with me?
 
EOF
)
echo $myvar
###下面部分就被注释了不会显示
:<<EOF
echo "My name is $var."
echo "Do you want play with me?"
EOF

⑤完成自动划分磁盘免交互
fdisk /dev/sdb <<EOF
> n
> p
> 
> 
> 
> 
> w
> EOF

二、Expect进行免交互

1、Expect定义

建立在tcl语言基础的工具,常被用于进行自动化控制和测试主要解决shell脚本中交互相关的问题。

使用expect命令前需要先进行安装tcl与expect软件,在安装expect软件自动安装依赖包tcl

先检查系统内是否安装expect软件包

2、expect中的免交互操作

①expect脚本解释器

expect脚本中首先引入文件,表明使用的是哪一个shell

#!/usr/bin/expect
②spawn:启动新的进程并监控和捕捉

spawn后面通常跟一个Linux执行命令,表示开启一个会话,启动进程,并跟踪后续交互信息。

例如:spawn passwd root

③expect:从进程接收字符串

判断上次输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回

只能捕捉由sawn启动的进程的输出

用于接收命令执行后的输出,然后和期望的字符串匹配

④send:用于向进程发送字符串

向进程发送字符串,用于模拟用户的输入

该命令不能自动回车换行,一般要加\r或者\n,用于代表回车键

1.方式一:

expect "密码"{send "123123\r"}					#同一行send部分要有{  }

2方式二:

expect"密码										#换行send部分不需要有{ ) 
send "abc123\r"

3方式三:

expect											#只要匹配了其中一个情况,执行相应的send语句后退出该expect语句
{											
"密码1" {send "123123\r"}
"密码2" {send "abcdef\r"}
"密码3" {send "abc123\r"}
}
⑤exp_continue:匹配多个字符串在执行动作后加此命令

exp_continue附加于某个expect判断项之后,可以使该项被匹配后,还能继续匹配expect判断语句内的其他项

exp_continue类似于控制语句中的continue语句。表示允许expect继续向下执行指令

注意:使用使用而exp_continue时,如果跟踪像passwd这样的输入密码就结束进程的命令,expect{}外不要再加上expect eof 因为spawn进程结束后会默认向expect发送eof,会导致后面的expect eof执行报错

⑥expect eof :结束符

表示交互结束,等待执行结束,退回到原用户,于spawn对应。

比如切换到root用户,expect脚本默认的是等待10s当执行命令后,默认停留了10s后,自动切回了原用户。

⑦interact:允许用户交互

会停留在目标终端不会退回到原终端,这个时候就可以手工操作了,interact后的命令不起作用。

比如interact后添加exit,并不会退出root用户。而如果没有interact则登录完成后会退出,而不是留在远程终端上。

使用interact会保持在终端而不会退回到原终端

注意:expect eof 与interact只能二选一

⑧set:设置会话超时时间

expect默认的超时时间是10s,通过set命令可以设置会话超时时间,若不是限制超时时间则对应设置为-1

⑨send_users:回显命令

表示回显命令,相当于echo

⑩接收参数

exoect脚本可以接收从bash命令行传递参数,使用[lindex $argc n]获得。其中你从0开始,分别表示第一个,第二个,第三个参数

set hostname [lindex $argv 0]						#相当于 hostname=s§1				
set password [lindex Sargv 1]						#相当于 password=$2					

三、示例脚本:免交互su切换目录

#!/usr/bin/expect
#开启ssh命令,ssh后面跟要远程控制的IP地址
spawn ssh 192.168.79.220
expect {
        "yes/no" { send "yes\n";exp_continue }
        "password" { send "123123\n"}
 
}
interact

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

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

相关文章

杠杆交易在伦敦金市场的优势与风险

伦敦金作为黄金市场的灯塔&#xff0c;每天吸引着全球投资者的目光。伦敦金的特殊地位使得以它为基准的杠杆交易成为众多投资者追逐的目标。在这篇文章中&#xff0c;我们将深入探讨伦敦金杠杆交易的奥秘&#xff0c;带你揭开这一盛宴的神秘面纱。 伦敦金杠杆交易的核心在于通过…

【pytorch】anaconda使用及安装pytorch

https://zhuanlan.zhihu.com/p/348120084 https://blog.csdn.net/weixin_44110563/article/details/123324304 介绍 Conda创建环境相当于创建一个虚拟的空间将这些包都装在这个位置&#xff0c;不需要了可以直接打包放入垃圾箱&#xff0c;同时也可以针对不同程序的运行环境选…

HashSet 的基本操作【集合容器知识回顾 ④】

HashSet 是 Java 中的一个集合类&#xff0c;它实现了 Set 接口。Set 是一种不允许包含重复元素的集合&#xff0c;而 HashSet 则是 Set 接口的一个具体实现。因此&#xff0c;HashSet 用于存储一组唯一的元素&#xff0c;不允许重复。 HashSet 的一些特点&#xff1a; 不允许…

揭开时间序列的神秘面纱:特征工程的力量

目录 写在开头1. 什么是特征工程?1.1 特征工程的定义和基本概念1.2 特征工程在传统机器学习中的应用1.3 时间序列领域中特征工程的独特挑战和需求3. 时间序列数据的特征工程技术2.1 数据清洗和预处理2.1.1 缺失值处理2.1.2 异常值检测与处理2.2 时间特征的提取2.2.1 时间戳解析…

Vue中使用定义的函数时,无法访问到data()里面的数据

const translateItems1 () > {this.translatedItems this.items1.map(item > {return {...item,label: this.$t(item.labelKey)};}); items1是我们data()里面的数据&#xff0c;无法访问到 解决办法 把箭头函数替换为普通函数 const translateItems1 function() {th…

echarts 鼠标移入有单位;echarts 纵坐标有单位;echarts 纵坐标刻度有单位

1.echarts 鼠标移入有单位 tooltip series: [{name: "平均值",type: "line",data: this.avgData,tooltip: {valueFormatter: function (value) {return value 万元}}}]2.echarts 纵坐标有单位&#xff1b;name yAxis: [{type: "value",name: t…

为什么贪婪的 GPU需要快速的对象存储?

一个链条的力量取决于其最薄弱的环节 - 同样&#xff0c;您的AI/ML基础设施的速度也只有您的最慢组件那么快。如果您使用GPU训练机器学习模型&#xff0c;那么您的薄弱环节可能是您的存储解决方案。结果就是我所说的“饥饿GPU问题”。 饥饿GPU问题发生在您的网络或存储解决方案…

三、软硬件工作流程分析

现在的计算机主要是由两部分组成&#xff1a;软件系统和硬件系统。这里先捋清楚硬件和软件的关系&#xff0c;以及电脑 各个组成部分是如何配合工作的。 软件系统主要被分类为两大类&#xff1a; 系统软件&#xff1a;这包括操作系统&#xff0c;如Windows、Linux等。操作系统是…

ManticoreSearch-(安装配置,集群搭建)-学习总结

ManticoreSearch-(安装配置)-学习总结 基础概念安装搭建集群搭建(基于K8S) 原文地址 https://blog.csdn.net/liuyij3430448/article/details/135955025 基础概念 Manticore Search是一个专门为搜索设计的多存储数据库&#xff0c;具有强大的全文搜索功能&#xff0c;适用于…

力扣hot100 三数之和 双指针 细节去重

Problem: 15. 三数之和 文章目录 思路Code 思路 &#x1f468;‍&#x1f3eb; 参考 Code ⏰ 时间复杂度: O ( n 2 ) O(n^2) O(n2) &#x1f30e; 空间复杂度: O ( 1 ) O(1) O(1) class Solution {public List<List<Integer>> threeSum(int[] nums){List&l…

composer常用命令

查看全局配置信息 composer config -gl 设置镜全局像地址 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 去掉-g&#xff0c;即表示只有当前项目使用该镜像 批量安装composer项目依赖 composer install 执行该命令后&#xff0c;会读取当…

算法练习-二叉树的层序遍历(思路+流程图+代码)

难度参考 难度&#xff1a;中等 分类&#xff1a;二叉树 难度与分类由我所参与的培训课程提供&#xff0c;但需要注意的是&#xff0c;难度与分类仅供参考。且所在课程未提供测试平台&#xff0c;故实现代码主要为自行测试的那种&#xff0c;以下内容均为个人笔记&#xff0c;旨…

EasyExcel根据对应的实体类模板完成多个sheet的写入与读取

1.展示模板一的实体类 import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; import com.alibaba.excel.annotation.write.style.ContentRowHeight; import com.alibaba.excel.annotation.write.style.HeadRowH…

软件价值3-A*算法寻路

A*算法&#xff08;A-star算法&#xff09;是一种启发式搜索算法&#xff0c;主要用于在图或网络中找到从起始节点到目标节点的最佳路径。它结合了Dijkstra算法的广度优先搜索和贪婪最优优先搜索的特点&#xff0c;通过估算从起始节点到目标节点的代价来指导搜索方向。 A*算法…

CentOS 8最小安装

简介 CentOS 8的IOS如果下载DVD版本至少有10G 这里我们直接选择最小安装&#xff0c;因此选择最小系统boot版本 CentOS-8.5.2111-x86_64-boot.iso 下载地址 https://mirrors.aliyun.com/centos/8.5.2111/isos/x86_64/ 直接选择CentOS-8.5.2111-x86_64-boot.iso 大小只有789.0…

MIT6.5830 实验0

前置 本次实验使用 Golang 语言实现&#xff0c;在之前的年份中&#xff0c;都是像 cs186 那样使用 Java 实现。原因&#xff1a; Golang 语言作为现代化语言&#xff0c;简单易上手但功能强大。 使参加实验的同学有同一起跑线&#xff0c;而不是像Java那样&#xff0c;有些同…

鸿蒙HarmonyOS——AVSession开发指导

AVSession开发指导 说明&#xff1a; AVSession的所有接口均为系统接口&#xff0c;其功能仅提供给系统应用使用。 会话接入端开发指导 基本概念 会话元数据AVMetadata: 媒体数据相关属性&#xff0c;包含标识当前媒体的ID(assetId)&#xff0c;上一首媒体的ID(previousAsset…

链式二叉树(1)

目录 二叉树的概念&结构 二叉树的遍历概念 手写二叉树测试 二叉树遍历实现代码 递归图解 前序遍历递归图解 中序序遍历递归图解 后续遍历递归图解 二叉树的概念&结构 二叉树是&#xff1a; 空树非空&#xff1a;根节点&#xff0c;根节点的左子树、根节点的右子…

基于MongoDB实现聊天记录的存储

一、mongodb简介 1.1 mongodb简介 MongoDB是一个基于分布式文件存储的数据库&#xff0c;使用C语言编写。它旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB介于关系数据库和非关系数据库之间&#xff0c;是非关系数据库当中功能最丰富、最像关系数据库的。 Mong…

【TCP】三次握手(建立连接)

前言 在网络通信的世界里&#xff0c;可靠传输协议&#xff08;TCP&#xff09;扮演着重要的角色&#xff0c;它保证了数据包能够按顺序、完整地从发送端传送到接收端。TCP协议中有一个至关重要的机制——三次握手。这一过程确保了两个TCP设备在开始数据传输之前建立起一个稳定…