码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Shell 编程之免交互


    目录

    一、Here Document 免交互方式

    1、概念

    2、语法格式

    3、实现方式

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

    3.2通过passwd给zhangsan用户设置密码

    3.3通过cat直接像文本中注入内容

    二、 expect 免交互

    1、概念

    2、安装expect

    3、基本命令介绍

    3.1脚本解释器

    3.2 执行方法

    4、expect 语法

    4.1单支结构

    4.2多分支结构

    5、实验案例

    5.1 expect 命令可以实现自动登录远程服务器,适应指定登录某一台

    5.2 将上面的脚本进行优化,可以登录任何主机

    总结 


    一、Here Document 免交互方式

    1、概念

    Here Document 是标准输 入的一种替代品,可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地 生产出一个文件并用作命令的标准输入。

    2、语法格式

    command<

    ............

    ............

    ............

    EOF (结束格式)

    (EOF根据自己的喜好定义,只要不定义特殊字符之类的都可,结束标语要顶格写,前方不可以有空格,后方也不可有空格,否者无法结束输出。)

    3、实现方式

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

    ①通过脚本直接输出变量值

    3.2通过passwd给zhangsan用户设置密码

    3.3通过cat直接像文本中注入内容

    二、 expect 免交互

    1、概念

    expect 是用来进行自动化控制和测试的工具, 主要解决 shell 脚本中不可交互的问题。

    2、安装expect

    3、基本命令介绍

    3.1脚本解释器

    #!/usr/bin/expect   和之前写脚本写的#!/bin/bash 解释器不一样

    3.2 执行方法

    expect 接收命令执行后的输出,然后和期望字符串匹配,若匹配成功则执行相应的,send 向进程发送字符串,用于模拟用户的输入。Send 发送的命令不能自动回车换行,一般 要加\r(回车)。

    (1)spawn

    spawn 后面跟一个命令,表示开启一个会话,启动一个进程,并跟踪后续交互信息。

    (2)结束语

    expect eof :等待执行结束,如果没有这句话可能会导致命令还没执行,脚本就结束了。

    interact:执行完成后保持交互状态 , 把控制权交给控制台,这时可以手动输入信息。
    但是:   expect eof 与 interact 只能二选一

      

    (3)set

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

    (4)exp_continue

    exp_continue 表示允许 expect 继续向下执行指令

    (5)send_user

    send_user 表示回显命令,相当于 echo

    (6)$xagv 

    expect 脚本可以从bash传递参数,使用[lindex $argv n]获得。其中 n 从 0 开始。

    (7)interact

    执行完之后保持交互状态,如果不加这一项。交互完成会自动退出

    4、expect 语法

    语法结构:

    4.1单支结构

    单一分支用于简单的用户交互,当监控命令的标准输出满足 expect 指定的字符串时,向标准输入发送send指定的字符串。
    例如:
    expect "password : " {send "1111111111\r";}

    4.2多分支结构

    多分支用于复杂的用户交互,一般情况下输出内容可能有多个,根据不同的输出内容进行判断
    例如1:
    expect 
    {
    “123” {send "abc" }
    “456” {send "efg"}
    “789” {send "qwe"}
    }                                #######注意花括号的使用,双花括号,匹配到谁就send谁。
    例如2:
    expect 
    {
    “123” {send "abc";exp_continue}
    “456” {send "efg";exp_continue}
    “789” {send "qwe"}

    }                                 ######## 加入匹配到了123,执行完之后继续向下匹配               

    5、实验案例

    5.1 expect 命令可以实现自动登录远程服务器,适应指定登录某一台

    主机centos7 64 主机名改为10,其IP为192.168.159.10

    主机centos 7.6-1 主机名改为68,其ip地址为192.168.159.68

    脚本:

    验证:

    5.2 将上面的脚本进行优化,可以登录任何主机

    ①执行脚本

    ②查看脚本内容

    总结 

    学习了Here Document 免交互方式和expect 免交互方式,ssh在进行远程登陆时可以做到免密登录。

  • 相关阅读:
    小红书和抖音的流量机制是什么?
    【Node.js】路由
    你不知道的类与对象冷知识
    SQL Server安装
    【推荐系统】Embedding + MLP tensorflow特征处理 + 模型搭建实战 笔记
    springboot如何使用自定义配置文件
    无涯教程-Flutter - 安装步骤
    【音频】WAV 格式详解
    ES6 入门教程 13 Symbol 13.2 Symbol.prototype.description & 13.3 作为属性名的 Symbol
    SpringBoot和Vue实现文件上传与下载——基于SpringBoot和Vue的后台管理系统项目系列博客(十五)
  • 原文地址:https://blog.csdn.net/m0_62948770/article/details/126324514
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号