文章目录

  • 1.命令简介
  • 2.命令格式
  • 3.选项说明
  • 4.子命令
  • 5.常用示例
  • 参考文献

1.命令简介

expect 用于与互动程序进行自动交互。

expect 是一个自动化交互套件,主要应用于执行命令时,以交互形式按照要求输入指定字符串,实现自动交互。

expect 自动交互流程:

spawn 启动指定命令 > expect 获取指定关键字 > send 发送指定字符串 > 执行完成退出。

注意 expect 脚本能够执行需要提前安装 expect,一般系统默认没有此命令。

如 RedHat 系列平台:

yum install -y expect

2.命令格式

expect [ -dDinN ] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ]

3.选项说明

-d启用一些诊断输出,主要报告 expect 和 interaction 等命令的内部活动。
-D启用交互式调试器。后面应该是一个整数值。如果值非零或按下^C(或击中断点,或脚本中出现其他适当的调试器命令),调试器将在下一个 Tcl(Tool Command Language) 过程之前接管控制。
-i交互式输入 expect 命令,而不是从文件中读取。通过 exit 命令或 EOF 终止。
-n不使用 ~/.expect.rc 脚本。
-N不使用 $exp_library/expect.rc 脚本。
-c <cmds>指定要执行的 expect 命令。命令应该加引号,以防止被 Shell 分解。此选项可使用多次或用一个 -c 选项指定多个命令,命令之间用分号分隔。命令按照它们出现的顺序执行。
-f从文件读取命令,仅用于使用#!时。如果文件名为"-",则从stdin读取(使用"./-"从文件名为-的文件读取)。
-b默认情况下,命令文件被读入内存并完整地执行。有时需要一次读取一行。例如,stdin 是这样读取的。为了强制任意文件以这种方式处理,请使用 -b 选项。
-v显示 expect 版本信息。

4.子命令

expect 使用 TCL(Tool Command Language)。

TCL 提供了控制流(如 if、for、break)、表达式求值和一些其他特性,如递归、过程定义等。此处使用但未定义的命令(如 set、if、exec)是 Tcl 命令(参见 tcl(3))。Expect支持下面描述的其他命令。除非另有说明,否则命令返回空字符串。

常用子命令如下:

spawn [args] program [args]。启动交互程序 program [args]。
expect [[-opts] pat1 body1] ...获取匹配信息匹配成功则执行 expect 后面的程序动作。
send [-flags] string用于发送指定的字符串信息。
exp_continue [-continue_timer]允许 expect 自身继续执行,而不是像通常那样返回。默认情况下,exp_continue 重置超时计时器,-continue_timer 标志防止定时器重启。
send_user [-flags] string用来打印指定字符串到标准输出,相当于 Shell 中的 echo。
exit [-opts] [status]退出 expect 脚本。
set timeout N设置超时时间为 N 秒。
set定义变量。
puts输出变量。
interact [string1 body1] ...执行完成后保持交互状态,控制权交给控制台(手工操作)。否则完成后会退出。

5.常用示例

(1)使用 ssh 自动登录远程主机。

#!/usr/bin/expectset ip [lindex $argv 0 ]        # 接收第1个参数,作为IP
set username [lindex $argv 1 ]  # 接收第2个参数,作为username
set password [lindex $argv 2 ]  # 接收第3个参数,作为密码
set timeout 30                  # 设置超时时间 spawn ssh $username@$ip       # 发送ssh请求
expect {                      # 返回信息匹配 "*yes/no" { send "yes\n"; exp_continue}  # 第一次ssh连接会提示yes/no,发送yes然后继续"*password:" { send "$password\n" }    # 出现密码提示,发送密码
}
interact        # 交互模式,用户会停留在远程服务器上面

或在 Shell 脚本中执行 expect 命令。

#!/bin/bashuser=root
ip=192.168.56.103
passwd='123456'expect <<-EOF
set time 30
spawn ssh $user@$ip
expect {"*yes/no" { send "yes\n"; exp_continue }"*password" { send "$passwd\n" }
}
interact
EOF

其中 <<-EOF 和 EOF 包围的内容块,被重定向到左侧命令 expect 的 stdin 中。

(2)使用 ssh 自动登录远程主机,执行命令然后退出。

#!/usr/bin/expectset IP     [lindex $argv 0]
set USER   [lindex $argv 1]
set PASSWD [lindex $argv 2]
set CMD    [lindex $argv 3]spawn ssh $USER@$IP $CMD
expect {"(yes/no)?" {send "yes\n"expect "password:"send "$PASSWD\n"}"password:" {send "$PASSWD\n"}
}
expect eof

(3)使用 scp 自动拷贝文件到远程主机。

#!/usr/bin/expectspawn scp /etc/foo root@192.168.33.129:/root
expect {"yes/no" { send "yes\n";exp_continue }"password" { send "root\n" }
}
expect eof

参考文献

expect(1) - Linux manual page - man7.org
expect - 自动交互脚本

expect command相关推荐

  1. Linux命令—— expect: command not found

    执行脚本里有expect执行命令 #!/bin/bashexpect <(cat <<'END' set timeout 20 set password "1qaz!QAZ ...

  2. expect脚本教程_Expect脚本SSH示例教程

    expect脚本教程 Expect script is a great linux/unix utility. I have to deal with a lot of unix servers in ...

  3. Mac 自动化执行脚本 Expect

    环境 Mac 安装expect brew install expect 使用 传参 # 表示获取执行脚本命名空格后第一个参数 set user [lindex $argv 0] 实际应用例子 ssh自 ...

  4. shell脚本——expect的综合使用(包含应用案例)

    这里写目录标题 Expect概述 基本命令 应用案例 磁盘自动分区脚本 远程ssh另一台主机 自动连接ftp下载文件 综合案例 Expect概述 Expect是建立在tcl基础上的一个工具,Expec ...

  5. OSSEC配置文件ossec.conf中添加mysql服务

    配置路径:/opt/ossec/etc/ossec.conf <ossec_config>   <global>     <email_notification>y ...

  6. wazhu之agent功能详解

    一.日志数据收集 日志数据收集是从服务器或设备生成的记录中收集的实时过程.此组件可以通过文本文件或Windows事件日志接收日志.它还可以通过远程syslog直接接收日志,这对防火墙和其他此类设备非常 ...

  7. 阿里云弹性裸金属服务器规格族详解和使用场景

    阿里云弹性裸金属服务器目前有三个规格,即ebmg5(96核/384GB).ebmhfg5(8核/32GB)和ebmc4(32核/64GB)三种规格,那么如何选择呢?InstanceTypes分享: 阿 ...

  8. wazuh agent功能详解

    wazhu之agent功能详解 一.日志数据收集 日志数据收集是从服务器或设备生成的记录中收集的实时过程.此组件可以通过文本文件或Windows事件日志接收日志.它还可以通过远程syslog直接接收日 ...

  9. 【shell】实现交互|read读取键盘输入

    目录 一.SHELL 1.1 输入单个指令 1.2 输入多行指令 限制输入内容的个数 控制输入内容的可见性 二.Expect 简介 for 中嵌套 expect 在expect中使用shell的环境变 ...

最新文章

  1. [转载]oracle索引的简单总结
  2. Exchange Server 2010 灾难恢复
  3. Excluding Files From Team Foundation Version Control Using .tfignore Files
  4. Linux: 近100个常用命令大全
  5. CVPR 2019 | 近日新出论文汇总(含视频目标分割、GAN、度量学习、高效语义分割等主题)...
  6. ListUtil常用操作
  7. Delphi 取整函数round、trunc、ceil和floor
  8. 韦东山嵌入式Linux第一期视频-韦东山-专题视频课程
  9. js模拟鼠标自动滑动滑块--dispatchEvent
  10. 树莓派 Linux 操作系统大全
  11. Sails.js简介
  12. 【数据结构与算法】起始篇
  13. 1.4 Kronecker积
  14. 漫谈程序员(十二)IT程序猿之猿体是革命的本钱
  15. MTCNN开源训练(PNet训练)
  16. 如何:创建 MDI 父窗体、子窗体、确定活动的 MDI 子窗体
  17. 修改Windows server远程桌面连接端口3389
  18. py学习9——linux常见指令
  19. 智慧路灯建设:智能路灯管理系统对智慧城市的重要性
  20. xp 下启用 ahci 模式

热门文章

  1. 创宇技能表_[OPEN]知道创宇研发技能表
  2. golang读写文件的几种方式
  3. 软件开发怎么对抗抄袭_对抗软件开发中的复杂性
  4. 准备2021年全国大学生数学建模竞赛 固赛助力
  5. python format使用
  6. 二路归并排序原理及JAVA实现
  7. Sublime常用操作
  8. android+系统画面恢复,坚持Android系统恢复?轻松修复它
  9. 学校要求软著申请人只能写学校的名字,版权中心新系统里大学生申请软件著作权(软著)如何以学校为单位发表?附:本人软著申请图
  10. matlab for循环教程,Matlab for循环使用操作教程分享