shell脚本免交互

一.Here Document免交互

1.免交互概述 

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

  • 是一种标准输入,只能接收正确的指令或命令

2.格式:

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

注意事项

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

  2. 结尾的标记一定要顶格写,前面不能有任何字符(包括空格)

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

  4. 开头标记前后空格会被省略掉

3. 使用:

3.1使用 passwd命令设置密码:

 

 3.2 完成自动划分磁盘免交互:


fdisk /dev/sdb <<EOF
> n
> p
>
>
>
>
> w
> EOF

二、expect进行免交互:

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

使用expect命令前需要先进行安装tcl与expect软件,在安装expect软件自动安装依赖包tcl
先检查系统内是否安装expect软件包

 安装Expect服务:yum install -y expect

 1.常见转义符 

    \n    表示换行符。\t    表示制表符。\r    表示回车符。\b    表示退格符。


 2.基本命令


 2.1 脚本解释器


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

#!/usr/bin/expect

2.2 spawn:

  • 启动新的进程并监控和捕捉
  • spawn 后面通常跟一个Linux执行命令,表示开启一个会话、启动进程,并跟踪后续交互信息。
  • 例如:spawn passwd root


 2.3 expect :

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

2.4 send:

  • 用于向进程发送字符串 
  • 向进程发送字符串,用于模拟用户的输入
  • 该命令不能自动回车换行,一般要加\r(回车)或者\n,用于代表回车键
     


方式一: 

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


 方式二:

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


 方式三:expect支持多个分支

expect                                            #只要匹配了其中一个情况,执行相应的send语句后退出该expect语句
{                                            
"密码1" {send "123123\r"}
"密码2" {send "abcdef\r"}
"密码3" {send "abc123\r"}
}


2.5 结束符:

  1.  expect eof:表示交互结束,等待执行结束,退回到原用户,与spawn对应。就是切换之前的终端用户
  2. interact:执行完成后保持交互状态,把控制权交给控制台,会停留在目标终端而不会退回到原终端,就是留在当前终端用户

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

2.6 sed设置超时时间 :


  expect 默认的超时时间是 10 秒,通过 set 命令可以设置会话超时时间, 若不限制超时时间则应设置为-1。
   例:set timeout 5

2.7 exp_continue

  • exp_continue 附加于某个 expect 判断项之后,可以使该项被匹配后,还能继续匹配该 expect 判断语句内的其他项。
  • exp_continue类似于控制语句中的 continue 语句。表示允许 expect 继续向下执行指令。

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

2.8 send_user

    send_user 表示回显命令,相当于 echo。打印的功能

2.9 接收参数:

  expect 脚本可以接受从bash命令行传递参数,使用     [ lindex $argv 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


 3.嵌套模式

将 expect 过程融入 Shell 当中,方便执行和处理。
像ssh、su这种会切换环境的交互式命令一般不建议使用嵌入执行模式。
例 :创建用户并设置密码

#!/bin/bash
user=$1
password=$2
#非交互命令放在expect外面
useradd $user
#开始免交换执行
/usr/bin/expect <<-EOF        #expect 开始标志
spawn passwd $user             #开启一个进程跟踪 passwd 命令,expect 只能捕捉该进程信息expect "新的*"                 
send "${password}\r"         
expect "重新*"     
send "${password}\r"         #*表示匹配任意字符
expect eof                
EOF

四.实用脚本 :
 

例:ssh远程登录 ,实现免交互自动登出

实现 ssh 自动登录
vim  ssh.sh
创建脚本
脚本内容:
#!/usr/bin/expect
#声明脚本使用的shell
set ip 192.168.247.20
#设置变量ip的内容为 192.168.247.20
set user root
#设置变量user的内容为root
set password 123
#设置变量password的内容为123
set timeout 10
#设置超时时间为10s
spawn ssh $user@$ip
#捕捉ssh root@192.168.247.20,若捕捉到此内容则执行下面expect内容
expect {
#spawn捕捉成功则继续使用expect捕捉"yes/no" {send "yes\r";exp_continue} 
#若捕捉到yes/no此内容则输入yes\r,\r为回车,然后继续捕捉,若只捕捉一次则不需要继续捕捉exp_continue,可以不加这个"password" {send "$password\n"}
#继续捕捉内容password,捕捉到后输入变量$password的内容,\r为回车,不继续捕捉则不需要exp_continue
}
#interact 
expect eof 
#结束符,interact结束符会保留在ssh过去主机的环境中,可以进行操作,
若为expect eof结束符则在ssh过去的主机中等待10s且不能进行任何操作即返回自己主机环境


 

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

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

相关文章

2023年菏泽市中职学校技能大赛“网络安全”赛项规程

2023年菏泽市中职学校技能大赛 “网络安全”赛项规程 一、赛项名称 赛项名称&#xff1a;网络安全 赛项所属专业大类&#xff1a;信息技术类 二、竞赛目的 通过竞赛&#xff0c;检验参赛选手对网络、服务器系统等网络空间中各个信息系统的安全防护能力&#xff0c;以及分析…

系统架构:数据库

文章目录 数据库设计关系代数规范化理论求候选键特殊函数依赖Armstrong公理 数据库设计 步骤产出说明1.根据数据要求和处理要求进行需求分析数据流图、数据字典、需求说明书等分析数据流向、数据详细含义等&#xff0c;分析具体需求2.对现实世界进行抽象&#xff0c;进行概念结…

基于 Alpine 环境源码构建 alibaba-tengine(阿里巴巴)的 Docker 镜像

About Alpine&#xff08;简介&#xff09; Alpine Linux 是一款极其轻量级的 Linux 发行版&#xff0c;基于 busybox&#xff0c;多被当做 Docker 镜像的底包&#xff08;基础镜像&#xff09;&#xff0c;在使用容器时或多或少都会接触到此系统&#xff0c;本篇文章我们以该镜…

Jmeter生成可视化的HTML测试报告

Jmeter也是可以生成测试报告的。 性能测试工具Jmeter由于其体积小、使用方便、学习成本低等原因&#xff0c;在现在的性能测试过程中&#xff0c;使用率越来越高&#xff0c;但其本身也有一定的缺点&#xff0c;比如提供的测试结果可视化做的很一般。 不过从3.0版本开始&…

Mysql group by使用示例

文章目录 1. groupby时不能查询*2. 查询出的列必须在group by的条件列中3. group by多个字段&#xff0c;这些字段都有索引也会索引失效&#xff0c;只有group by单个字段索引才能起作用4. having条件必须跟group by相关联5. 用group by做去重6. 使用聚合函数做数量统计7. havi…

基于FPGA的FIR低通滤波器实现(附工程源码),matlab+vivado19.2+simulation

基于FPGA的FIR低通滤波器实现(附工程源码) 文章目录 基于FPGA的FIR低通滤波器实现(附工程源码)前言一、matlab设计FIR滤波器&#xff0c;生成正弦波1.设计FIR滤波器1.生成正弦波.coe 二、vivado1.fir滤波器IP核2.正弦波生成IP核3.时钟IP核设置4.顶层文件/测试文件代码 三.simul…

记忆正则表达式的基本元件

正则常见的三种功能&#xff0c;它们分别是&#xff1a;校验数据的有效性、查找符合要求的文本以及对文本进行切割和替换等操作。 正则表达式&#xff0c;简单地说就是描述字符串的规则。在正则中&#xff0c;普通字符表示的还是原来的意思&#xff0c;比如字符 a&#xff0c;…

小程序中的页面配置和网络数据请求

页面配置文件和常用的配置项 1.在msg.json中配置window中的颜色和背景色 "navigationBarBackgroundColor": "#efefef","navigationBarTextStyle": "black" 2.可以看到home中的没有发生变化但是msg的发生变化了&#xff0c;这个和前面的…

Mimikatz免杀实战:绕过360核晶和defender

文章目录 前言绕过360核晶实现思路完整代码运行测试 绕过WD实现思路MiniDumpWriteDump回调函数加密dump文件 完整代码运行测试 参考文章 前言 通常来说&#xff0c;即使我们成功实现了mimikatz的静态免杀&#xff0c;其抓取hash的行为仍可能会被防病毒软件检测到虽然你可以通过…

算法通关村第九关——透彻理解二分查找

1.前言 常见的查找算法有顺序查找、二分查找、插值查找、斐波那契查找、树表查找、分块查找、哈希查找等。如果进行归类&#xff0c;那么二分查找、插值查找&#xff08;一种查找算法&#xff09;以及斐波那契查找都可以归为插值查找&#xff08;大类&#xff09;。而插值查找…

ES搭建集群

一、创建 elasticsearch-cluster 文件夹 创建 elasticsearch-7.8.0-cluster 文件夹&#xff0c;在内部复制三个 elasticsearch 服务。 然后每个文件目录中每个节点的 config/elasticsearch.yml 配置文件 node-1001 节点 #节点 1 的配置信息&#xff1a; #集群名称&#xff0…

Android相机-架构

引言&#xff1a; 主要是针对CameraAPI v2 HAL3的架构对Android相机系统进行梳理。 相机架构 App和FrameWork packages/apps/Camer2 frameworks/ex/camera2 Camera API v2&#xff1b;Camera2 CameraDevice&#xff1a; CameraCaptureSession&#xff1a; CameraService AIDL…

设计模式(8)外观模式

一、 1、使用背景&#xff1a;降低访问复杂系统的内部子系统时的复杂度&#xff0c;简化客户端之间的接口。 2、定义&#xff1a; 为子系统中的一组接口定义一个一致的界面&#xff0c;此模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用。完美地体现…

什么是安全测试报告,怎么获得软件安全检测报告?

安全测试报告 软件安全测试报告&#xff1a;是指测试人员对软件产品的安全缺陷和非法入侵防范能力进行检查和验证的过程&#xff0c;并对软件安全质量进行整体评估&#xff0c;发现软件的缺陷与 bug&#xff0c;为开发人员修复漏洞、提高软件质量奠定坚实的基础。 怎么获得靠谱…

NLP预训练模型超大规模探索

总共从四方面来进行比较。 第一个方面&#xff0c;高层次方法&#xff08;自监督的预训练方法&#xff09;对比&#xff0c;总共三种方式。 语言模型式&#xff0c;就是 GPT-2 那种方式&#xff0c;从左到右预测&#xff1b;BERT-style 式&#xff0c;就是像 BERT 一样将一部…

多传感器分布式融合算法——加权最小二乘WLS融合/简单凸组合SCC融合

加权最小二乘WLS融合/简单凸组合SCC融合——多传感器分布式融合算法 原创不易&#xff0c;路过的各位大佬请点个赞 主要讲解算法&#xff1a; 加权最小二乘融合WLS 简单凸组合融合SCC 应用于: 多传感器网络协同目标跟踪/定位/导航 联系WX: ZB823618313 目…

框架分析(2)-React

框架分析&#xff08;2&#xff09;-React 专栏介绍React核心思想关键特性和功能组件化开发单向数据流JSX语法强大的生态系统 优缺点分析优点缺点 专栏介绍 link 主要对目前市面上常见的框架进行分析和总结&#xff0c;希望有兴趣的小伙伴们可以看一下&#xff0c;会持续更新的…

【数据结构入门指南】二叉树

【数据结构入门指南】二叉树 一、二叉树的概念二、现实中的二叉树三、特殊的二叉树四、二叉树的性质五、二叉树的存储结构5.1 顺序结构5.2 链式结构 一、二叉树的概念 二叉树是一棵特殊的树。一棵二叉树是结点的一个有限集合&#xff0c;该节点&#xff1a; ①&#xff1a;或者…

【Java转Go】快速上手学习笔记(四)之基础篇三

目录 泛型内置泛型的使用切片泛型和泛型函数map泛型泛型约束泛型完整代码 接口反射协程特点WaitGroupgoroutine的调度模型&#xff1a;MPG模型 channel介绍语法&#xff1a;举例&#xff1a;channel遍历基本使用和协程一起使用案例一案例二 select...casemain.go 完整代码 文件…

chapter 3 Free electrons in solid - 3.2 量子自由电子理论对一些现象的解释

3.2 自由电子气的热容 Heat capacity of free electron gas 3.2.1 计算自由电子的热容 Calculation of Heat Capacity of free Electrons T>0K, total energy of free electrons: E ∫ E d N 3 5 N e E F 0 [ 1 5 12 π 2 ( k B T E F 0 ) 2 ] E \int EdN \frac{3}{5}…