Linux:Shell编程之免交互

news2024/11/26 20:47:25

目录

绪论

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 5

spawn 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.coloradmin.cn/o/867475.html

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

相关文章

【Linux进行时】进程概念

进程的概念 什么是进程呢&#xff1f; ❓首先我们需要认识一下什么叫进程呢&#xff1f; 课本概念&#xff1a;程序的一个执行实例&#xff0c;正在执行的程序等 &#x1f525;内核观点&#xff1a;担当分配系统资源&#xff08;CPU时间&#xff0c;内存&#xff09;的实体。…

海外ASO优化之关于应用的营销2

在目标受众中建立信任度&#xff0c;并获得博客/新闻网站的热榜&#xff0c;这样自然会提高应用的知名度和目标受众的认知度。就博客读者而言&#xff0c;需要找出推荐的最佳时间和真正推动我们应用是什么。 1、提供了App Store或Google Play的直接链接。 我们首先需要创建一个…

2023年中国锂电池X-Ray及CT检测设备市场竞争格局及行业市场规模前景分析[图]

锂电池X-Ray成像检测设备主要是利用X射线穿透电芯时的吸收、反射、散射效应实现成像并对图像进行处理及算法分析&#xff0c;实现非接触式的无损、自动测量锂电池电芯内部特征尺寸以进行瑕疵检测&#xff0c;确认电芯结构是否合格、避免造成电芯内部短路等安全隐患。 锂电池X-…

fork创建多个子进程

fork创建多个子进程 示例代码 fork1.c #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h>int main(int argc,char **argv) {int i, j;pid_t pid;for (i 0; i < 3; i){pid fork();if (pid < 0){perror(&q…

Zip压缩包有密码,如何删除?

Zip压缩包设置设置了密码&#xff0c;想要删除密码&#xff0c;除了将压缩包解压出来之后再将文件压缩为不带密码的压缩文件以外&#xff0c;还有一种删除密码的方法。设置方法如下&#xff1a; 右键点击zip文件&#xff0c;找到打开方式&#xff0c;以Windows资源管理器方式打…

sql server profiler使用

一、打开sql server profiler 二、配置 比如我们只过滤包含这个关键字的&#xff0c;输入&#xff1a;%Employees%

【C++11】lambda表达式 | 包装器

文章目录 一.lambda表达式1.lambda表达式概念2.lambda表达式语法3.lambda表达式交换两个数4.lambda表达式底层原理 二.包装器1.function包装器①function包装器介绍②function包装器统一类型③function包装器的意义 2.bind包装器①bind包装器介绍②bind包装器绑定固定参数③bin…

计算机基础之RAID技术

概述 RAID&#xff0c;Redundant Array of Independent Disks&#xff0c;独立磁盘冗余阵列&#xff0c;一种把多块独立的硬盘&#xff08;物理硬盘&#xff09;按不同的方式组合起来形成一个硬盘组&#xff08;逻辑硬盘&#xff09;&#xff0c;从而提供比单个硬盘更高的存储…

Springboot3整合使用aj-captcha行为验证码解决方案

截止到目前(2023-04-20)&#xff0c;Springboot最新稳定版本已经迭代到3.0.5&#xff0c;而我们项目中使用的行为验证码框架aj-captcha还没有适配Springboot3&#xff0c;码云上类似的请求也没有得到过回应&#xff0c;于是决定自己动手适配一下&#xff0c;研究下来发现适配3.…

oi知识表+NOIP提高组算法及算法思想总结

&#xfeff;算法及算法思想总结 │ By lib │ ├暴力 ├模拟 ├递归及递推:数位统计类 ├构造 ▼├排序算法 │ ├冒泡排序 │ ├选择排序 │ ├计数排序 │ ├基数排序 │ ├插入排序 │ ├归并排序 │ ├快速排序 │…

腾讯云轻量应用服务器地域怎么选?上海广州北京?

腾讯云轻量应用服务器地域是指轻量服务器数据中心所在的地理位置&#xff0c;如上海、广州和北京等地域&#xff0c;如何选择地域&#xff1f;地域的选择建议就近原则&#xff0c;用户距离轻量服务器地域越近&#xff0c;网络延迟越低&#xff0c;速度就越快&#xff0c;根据用…

day38 滑动窗口

1. 滑动窗口 应用场景&#xff1a; 满足xxx条件&#xff08;计算结果、出现次数、同时包含&#xff09; 关键词&#xff1a;最长最短子串无重复等等 1&#xff09;最长 左右指针在起始点&#xff0c;R 向右依次滑动循环&#xff1b; 如果&#xff1a; 窗内元素满足条件&#x…

聚观早报 | 三星和LG发展电车零件业务;宝马召回国产和进口电车

【聚观365】8月12日消息 三星和LG加速发展电车零件业务宝马召回部分国产和进口电动汽车华为有意推动车BU独立运营长城汽车CTO就“中国汽车在一起”发声比科奇芯片被Contela选为单元的核心组件 三星和LG加速发展电车零件业务 随着电动汽车需求的增加&#xff0c;对电池、芯片等…

Redis - 数据类型映射底层结构

简介 从数据类型上体现就是&#xff0c;同一个数据类型&#xff0c;在不同的情况下会使用不同的编码类型&#xff0c;底层所使用的的数据结构也不相同。 字符串对象 字符串对象的编码可以是 int、raw 和 embstr 三者之一。 embstr 编码是专门用于保存简短字符串的一种优化编…

.DS_Store是什么文件

dsstore是自定义属性的隐藏文件。dsstore全称“Desktop Services Store”&#xff0c;是一种由苹果公司的Mac OS X操作系统所创造的隐藏文件&#xff0c;目的在于存贮目录的自定义属性&#xff0c;例如文件们的图标位置或者是背景色的选择。 dsstore是什么文件&#xff1f; ds…

高端百度地图开发2:自定义水滴头像(鼠标事件、API封装对接)

高端百度地图开发系列 高端百度地图开发1&#xff1a;自定义水滴头像&#xff08;自定义标注覆盖物、Overlay覆盖类&#xff09; 自定义水滴头像之鼠标事件、API封装对接 高端百度地图开发系列一、添加自定义覆盖物的方法二、对接API数据1.获取API数据(模拟)2.遍历数据3.添加自…

LeetCode--HOT100题(28)

目录 题目描述&#xff1a;2. 两数相加&#xff08;中等&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;2. 两数相加&#xff08;中等&#xff09; 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且…

让我们玩个游戏:找出缅北诈骗网络中的“狼人杀”!

大数据产业创新服务媒体 ——聚焦数据 改变商业 近期&#xff0c;《孤注一掷》掀起了一阵观影热潮。这部电影展现了在高科技与诈骗手法交织下的惊心动魄的故事&#xff0c;不仅让观众们大呼过瘾&#xff0c;更让人们对现实生活中日益猖獗的缅北诈骗产生了深入的反思。 《孤注一…

【100天精通python】Day32:使用python操作数据库_MySQL下载、安装、配置、使用实战

专栏导读 专栏订阅地址&#xff1a;https://blog.csdn.net/qq_35831906/category_12375510.html 1 MySQL概述 MySQL是一款互联网上广泛使用的开源关系型数据库管理系统。它最初由瑞典的MySQL AB公司开发&#xff0c;并于1995年首次发布。如今&#xff0c;MySQL由Oracle公司维护…

Redis缓存设计

缓存能够有效地加速应用的读写速度&#xff0c;同时也可以降低后端负载&#xff0c;对日常应用的开发至关重要。但是将缓存加入应用架构后也会带来一些问题&#xff0c;本文将针对这些问题介绍缓存使用技巧和设计方案。 1缓存的收益和成本 下图左侧为客户端直接调用存储层的架…