expect 是由Don Libes基于 Tcl( Tool Command Language )语言开发的,主要应用于自动化交互式 操作的场景,借助 expect 处理交互的命令,可以将交互过程如:ssh登录,ftp登录等写在一个脚本 上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人 员的工作效率

安装expect

  1. yum -y install expect

expect 语法:

  1. expect [选项] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ]
  2.  
  3. 常见选项
  4.  
  5. -c:从命令行执行expect脚本,默认expect是交互地执行的
  6. -d:可以调试信息

示例:

  1. [root@centos8~]$expect -c 'expect "\n" {send "pressed enter\n"}'
  2. expect                #交互式输入“expect” 接收
  3. pressed enter            #匹配到expect后,会输出“pressed enter”,并换行
  1. [root@centos8~]$expect -d ssh.exp
  2. expect version 5.45.4
  3. argv[0] = expect argv[1] = -d argv[2] = ssh.exp
  4. set argc 0              #set 定义变量 格式:set 变量名 变量值
  5. set argv0 "ssh.exp"
  6. set argv ""
  7. executing commands from command file ssh.exp
  8. couldn't read file "ssh.exp": no such file or directory

expect中相关命令

  1. spawn       启动新的进程
  2. expect       从进程接收字符串
  3. send        用于向进程发送字符串
  4. interact     允许用户交互
  5. exp_continue   匹配多个字符串在执行动作后加此命令

 expect最常用的语法(tcl语言:模式-动作)

单一分支模式语法

 

  1. [root@centos8~]$expect
  2. expect1.1> expect "hi" {send "You said hi\n"} #交互式输入时,不能随意编辑,需一次性输入成功
  3. hahiccc
  4. You said hi
  5. expect1.2>

匹配到hi后,会输出“you said hi”,并换行

多分支模式语法:

  1. [root@centos8~]$expect
  2. expect1.1> expect "hi" {send "You said hi\n"}
  3. hahiccc
  4. You said hi
  5. expect1.2> expect "hi" { send "You said hi\n" } "hehe" { send "Hehe yourself\n"} "bye" { send "Good bye\n" }
  6. bye
  7. Good bye
  8. expect1.3> expect "hi" { send "You said hi\n" } "hehe" { send "Hehe yourself\n"} "bye" { send "Good bye\n" }
  9. hi
  10. You said hi
  11. expect1.4> expect "hi" { send "You said hi\n" } "hehe" { send "Hehe yourself\n"} "bye" { send "Good bye\n" }
  12. hehe
  13. Hehe yourself

匹配hi,hehe,bye任意字符串时,执行相应输出。

示例:自动登录

  1. [root@centos8/data]$vim expect.logon
  2. #!/usr/bin/expect
  3. #
  4. #
  5. spawn ssh root@10.0.0.77
  6. expect {
  7. "yes/no" { send "yes\n";exp_continue }
  8. "password" { send "密***码\n" }
  9. }
  10. interact
  11. [root@centos8/data]$ll expect.logon
  12. -rw-r--r-- 1 root root 141 Apr 27 15:30 expect.logon
  13. [root@centos8/data]$chmod +x expect.logon
  14. [root@centos8/data]$ll
  15. total 4
  16. -rwxr-xr-x 1 root root 141 Apr 27 15:30 expect.logon
  17. [root@centos8/data]$./expect.logon
  18. spawn ssh root@10.0.0.77
  19. The authenticity of host '10.0.0.77 (10.0.0.77)' can't be established.
  20. ECDSA key fingerprint is SHA256:a8HZZS4TTvzQbF1/XJKDZvry1Lwa+9/jYIYXRPwqfIk.
  21. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
  22. Warning: Permanently added '10.0.0.77' (ECDSA) to the list of known hosts.
  23. root@10.0.0.77's password:
  24. Last login: Wed Apr 27 15:05:01 2022 from 10.0.0.1

Linux-交互式转化批处理工具expect的更多相关文章

  1. linux自动交互工具expect,tcl安装和安装包,以及自动互信脚本

    linux自动交互工具expect,tcl安装,以及自动互信脚本 工作中需要对几十台服务器做自动互信,无意中发现expect命令,研究一番. 在网上找了许多资料也没有安装成功,摸索着总算成功了.现分享 ...

  2. centos shell编程4【分发系统】 服务器标准化 mkpasswd 生成密码的工具 expect讲解 expect传递参数 expect自动同步文件 expect指定host和要同步的文件 expect文件分发系统 expect自动发送密钥脚本 Linux脚本执行方式 第三十八节课

    centos shell编程4[分发系统] 服务器标准化  mkpasswd 生成密码的工具  expect讲解   expect传递参数   expect自动同步文件  expect指定host和要 ...

  3. linux 两个查找工具 locate,find详解

    linux 中有很多查找工具,今天主要讲解locate,find两个工具. 1.locate (1)查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db 注意:如果这 ...

  4. Linux命令行下载工具

    目录 wget aria2 cURL Youtube-dl https://zh.wikipedia.org/wiki/下载管理程序比较 https://wiki.archlinux.org/inde ...

  5. linux 两个查找工具 locate,find

    linux 中有很多查找工具,今天主要讲解locate,find两个工具. 一.locate 1.性能介绍 查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db 注意 ...

  6. Linux系统IO分析工具之iotop常用参数介绍

      Linux系统IO分析工具之iotop常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在一般运维工作中经常会遇到这么一个场景,服务器的IO负载很高(iostat中的 ...

  7. Linux shell文本处理工具

    搞定Linux Shell文本处理工具,看完这篇集锦就够了 Linux Shell是一种基本功,由于怪异的语法加之较差的可读性,通常被Python等脚本代替.既然是基本功,那就需要掌握,毕竟学习She ...

  8. Linux 性能优化排查工具

    下图1为 Linux 性能优化排查工具的总结 图1 诊断 CPU 工具 查看 CPU 核数 总核数 = 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU ...

  9. Linux操作系统安全-OpenSSL工具常用命令介绍

    Linux操作系统安全-OpenSSL工具常用命令介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.OpenSSL开源项目有三个组件 openssl: 多用途的命令行工具,包 ...

随机推荐

  1. Spring Boot 的配置文件有哪几种格式?它们有什么区别?

    .properties 和 .yml,它们的区别主要是书写格式不同.    1).properties    app.user.name = javastack    2).yml    app:   ...

  2. 什么是 Spring Cloud?

    Spring cloud 流应用程序启动器是 于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成.Spring cloud Task,一个生命周期短暂的微服务框架,用于快 ...

  3. springMVC和struts2的区别有哪些?

    (1)springmvc的入口是一个servlet即前端控制器(DispatchServlet),而struts2入口是一个filter过虑器(StrutsPrepareAndExecuteFilte ...

  4. Spring配置文件?

    Spring配置文件是个XML 文件,这个文件包含了类信息,描述了如何配置它们,以及如何相互调用.

  5. Redis String Type

    Redis字符串的操作命令和对应的api如下: set [key] [value] JedisAPI:public String set(final String key, final String ...

  6. 我们能在 Switch 中使用 String 吗?

    从 Java 7 开始,我们可以在 switch case 中使用字符串,但这仅仅是一个语法 糖.内部实现在 switch 中使用字符串的 hash code. 30.Java 中的构造器链是什么? ...

  7. ArrayList跟LinkedList的区别

    ArrayList和LinkedList都是实现list接口,它们不同如下: ArrayList是基于索引的数据接口,底层是数组.它可以以O(1)时间复杂度对元素进行随机访问.与此相对,linkedL ...

  8. Linux基础学习 | 目录及文件

    一.目录结构 Linux目录采用树形结构,以根目录/向下延伸呈一个倒置的树的形状. 每个目录下都有其相对应的子目录,而子目录中又有其子目录的存在,就像一棵树的树枝分叉,所有的目录层次结构分明,每个目录 ...

  9. SCSS学习笔记(一)

    SCSS的由来 SCSS就是加强版的CSS,要讲SCSS那就一定要从SASS讲起 SASS Sass(英文全称:Syntactically Awesome Stylesheets)是一个最初由Hamp ...

  10. javascript 理解和使用回调函数

    在javascript中,function是内置的类对象,也就是说它是一种类型的对象,可以和其他String.Array.Number.Objec类的对象一样用于内置对象的管理.因为function实 ...