Shell编程:Expect免交互模拟输入

command-line-interface-linux-cmd-exe-diskpart-png-favpng-zjxTgBs8rCNx44AP4L4Ch31PA-1

对于大规模的Linux运维很有帮助在Linux运维和开发中,我们经常需要远程登录服务器进行操作,登录过程是一个交互的过程,可能会需要输入yes/no,password等信息。为了模拟这种输入,可以使用Expect脚本。

Expect简介

Expect是建立在tcl基础上的一个工具,Expect是用来进行自动化控制和测试的工具。主要解决shell脚本中不可交互的问题。对于大规模的Linux运维很有帮助。
在Linux运维和开发中,我们经常需要远程登录服务器进行操作,登录过程是一个交互的过程,可能会需要输入yes/no,password等信息。为了模拟这种输入,可以使用Expect脚本。

基本命令

send:向进程发送字符串,用于模拟用户的输入
该命令不能自动回车换行,一般要加\r(回车)
expect
expect的一个内部命令,判断上次输出结果里是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回
只能捕捉由spawn启动的进程的输出
spawn:启动进程,并跟踪后续交互信息
interact:执行完成后保持交互状态,把控制权交给控制台
Timeout:指定超时时间,过期则继续执行后续指令

  • 单位是:秒
  • timeout -1 为永不超时
  • 默认情况下,timeout是10秒

exp_continue:允许expect继续向下执行指令
send_user:回显命令,相当于echo
$argv:参数数组
Expect脚本可以接受从bash传递的参数,可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个,第三个...参数

Ubuntu安装expect

首先,通过以下命令检查是否安装

ls /usr/bin | grep expect

如果显示为空,则使用以下命令安装

sudo apt-get install tcl tk expect

检验是否安装成功脚本

expect -c 'expect "hi expect" {send "hi shell\n"}'
作者:Qingyun
                
comments powered by Disqus