chapter05-Shell编程之免交互笔记

embedded/2024/11/29 15:13:19/

​ chapter05-Shell编程之免交互

Here Document概述

使用I/O重定向的方式将命令列表提供给交互式程序
标准输入的一种替代品
主要作用是在命令执行过程中替代人为输入,类似于起临时文件的作用,只是比使用文件更方便灵活。
语法格式

命令  <<标记
...
...
标记

与cat命令配合使用

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Here Document使用注意事项

标记可以使用任意合法字符
结尾的标记一定要顶格写,前面不能有任何字符
结尾的标记后面也不能有任何字符(包括空格)
开头标记前后的空格会被省略掉

Here Document免交互

通过read命令接收输入并打印

[root@localhost ~]# vim here_non_interactive_read.sh [root@localhost ~]# vim here_non_interactive_passwd.sh 
#!/bin/bash
passwd jerry <<EOF
This_is_password		
This_is_password
EOF
[root@localhost ~]# chmod +x here_non_interactive_passwd.sh
[root@localhost ~]# ./here_non_interactive_passwd.sh
[root@localhost ~]# 

Here Document变量设定

变量替换

[root@localhost ~]# vim here_var_replace.sh
#!/bin/bash
doc_file="2019.txt"
i="company"
cat > $doc_file << HERE
Take him from home to $i
HERE
[root@localhost ~]# chmod +x here_var_replace.sh
[root@localhost ~]# ./here_var_replace.sh
[root@localhost ~]# cat 2019.txt 
Take him from home to company

案例

编写脚本,用以下内容覆盖dhcp配置文件
/etc/dhcp/dhcpd.conf

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

expect概述

是由 Don Libes 基于TCL(Tool Command Language )语言开发的,是一种脚本语言,主要应用于自动化交互式操作的场景。
借助expect处理交互的命令,可以将交互过程如ssh登录、ftp登录等写在一个脚本上,使之自动化完成。
尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率。

使用场景:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

expect安装

挂载光盘
制作本地YUM源
执行安装命令

[root@localhost ~]# yum -y install expect
[root@localhost~]# rpm -qa|grep expect
expect-5.45-14.el7_1.x86_64 
[root@localhost ~]# rpm -qa|grep tcl
tcl-8.5.13-8.el7.x86_64

expect用法

一般不直接使用expect命令,而是定义except脚本

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

直接使用expect命令

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

交互式使用expect

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

匹配多个条件时,也可以:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

expect脚本

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

expect脚本命令

spawn
启动进程,并跟踪后续交互信息
expect
判断上次输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回
只能捕捉由spawn启动的进程的输出
用于接收命令执行后的输出,然后和期望的字符串匹配

send
向进程发送字符串,用于模拟用户的输入
该命令不能自动回车换行,一般要加 \r 或 \n
结束符
expect eof
等待执行结束
interact
执行完成后保持交互状态,把控制权交给控制台

set
设置超时时间,过期则继续执行后续指令
单位是秒
timeout -1表示永不超时
默认情况下,timeout是10秒
exp_continue
允许expect继续向下执行指令
send_user
回显命令,相当于echo

接收参数
expect脚本可以接受从bash传递的参数
可以使用[lindex $argv n]获得
n从0开始,分别表示第一个,第二个,第三个…参数

接收参数
expect脚本可以接受从bash传递的参数
可以使用[lindex $argv n]获得
n从0开始,分别表示第一个,第二个,第三个…参数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

案例2 ssh登录

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

案例3使用变量

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

案例4位置参数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

案例5 执行多个操作

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

expect执行方式

嵌入执行(shell脚本调用expect)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

案例6 批量登录主机并创建用户

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

本章实验2:编写脚本实现自动下载

实验环境
再准备一台主机,作ftp客户端
安装expect工具和ftp客户端工具
需求描述
编写shell脚本实现自动下载
以匿名身份登录ftp服务器
切换到目录pub
下载test.txt文件

实验2提示

利用expect完成FTP登录过程
正常交互过程

expect脚本

[root@ce ~]# ftp 192.168.8.136
Connected to 192.168.8.136 (192.168.8.136).
220 (vsFTPd 3.0.2)
Name (192.168.8.136:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd pub
250 Directory successfully changed
#!/usr/bin/expect -fset timeout 10spawn ftp 192.168.8.136expect "Name*"send "ftp\r"expect "Password:*"send "\r"expect "ftp>*"interactexpect eof

ftp> cd pub
250 Directory successfully changed


#!/usr/bin/expect -f
set timeout 10
spawn ftp 192.168.8.136
expect “Name*”
send “ftp\r”
expect “Password:"
send “\r”
expect "ftp>

interact
expect eof



http://www.ppmy.cn/embedded/141502.html

相关文章

嵌入式开发之IO多路复用(一)

目录 1、IO模型和多路复用模型 1.1、阻塞I/O模式 1.1.1、读阻塞 1.1.2、写阻塞 1.2、非阻塞模式I/O 1.3、信号驱动I/O 1.4、多路复用I/O 1.4.1、IO多路复用步骤: 1.4.2、伪代码示例讲解 1、IO模型和多路复用模型 在UNIX、Linux下主要有4种I/O模型: 阻塞I/O: 最常用…

day 29 第八章 贪心算法part03

第一题&#xff1a;134.加油站 解题思路 本题要求在给定两个整数数组 gas&#xff08;表示每个加油站的汽油量&#xff09;和 cost&#xff08;表示从一个加油站到下一个加油站的耗油量&#xff09;的情况下&#xff0c;判断能否绕环路行驶一周&#xff0c;如果可以则返回出发…

Redis设计与实现 学习笔记 第二十二章 二进制位数组

Redis提供了SETBIT、GETBIT、BITCOUNT、BITOP四个命令用于处理二进制位数组&#xff08;bit array&#xff0c;又称“位数组”&#xff09;。 SETBIT命令用于为位数组指定偏移量上的二进制位设置值&#xff0c;位数组的偏移量从0开始&#xff0c;而二进制位的值可以是0或1&…

k8s中部署filebeat进行日志监听并发送到es中

注意事项 1. 需要将namespace修改为自己项目中的命名空间 2. es换成对应的地址 3. filebeat-inputs中的两个配置&#xff08;根据需要用任意一个就可以&#xff09; 3.1 第一个配置是监听docker日志&#xff0c;由于系统日志太多所以这里只监听项目部署命名空间下的内容 -…

【速通GO】基础结构和语法

独立站原文 基础结构以及执行方式 基础结构 // 包名 package main// 引入包 import "fmt"// main 函数是每一个可执行程序所必须包含的&#xff0c;一般来说都是在启动后第一个执行的函数&#xff08;如果有 init() 函数则会先执行该函数 // 注意 { 不能单独放在一…

【C++笔记】数据结构进阶之二叉搜索树(BSTree)

【C笔记】数据结构进阶之二叉搜索树(BSTree) &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】数据结构进阶之二叉搜索树(BSTree)前言一.二叉搜索树的概念二.二叉搜索树的性能分析三.二叉搜索树的实现3.1二叉树的中序…

机器学习6-梯度下降法

梯度下降法 目的 梯度下降法(Gradient Descent)是一个算法&#xff0c;但不是像多元线性回归那样是一个具体做回归任务的算法&#xff0c;而是一个非常通用的优化算法来帮助一些机器学习算法求解出最优解的&#xff0c;所谓的通用就是很多机器学习算法都是用它&#xff0c;甚…

如何做好一份技术文档?

技术文档的创作与优化 一、技术文档的规划布局&#xff08;一&#xff09;明确文档目的与受众确定目的分析受众 &#xff08;二&#xff09;构建章节框架概述章节基础技术概念章节系统架构章节功能实现章节测试与验证章节结论与展望章节 二、技术文档的语言表达&#xff08;一&…