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

  • 相关阅读:
    静态 友元 常量
    【无标题】
    基于Kylin Server V10制作Kylin 4.0.2 server sp2虚拟机镜像
    蓝牙BLE的一些理解
    File类和IO流的相关面试(二)
    【力扣2057】值相等的最小索引
    七、Request&Response
    0.开发中的问题与解决方案
    PageOffice 在线编辑 office文件,回调父页面
    【基本数据结构】三、基本的数据结构
  • 原文地址:https://blog.csdn.net/m0_62948770/article/details/126324514