Linux:Shell编程之免交互

目录

绪论

1、here   Document免交互

1.1 格式

1.2 cat结合免交互实现重定向输出到指定文件

 1.3 变量替换

2、Expect免交互

2.1 三种写法

3、免交互实现普通用户切换root

3.1 send_user

4、接收参数

5、嵌入执行模式

6、ssh远程登录


绪论

免交互:不需要人为控制就可以完成的自动化操作(自动化运维)

1、here   Document免交互

使用i/o(输入/输出)重定向的方式,将命令的列表提供给交互式的程序或者命令

cat read 是一种标准输入,只能接受正确的指令或者命令

1.1 格式

命令  <<标记

...

...

标记

eg:

注意事项

· 标记可以使用人以合法字符(通常用EOF)

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

· 结尾的标记后面,也不能有任何字符,包括空格

· 如果开头的标记前有空格,这个空格会被自动省略 

eg:read  i  <<EOF      read只能输入一次

>123

>EOF

echo  $i

1.2 cat结合免交互实现重定向输出到指定文件

 1.3 变量替换

vim  test.sh进入编辑

#!/bin/bash

file="test.txt"

i="school"

cat  >  $file  <<EOF

I  am  going  to  $i

EOF  保存退出

2、Expect免交互

tcl语言基础之上的一种工具,自动化测试和控制,在脚本中解决交互的问题

转义符:\n 换行 \t制表符,tab键 \r回车 \b退格键,就是删除键

基本命令格式: #!/usr/bin/expect

语法:

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

· expect,捕获,上一次执行的命令中,是否包含指定的字符串,如果有立即返回,否则等待超时,自动退出(默认超时时间为10s)

· expect 只能捕获由spawn启动的进程输出

· send 向进程发送字符串,用于模拟用户的输入,该命令不能自动回车,一般后面加一个回车键:\r 或者\n

2.1 三种写法

第一种写法
#!/use/bin/expect
set  timeout  5
spawn  passwd  lisi
expect  "新的密码"
send  "abc123\r"
expect  "重新输入新的密码"
send  "abc123\r"
expect  eof第二种写法
#!/use/bin/expect
set  timeout  5
spawn  passwd  lisi
expect  "New  password"  {send  "123\r"}
expect  "Retype  new  password"  {send  "123\r"}
expect  eof第三种写法:多分支结构
#!/use/bin/expect
set  timeout  5
spawn  passwd  lisi
expect{
"密码1"{send  "abc123\r"}
"密码2"{send  "abc123\r"}
"密码3"{send  "abc123\r"}      只要匹配其中一个情况,执行相应的send语句,然后退出}
结束符
expect  eof   会切换回之前的终端
interact 留在当前终端不变
set 设置超市等待时间,默认是10s
set timeout 5  -1()则表示永不超时

3、免交互实现普通用户切换root

vim  qiehuan.sh
#!/usr/bin/expect
set  timeout  5
spawn  su  root
expect  "passwd"
send  "123\r"
expect  eof  保存退出
chmod 777 目录
su  -  lisi
sh  qiehuan.sh

expect_continue 可以在expect判断之后,继续匹配expect,捕获的其他内容,类似于脚本中continue,表示允许继续向下执行指令

使用expect_continue的结束语不能使用expect  eof

expect  {

"(yes/no)"  {send  "yes\r";exp_continue}

"passwd"  {send"123\r"}

}

3.1 send_user

send_user 会先信息,相当于echo跟上用户想要输出的内容

4、接收参数

类似于shell当中的位置变量$1 $2

set  hostname  [linux  $argv  0]  $1

 set  password  [linux  $argv  0]  $2

eg:
set  timeout  5
set  usr  [lindex  $argv  0]
set  passwd  [lindex  $argv  1]
spawn  su  -  $user
expect  "密码" (或者passwd)
send  "$passwd\r"
expect  "]$"
send_user  "普通用户"
expect  "]#"
send_user  "管理员"
interact  
保存退出
./qiehuan  lisi  123

5、嵌入执行模式

如果涉及终端切换,最好不要用嵌入模式

将expect过程融入shell中,方便执行和处理

eg:vim  useradd.sh
#!/bin/bash
user=$1
passwd=$2
useradd  $user
/usr/bin/expect  <<  -EOF
#expect 开始表示
spawn  passwd  $user
expect  "新的*"
send  "${passwd}\r"
expect  "重新*"
send  "${passwd}\r"
expect  eof
EOF
保存退出
sh  useradd.sh  lisi  123

6、ssh远程登录

#!/usr/bin/expect
set ip 192.168.233.30  #指定远程登录的ip地址
set user root
#指定为root用户
set password 123
#设定密码为123
set timeout 5spawn ssh $user@$ip   
expect  {"yes/no" isend "yes\r" ;exp_continue}
"password" isend " $password\r" }
}
expect eof保存退出
chmod   777   ssh.sh
./ssh.sh

6.1 通过传参的方式实现

#!/usr/bin/expect
set name [lindex $argv 0]
set ip [lindex $argv 1]
set password [lindex $argv 2]
set timeout 5
spawn ssh
$name@$ip
expect {
"refused" {send_ _user "访问被拒绝\r"}
"No route to host" {send_ _user "主机名或者ip地址有误\n"}
"yes/no" {send "yes\r" ;exp_ continue}
password" {send " $password\r"}
}
expect eof

保存退出

./ssh.sh  root  20.0.0.30  123

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

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

相关文章

HA3 SQL样本实验:一种混合计算查询的全新样本解决方案

作者&#xff1a;陆唯一(芜霜) HA3&#xff08;对外开源代号&#xff1a;Havenask &#xff09;是阿里智能引擎团队自研的大规模分布式检索系统&#xff0c;广泛应用于阿里内部的搜索业务&#xff0c;是十多年来阿里在电商领域积累下来的核心竞争力产品。Ha3 SQL 是在原有Ha3引…

18.3.0:Dynamic Web TWAIN Crack Web 文档扫描 SDK

Dynamic Web TWAIN用于快速部署 Web 应用程序的文档扫描 SDK&#xff0c;文档扫描SDK&#xff0c;&#xff0c;超过 5300 家公司信任 Dynamic Web TWAIN &#xff0c;因其稳健性和安全性而受到超过 5300 家公司的信赖&#xff0c;Dynamic Web TWAIN 是一款基于浏览器的文档扫描…

Visual Studio 2022安装

Visual Studio下载网址

十三、ESP32PS2摇杆(ADC)

1. 运行效果 在上下左右操作PS2摇杆的时候,会检测到数据 2. 滑动电阻

如何微调优化你的ChatGPT提示来提高对话质量

ChatGPT会话质量很大程度上取决于微调优化提示的艺术。本文旨在阐明微调提示的复杂性&#xff0c;以确保你可以充分发挥ChaGPT这一颠覆性工具的潜力。 与ChatGPT对话的关键部分是“提示”。即&#xff1a;你输入的问题或陈述&#xff0c;它决定了人工智能的响应。类似于引导对…

使用vite创建Vue/React前端项目,配置@别名和Sass样式,又快又方便

Vite官方网站&#xff1a;Vite | 下一代的前端工具链 Vite 并不是基于 Webpack 的&#xff0c;它有自己的开发服务器&#xff0c;利用浏览器中的原生 ES 模块。这种架构使得 Vite 比 Webpack 的开发服务器快了好几个数量级。Vite 采用 Rollup 进行构建&#xff0c;速度也更快…

WEB集群——LVS-DR 群集、nginx负载均衡

1、基于 CentOS 7 构建 LVS-DR 群集。 2、配置nginx负载均衡。 一、 LVS-DR 群集 1、LVS-DR工作原理 LVS-DR&#xff08;Linux Virtual Server Director Server&#xff09; 名称缩写说明 虚拟IP地址(Virtual IP Address) VIPDirector用于向客户端计算机提供服务的IP地址真实…

MPAS-A原理及陆面模式的基本概念

跨尺度预测模式&#xff08;The Model for Prediction Across Scales - MPAS&#xff09;是由洛斯阿拉莫斯实验室和美国国家大气研究中心(NCAR)共同开发&#xff0c;其由3个部分组成&#xff0c;分别称为 MPAS-A&#xff08;大气模型&#xff09;、MPAS-O&#xff08;海洋模型&…

【设计模式】适配器模式

适配器模式&#xff08;Adapter Pattern&#xff09;是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式&#xff0c;它结合了两个独立接口的功能。 这种模式涉及到一个单一的类&#xff0c;该类负责加入独立的或不兼容的接口功能。举个真实的例子&#xff…

在CMamke生成的VS项目中插入程序

在主文件夹的CMakeLists.tex中加入SET(COMPILE_WITH_LSVM OFF CACHE BOOL "Compile with LSVM") 再添加IF(COMPILE_WITH_LSVM) MESSAGE("Compiling with: LSVM") ADD_DEFINITIONS(-DCOMPILE_WITH_LSVM) ADD_SUBDIRECTORY(LSVM) LIST(APPEND SRC LSVM_wrap…

什么是CSS Grid布局?什么是Flexbox布局?它们两者有什么不同?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CSS Grid布局⭐ Flexbox布局⭐ 不同之处⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web…

vuejs 设计与实现 - 渲染器 - 挂载与更新

渲染器的核心功能:挂载与更新 1.挂载子节点和元素的属性 1.2挂载子节点 (vnode.children) vnode.children可以是字符串类型的&#xff0c;也可以是数组类型的&#xff0c;如下&#xff1a; const vnode {type: div,children: [{type: p,children: hello}] } 可以看到&#…

预测知识 | 神经网络、机器学习、深度学习

预测知识 | 预测技术流程及模型评价 目录 预测知识 | 预测技术流程及模型评价神经网络机器学习深度学习参考资料 神经网络 神经网络&#xff08;neural network&#xff09;是机器学习的一个重要分支&#xff0c;也是深度学习的核心算法。神经网络的名字和结构&#xff0c;源自…

vue-拦截器

第一步 起步 | Axios 中文文档 | Axios 中文网 安装 npm install axios ​ ​​​​​​ ​ ​ 第二步 ​ ​ 所有的请求都叫http协议 ​ ​ ​ ​ ​ 第三步 ​ 导入后即可使用里面的方法 ​ 任何一个东西都可以导出 ​ ​ 只有一个的时候只需要用defau…

PHP证券交易员学习网站mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP证券交易员学习网站 是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 下载地址https://download.csdn.net/download/qq_41221322/88205549 PHP证券交易员…

神码ai伪原创【php源码】

这篇文章主要介绍了python下载后在哪打开&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 火车头采集ai伪原创插件截图&#xff1a; https://www.python.org/ftp/python/3.9.5…

Hadoop理论及实践-HDFS四大组件关系(参考Hadoop官网)

NameNode&#xff08;名称节点&#xff0c;Master主节点&#xff09; NameNode主要功能 1、NameNode负责管理HDFS文件系统的元数据&#xff0c;包括文件&#xff0c;目录&#xff0c;块信息等。它将元数据Fsimage与Edit_log持久化到硬盘上。一个是Fsimage(镜像文件&#xff09…

Web 服务器 -【Tomcat】的简单学习

Tomcat1 简介1.1 什么是Web服务器 2 基本使用2.1 下载2.2 安装2.3 卸载2.4 启动2.5 关闭2.6 配置2.7 部署 3 Maven创建Web项目3.1 Web项目结构3.2 创建Maven Web项目 4 IDEA使用Tomcat4.1 集成本地Tomcat4.2 Tomcat Maven插件 Tomcat 1 简介 1.1 什么是Web服务器 Web服务器是…

父进程等待子进程退出 / 僵尸进程孤儿进程

Q&#xff1a;父进程为什么要等待子进程退出&#xff1f; A&#xff1a;回顾创建子进程的目的&#xff0c;就是让子进程去处理一些事情&#xff0c;那么“事情干完了没有”这件事&#xff0c;父进程需要知道并收集子进程的退出状态。子进程的退出状态如果不被收集&#xff0c;…

30、Flink SQL之SQL 客户端(通过kafka和filesystem的例子介绍了配置文件使用-表、视图等)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…