shell---免交互

一、多行重定向

可以理解为这是标准输入的一种替代品,可以帮助脚本开发人员不必使用临时文件来构建输入信息,可以直接产生一个文件,输入文件信息,常与非交互程序和命令一起使用

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

注意事项:

1、表示可以使用任意的合法字符(通用的字符是EOF表示end of file)

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

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

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

5、单引号变量双引号

使用read命令接收用户的输入值会有交互过程

[root@localhost ~]#read i <<EOF
> 10
> EOF
[root@localhost ~]#echo $i
10

设置变量的值

创建用户密码 

使用多行重定向写入文件中(以repo文件举例)

[root@localhost cs]#cat repo.sh 
#!/bin/bash
cat > /cs/http.repo <<EOF
[http]
name=http
baseurl=http://192.168.20.8/
gpgcheck=0
EOF

变量设定

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

[root@localhost cs]#cat repo.sh 
#!/bin/bash
ip="192.168.20.8"
filename="http.repo"
cat > /cs/${filename} <<EOF
[http]
name=http
baseurl=http://${ip}/
gpgcheck=0
EOF
[root@localhost cs]#bash repo.sh 
[root@localhost cs]#ls
http.repo  local.repo  repo.sh
[root@localhost cs]#cat http.repo 
[http]
name=http
baseurl=http://192.168.20.8/
gpgcheck=0

二、免交互expect

定义:

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

基本命令:

2.1 脚本解释器

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

#!/usr/bin/expect

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

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

例: spawn passwd root

2.3 expect :从进程接收字符串

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

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

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

spawn  ##表示开启监控、捕捉模式,后面跟着命令,如ssh,scp等
expect  ##表示开始捕捉,即是从进程开始接收字符串,后面是花括号,表示捕捉的内容{}
send  ##表示遇到捕捉的关键字,send免交互要做的事,即向进程发送字符串
exp_continue ##表示继续捕捉,一般是连续的操作,比如向ssh需要先回答yes,然后继续捕捉password
expect eof ##表示停留10秒以后,自动退出,与spawn相对应
interact  ##表示停留,不再退出

方式一:

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 exp_continue:匹配多个字符串在执行动作后加此命令

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

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

2.6 expect eof:结束符

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

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

2.7 interact:允许用户交互

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

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

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

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

2.8 set:设置会话超时时间

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

2.9 send_users:回显命令

表示回显命令,相当于 echo

2.10 接收参数

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

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

3.示例脚本:免交互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.mzph.cn/news/183345.shtml

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

相关文章

During handling of the above exception, another exception occurred解决方案

During handling of the above exception, another exception occurred解决方案 前言解决方案总结 前言 今天在写python读取图片中的内容的脚本的时候&#xff0c;常用的图像处理库包括Pillow和OpenCV。以下是使用Pillow库读取图片中的计算公式的示例代码&#xff1a; from P…

详解原生Spring当中的额外功能开发MethodBeforeAdvice与MethodInterceptor接口!

&#x1f609;&#x1f609; 学习交流群&#xff1a; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 &#x1f96d;&#x1f96d;3&#xff1a;QQ群&#xff1a;583783…

Redis对象系统

前言 在Redis中有许多数据结构&#xff0c;比如&#xff1a;简单动态字符串(SDS)&#xff0c;双端链表&#xff0c;字典&#xff0c;压缩列表&#xff0c;整数集合等。 Redis并没有直接使用这些数据结构来实现键值对数据库&#xff0c;而是基于这些数据结构创建了一个对象系统。…

vue项目运行时,报错:ValidationError: webpack Dev Server Invalid Options

在运行vue项目中&#xff0c;遇到报错&#xff1a;ValidationError: webpack Dev Server Invalid Options&#xff0c;如下图截图&#xff1a; 主要由于vue.config.js配置文件错误导致的&#xff0c;具体定位到proxy配置代理不能为空&#xff0c;导致运行项目报错&#xff0c;需…

连接备份1128

深度学习—分类识别篇&#xff1a;http://tr.daheng-imaging.com/watch/1050636http://tr.daheng-imaging.com/watch/1050636 深度学习—目标检测篇&#xff1a;http://tr.daheng-imaging.com/watch/1101141http://tr.daheng-imaging.com/watch/1101141 深度学习—缺陷分割篇&a…

Chrome显示分享按钮

分享按钮不见了&#xff01; Chrome://flags Chrome Refresh 2023 Disabled 左上角的标签搜索会到右上角。

MATLAB实战 | APP设计

01、应用实战 【例1】生成一个用于观察视点仰角和坐标轴着色方式对三维图形显示效果影响的App&#xff0c;界面如图1所示。界面右上部的列表框用于选择绘图数据、切换按钮组用于选择绘图方法&#xff0c;中间的旋钮用于设置视点方位角和仰角&#xff0c;右下部的分档旋钮用于设…

Thrift RPC Java、Go、PHP使用例子

文章目录 1、Thrift RPC介绍1.1、Protocol 支持的数据传输协议1.2、Transport 支持的数据传输方式1.3、Server 支持的服务模型1.4、IDL语法数据类型1.5、开发步骤 2、接口定义文件2.1、创建接口定义文件2.2、生成对应平台语言代码2.2.1、下载生成工具2.2.2、生成各平台语言代码…

基于web宠颐生宠物医院系统设计与实现

基于web宠颐生医院系统开发与实现 摘要&#xff1a;时代飞速发展&#xff0c;网络也飞速发展&#xff0c;互联网许多的行业都可以用互联网实现了&#xff0c;互联网已经成为了人们生活中重要的一部分&#xff0c;或多或少的影响着我们的生活&#xff0c;互联网在给我带了方便的…

Bert-VITS2本地部署遇到的错误

关于Bert-VITS2本地部署遇到的错误 1、在下载python中相关依赖时报错 building ‘hdbscan._hdbscan_tree’ extension error: Microsoft Visual C 14.0 or greater is required. Get it with “Microsoft C Build Tools”: https://visualstudio.microsoft.com/visual-cpp-bu…

【安全-SSH】SSH安全设置

今天发现自己的公有云服务器被攻击了 然后查看了登录日志&#xff0c;如上图 ls -sh /var/log/secure vim /var/log/secure然后增加了安全相关的设置 具体可以从以下方面增加安全性&#xff1a; 修改默认SSH端口公有云修改安全组策略及防火墙端口设置登录失败次数锁定用户及…

RabbitMQ消息模型之Routing-Direct

Routing Direct 在Fanout模式中&#xff0c;一条消息&#xff0c;会被所有订阅的队列都消费。但是在某些场景下&#xff0c;我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。 在Direct模型下&#xff1a; 队列与交换机的绑定&#xff0c;不能是任意…

Spring不再支持Java8了

在今天新建模块的时候发现了没有java8的选项了&#xff0c;结果一查发现在11月24日&#xff0c;Spring不再支持8了&#xff0c;这可怎么办呢&#xff1f;我们可以设置来源为阿里云https://start.aliyun.com/ 。 java8没了 设置URL为阿里云的地址

【Vue3】源码解析-虚拟DOM

【Vue3】源码解析 系列文章什么是虚拟DOMVue 3虚拟DOM获取<template>内容生成AST语法树生成render方法字符串得到最终VNode对象 系列文章 【Vue3】源码解析-前置 【Vue3】源码解析-响应式原理 【Vue3】源码解析-虚拟DOM 什么是虚拟DOM 在浏览器中&#xff0c;HTML页面…

5 面试题--redis

伪客户端&#xff1a; 伪客户端的 fd 属性值为 -1&#xff1b;伪客户端处理的命令请求来源于 AOF ⽂件或者 Lua 脚本&#xff0c;⽽不是⽹络&#xff0c;所以这种客户端不需要套接字连接&#xff0c;⾃然也不需要记录套接字描述符。⽬前 Redis 服务器会在两个地⽅ ⽤到伪客户端…

ThermalLabel SDK for .NET 13.0.23.1113 Crack

ThermalLabel SDK for .NET 是一个 .NET 典型类库&#xff0c;它允许用户和开发人员创建非常创新的条码标签并将其发布在 zebra ZPL、EPL、EPSON ESC、POS 以及 Honeywell intermec 指纹中通过在 VB.NET 或 C# 上编写 .NET 纯代码来实现热敏打印机&#xff0c;以实现项目框架的…

Ubuntu Linux玩童年小霸王插卡游戏

1.下载安装模拟器 在Windows平台模拟器非常多&#xff0c;而且效果也很优秀&#xff0c;Linux平台的用户常常很羡慕&#xff0c;却因为系统的缘故&#xff0c;无法使用这样的模拟器&#xff0c;但是随着时代的发展&#xff0c;Linux平台也出现了许多优秀的模拟器&#xff0c;现…

navigator.clipboard is undefined in JavaScript issue [Fixed]

navigator.clipboard 在不安全的网站是无法访问的。 在本地开发使用localhost或127.0.0.1没有这个问题。因为它不是不安全网站。 在现实开发中&#xff0c;可能遇到测试环境为不安全网站。 遇到这个问题&#xff0c;就需要将不安全网站标记为非不安全网站即可。 外网提供了3…

【HTML】VScode不打开浏览器实时预览html

1. 问题描述 预览HTML时&#xff0c;不想打开浏览器&#xff0c;想在VScode中直接实时预览 2. 解决方案 下载Microsoft官方的Live Preview 点击预览按钮即可预览

Unity中Shader优化通用规则

文章目录 前言一、精度优化1、三种精度 fixed / half / float2、位置坐标、物理坐标类使用float3、HDR颜色、方向向量类使用half4、普通纹理、颜色类使用 fixed5、实际上&#xff0c;使用的精度取决于 平台 和 GPU6、现在桌面级GPU都是直接采用 float , Shader中的 fixed / hal…