当前位置: 首页 > news >正文

shell脚本免交互

shell脚本的编写一方面为了减少我们命令的输入,另一方面也可以进行简单的自动化运行,其中为了实现自动化过程,一个很重要的点就是免交互,本篇文章跟大家简单分享两个常用的免交互的方法。

Here Document
  • Here document

    • 通过内联重定向实现免交互——有关资料请参考内联输入重定向-CSDN博客

    • 基本格式

      • 命令 <<标记

      • 。。。

      • 。。。

      • 标记

        • 注意事项:

          标记:标记可以是任何”合法字符“,尽量大写,方便区分。

        • 结尾的结束标记一定要顶格写,且除了结束标记本身外不能有任何字符。

        • 开始标记前后的空格会被 省略

        • 开头标记加上单引号‘’表示不解释变量

        • 开头标记前加-表示忽略制表符或空格

        • :<<EOF

        • EOF

          • 注释的一种方式两个EOF中间的会被省略

        • 在脚本内书写该语句时要注意空格的使用,因为这个错误很难被发现。

      • 设置密码的免交互

        [root@localhost ~]# useradd zhangsan
        [root@localhost ~]# passwd zhangsan<<EOF
        > 111
        > 111
        > EOF
      • 支持使用变量

        • 在脚本中添加如下语句

          • #!/bin/bash
            a="aa.txt"
            b="ni hao"
            cat > $a << EOF
            我要对你说$b
            EOF执行结果为我要对你说aa.txt
      • 整体赋值给变量

        • [root@localhost ~]# vim bb.sh
          #!/bin/bash
          a="很高兴认识你"
          b=$(cat <<EOF
          你好,
          $a
          EOF
          )
          echo $b执行该脚本后结果为你好, 很高兴认识你
 expect
  • expect

    • 基础依赖TCL语言,是一种工具命令语言,在特定环境下使用的特殊命令,仅适用该特定环境

    • 软件包

      • expec

    • 术语概念

      • expect

        • 表示判断,输出的内容中是否包含指定字符串

          • 判断语句只识别英文,标点符号可以省略

      • send

        • 发送,可以发送字符串,命令之类

      • spawn

        • 开启一个会话

          • 常跟系统命令

          • 该命令不能作为远程客户端的发起者

      • set

        • 常用设置:设置超时响应时间:set timeout 秒

          • 针对spwan多一些,跳过该命令以及后续的判断语句。

        • 在expect环境中定义变量

          • set “变量”

        • 接收本地主机位置参数

          • set 变量名 [ lindex $argv 0 ]

          • set 变量名 [ lindex $argv 1 ] 

      • exp_continue

        • 附加于expect后用{ exp_continue}

          • #!/usr/bin/expect
            spawn ssh root@192.168.10.102
            expect {
            "*yes/no" {send "yes\r"; exp_continue}
            "password: " { send "aptech\r"; }
            }
            interact“ ”内表示判断语句
            { }内表示要执行的expect的命令如:send,exp_continue
            • ” “内表示判断语句, { }内表示要执行的expect的命令如:send

            • exp_continue,用于一个程序发起两次交互请求才用。

      • expect eof

        • 执行完毕后,仅仅退出整个expect环境

          • 自动化任务常用

      • interact

        • 执行完毕后停留在当前的expect环境中:例如远程登陆后停留在远程终端执行远程终端的命令。并不退出expect环境。

      • 需要注意两种退出选项只能选其一

      • \r

        • expect中的的换行符号

          • 默认不换行需要在双引号结尾前添加

      • exec

        • 在expect环境中执行bash命令

        • 工作方式

          • 在本地主机开启子进程来进行指令的操作

      • 免交互登录远程服务器

        • 用expect作解释器

        • #!/usr/bin/expect
          spawn ssh root@192.168.10.102
          expect {
          "*yes/no" {send "yes\r"; exp_continue}
          "password: " { send "aptech\r"; }
          }
          interact注意expect后{ }内书写的格式,以及exp_continue的使用
          • 注意expect后{ }内书写的格式,以及exp_continue的使用

      • 用bash作为解释器

        • 创建用户并设置密码

          • #!/bin/bash
            user=$1
            password=$2
            useradd $user
            expect << EOF
            spawn passwd $user expect "New password:"
            send "${password}\r"
            expect "Retry new password:"
            send "${password}\r"expect eof
            EOF注意EOF会让expect环境完全退出,在bash环境中无法留存到目标终端的expect环境中
            • 注意EOF会让expect环境完全退出

    • 免交互设计思路

      • 确定解释器

      • 第一步

        • 将需要免交互的操作执行一遍,确定固定的关键字。

      • 第二步

        • 根据上一步的关键字设置expect判断语句,选用合适的书写形式

以上就是关于在shell脚本中两种免交互的设计方式,如果有任何疑问欢迎留言,看到会及时答复, 

http://www.lryc.cn/news/359189.html

相关文章:

  • WPF学习笔记:给文字添加线性渐变效果
  • Fully Convolutional Networks for Semantic Segmentation--论文笔记
  • Camworks编程怎么样:深度解析其四大特点、五大应用领域、六大优势与七大挑战
  • 【Linux】操作系统之冯诺依曼体系
  • c++ QT 实现QMediaPlayer播放音频显示音频级别指示器
  • 失之毫厘差之千里之load和loads
  • element ui在移动端的适配问题
  • 堆排序详细理解
  • RK3588+FPGA+AI高性能边缘计算盒子,应用于视频分析、图像视觉等
  • 07-操作元素(键盘和鼠标事件)
  • 3389,为了保障3389端口的安全,我们可以采取的措施
  • Java集合【超详细】2 -- Map、可变参数、Collections类
  • 最佳 Mac 数据恢复:恢复 Mac 上已删除的文件
  • 芋道系统,springboot+vue3+mysql实现地址的存储与显示
  • 【C++】C++11新特性:列表初始化、声明、新容器、右值引用、万能引用和完美转发
  • 【IB Protocal Serial--WQE】
  • C++ 混合运算的类型转换
  • 线性时间选择
  • 【对算法期中卷子的解析和反思】
  • sudo apt update sudo: apt: command not found
  • ios:文本框默认的copy、past改成中文复制粘贴
  • Qt moc系统的黑魔法?
  • MyBatis开发中常用总结
  • Git基本使用教程(学习记录)
  • 【Linux-RTC】
  • 机器学习目录
  • React开发环境配置详细讲解-04
  • Go 如何通过 Kafka 客户端库 生产与消费消息
  • 【设计模式深度剖析】【B】【结构型】【对比】| 主要区别包装的不同
  • 信息学奥赛初赛天天练-17-阅读理解-浮点数精准输出与海伦公式的巧妙应用