今天给伙伴们分享一下Shell 编程-Expect 使用,希望看了有所收获。
我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步!
如果伙伴们看了文档觉得有用,欢迎大家关注我的公众号,获取相关文档。爱运维,爱生活。
1、Expect 介绍
-
通过 Shell 可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候可能会需要实现和交互程序如telnet服务器等进行交互的功能。而Expect就使用来实现这种功能的工具。
-
Expect 是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。Expect的作者Don Libes 在1990年开始编写Expect时对Expect做有如下定义。
-
Expect 是一个用来实现自动交互功能的软件套件 (Expect [is a] software suite for automating interactive tools)。使用它系统管理员 的可以创建脚本用来实现对命令或程序提供输入,而这些命令和程序是期望从终端(terminal)得到输入,一般来说这些输入都需要手工输入进行的。 Expect则可以根据程序的提示模拟标准输入提供给程序需要的输入来实现交互程序执行。甚至可以实现实现简单的BBS聊天机器人。
-
Expect 是不断发展的,随着时间的流逝,其功能越来越强大,已经成为系统管理员的的一个强大助手。Expect 需要 Tcl 编程语言的支持,要在系统上运行 Expect 必须首先安装Tcl。
2、Expect工作原理
-
Expect 的工作方式象一个通用化脚本工具。用来实现计算机之间需要建立连接时进行特定的登录会话的自动化。
-
脚本由一系列 expect-send 对组成:expect 等待输出中输出特定的字符,通常是一个提示符,然后发送特定的响应。解决人机交互的问题
3、Expect 安装
[[email protected] ~]# yum install -y expect tcl tclx tcl-devel
4、Expect 命令
Expect 的核心是 spawn、expect、send、set。
-
spawn 调用要执行的命令
-
expect 监听交互输出
-
send 进行交互输入
-
set 设置变量值
-
interact 交互完后,将控制权交给控制台。
-
expect eof,与 spawn 对应,表示捕捉终端输出信息终止,类似 if…endif
-
settimeout -1,设置 expect 永不超时
-
settimeout 300,如果 300 后没有捕捉到 expect 的监听的内容,那么就退出