码农知识堂 - 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在进行远程登陆时可以做到免密登录。

  • 相关阅读:
    自己动手写线程池——向JDK线程池进发
    tcpdump(五)命令行参数讲解(四)
    Flutter中的“迷你计算器”带有源代码
    Fabric.js 讲解官方demo:Stickman
    简单了解 TiDB 架构
    【数据聚类】第八章第一节:谱聚类算法概述及拉普拉斯矩阵
    适用于医美行业的微信管理系统
    深度学习(二)之猫狗分类
    R2 MSE Linear Regression
    创新案例分享 | 一体化政务服务平台运维项目,全力提升平台服务效能
  • 原文地址:https://blog.csdn.net/m0_62948770/article/details/126324514
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号