• Shell编程之免交互


    目录

    一、Here Document免交互

    1、Here Document概述

    2、基本语法格式

    注意事项:

    二、expect 

    1.expect定义

    2.环境安装

     3. expect 中的相关命令

    4. 应用示例

     三、总结


    一、Here Document免交互


    1、Here Document概述


            使用 I/O 重定向的方式将命令列表提供给交互式程序或命令,比如 ftp、cat 或 read 命令。
            HereDocument是标准输入的一种替代品,可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地生产出一个文件并用作命令的标准输入。


    2、基本语法格式


            特殊字符“<<”在标记和命令之前,这样做的目的是将命令块的输出重定向到程序或命令的          stdin。
            标记的选择要确保不会出现在其他地方,避免出现混淆;
            两个标记之间的内容被当做是一个文件并用作“命令”的标准输入。
            另外 Here Document 也可以与非交互式程序和命令一起使用。

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

    注意事项:

            1.标记可以使用任意的合法字符

            2.结尾的标记一定要顶格写,前面不能有任何字符

            3.结尾的标记后面也不能有任何字符(包括空格)

            4.开头的标记前后的空格会被省略

    直接把输入的从命令行输出

    输入内容保存到文件

     追加输入保存到文件

     变量替换

     整体赋值给变量,用echo将变量值打印出来

     关闭变量替换的功能

                    对标记加单引号,即可关闭变量替换

     去掉每行之前的 TAB 字符

             EOF前面添加“-”能够去掉行首的tab制表符

     多行注释

            Bash 的默认注释是“#”,该注释方法只支持单行注释,在 Shell 脚本的工作中,“#”右侧的任何字符串,bash 都会将其忽略。

            “ : ”代表什么都不做的空命令。中间标记区域的内容不会被执行,会被bash 忽略掉,因此可达到批量注释的效果。

    冒号表示多行注释,开头的标记内容不会被执行

     

    二、expect 

    1.expect定义

    是建立在tcl(tool command language)语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互的相关问题

    2.环境安装

    expect 并非是 shell 能够解释的,所以想要执行它来完成你的脚本,你需要先安装两个软件包,当然,在使用yum的情况下,我们执行这条命令就可以了

     3. expect 中的相关命令

    3.1 脚本解释器

    expect 脚本中首先引入文件,表明使用的事哪一种shell

                   /usr/bin/expect

    3.2 spawn 启动新的进程(监控,捕捉)

    spawn后面通常跟一-个Linux执行命令,表示开启一个会话、启动进程,并跟踪后续交互信息              例: spawn passwd root

    3.3 expect 从进程接收字符串

            判断上次输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回;

            只能捕捉由spawn启动的进程的输出;

            用于接收命令执行后的输出,然后和期望的字符串匹配

    3.4 send 用于向进程发送字符串

            向进程发送字符串,用于模拟用户的输入;

            该命令不能自动回车换行,一般要加\r (回车)或者\n

    3.5 exp_continue 匹配多个字符串在执行动作后加此命令

            exp_ continue 类似于控制语句中的continue 语句。表示允许expect 继续向下执行指令

    3.6 expect eof

            表示交互结束,等待执行结束,退回到原用户,与spawn对应

            比如切换到root用户,expect脚本默认的是等待10s当执行完命令后,默认停留10s后,自动切回了原用户

    3.7 interact 允许用户交互

            会停留在目标终端而不会退回到原终端,这个时候就可以手工操作了,interact后的命.令不起作用;

            比如interact后添加exit,并不会退出root用户。而如果没有interact则登录完成后会退出,而不是留在远程终端上。

            使用interact会保持在终端而不会退回到原终端;

    3.8 set

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

                    例子: set time out 30

    3.9 send_users

                    表示回显命令与echo相同

    3.10 接收参数

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

    set hostname [lindex $argv 0]       #相当于 hostname=$1
    set password [lindex $argv 1]        #相当于 password=$2

    #expect直接执行,需要使用 expect 命令去执行脚本

    4. 应用示例

    4.1  远程ssh脚本

     4.2创建用户并设置用户密码

     三、总结

            借助 expect 处理交互的命令,可以将交互过程如 ssh 登录,ftp 登录等写在一个脚本上,使之自动化完成。

            适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率,使用它,你甚至可以仅仅执行一个脚本来完成分布式应用系统的搭建与维护。

  • 相关阅读:
    高企!2022年武汉市高新技术企业奖励补贴以及申报条件汇总!
    构建LangChain应用程序的示例代码:14、使用LangChain、GPT和Activeloop的Deep Lake来处理代码库
    npm常用命令详解
    Java 基础常见知识点&面试题总结(下),2022 最新版!
    Python编程实例-Pandas快速入门
    408真题-2021
    【git】安装和基本配置
    Secure Boot什么意思?BIOS中Secure Boot灰色无法更改解决方法详解
    喜报 | 人大金仓荣获2023“金鼎奖”,金融系统解决方案再获认可
    TS的声明文件
  • 原文地址:https://blog.csdn.net/m0_66900908/article/details/126287311