expect command
文章目录
- 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相关推荐
- Linux命令—— expect: command not found
执行脚本里有expect执行命令 #!/bin/bashexpect <(cat <<'END' set timeout 20 set password "1qaz!QAZ ...
- expect脚本教程_Expect脚本SSH示例教程
expect脚本教程 Expect script is a great linux/unix utility. I have to deal with a lot of unix servers in ...
- Mac 自动化执行脚本 Expect
环境 Mac 安装expect brew install expect 使用 传参 # 表示获取执行脚本命名空格后第一个参数 set user [lindex $argv 0] 实际应用例子 ssh自 ...
- shell脚本——expect的综合使用(包含应用案例)
这里写目录标题 Expect概述 基本命令 应用案例 磁盘自动分区脚本 远程ssh另一台主机 自动连接ftp下载文件 综合案例 Expect概述 Expect是建立在tcl基础上的一个工具,Expec ...
- OSSEC配置文件ossec.conf中添加mysql服务
配置路径:/opt/ossec/etc/ossec.conf <ossec_config> <global> <email_notification>y ...
- wazhu之agent功能详解
一.日志数据收集 日志数据收集是从服务器或设备生成的记录中收集的实时过程.此组件可以通过文本文件或Windows事件日志接收日志.它还可以通过远程syslog直接接收日志,这对防火墙和其他此类设备非常 ...
- 阿里云弹性裸金属服务器规格族详解和使用场景
阿里云弹性裸金属服务器目前有三个规格,即ebmg5(96核/384GB).ebmhfg5(8核/32GB)和ebmc4(32核/64GB)三种规格,那么如何选择呢?InstanceTypes分享: 阿 ...
- wazuh agent功能详解
wazhu之agent功能详解 一.日志数据收集 日志数据收集是从服务器或设备生成的记录中收集的实时过程.此组件可以通过文本文件或Windows事件日志接收日志.它还可以通过远程syslog直接接收日 ...
- 【shell】实现交互|read读取键盘输入
目录 一.SHELL 1.1 输入单个指令 1.2 输入多行指令 限制输入内容的个数 控制输入内容的可见性 二.Expect 简介 for 中嵌套 expect 在expect中使用shell的环境变 ...
最新文章
- [转载]oracle索引的简单总结
- Exchange Server 2010 灾难恢复
- Excluding Files From Team Foundation Version Control Using .tfignore Files
- Linux: 近100个常用命令大全
- CVPR 2019 | 近日新出论文汇总(含视频目标分割、GAN、度量学习、高效语义分割等主题)...
- ListUtil常用操作
- Delphi 取整函数round、trunc、ceil和floor
- 韦东山嵌入式Linux第一期视频-韦东山-专题视频课程
- js模拟鼠标自动滑动滑块--dispatchEvent
- 树莓派 Linux 操作系统大全
- Sails.js简介
- 【数据结构与算法】起始篇
- 1.4 Kronecker积
- 漫谈程序员(十二)IT程序猿之猿体是革命的本钱
- MTCNN开源训练(PNet训练)
- 如何:创建 MDI 父窗体、子窗体、确定活动的 MDI 子窗体
- 修改Windows server远程桌面连接端口3389
- py学习9——linux常见指令
- 智慧路灯建设:智能路灯管理系统对智慧城市的重要性
- xp 下启用 ahci 模式
热门文章
- 创宇技能表_[OPEN]知道创宇研发技能表
- golang读写文件的几种方式
- 软件开发怎么对抗抄袭_对抗软件开发中的复杂性
- 准备2021年全国大学生数学建模竞赛 固赛助力
- python format使用
- 二路归并排序原理及JAVA实现
- Sublime常用操作
- android+系统画面恢复,坚持Android系统恢复?轻松修复它
- 学校要求软著申请人只能写学校的名字,版权中心新系统里大学生申请软件著作权(软著)如何以学校为单位发表?附:本人软著申请图
- matlab for循环教程,Matlab for循环使用操作教程分享