EXPECT–脚本免交互大法
我们在用Shell脚本去执行一些操作时,有时会出现一些人机交互过程,如用脚本去实现ssh远程登录时,可能会出现需要交互的过程。图1.1 这时人们就会想如果有一种方法让计算机自动“回答”人类的回复,那么脚本就可以实现全自动化免交互。所以就有了expect命令,expect命令需要额外的安装,否则无法使用免交互过程。
图1.1
一、EXPECT使用方法
-
Expect脚本必须以**#!/usr/bin/expect为开头,因为需要从/usr/bin/expect路径下读取命令。或者在脚本中插入Expect脚本就需要/usr/bin/expect<<-EOF**开头。图1.2
图1.2
-
首先有spawn进行命令的抓取,并进行信息的跟踪与交互。图1.3
图1.3
-
接着由expect进行判断输出的结果里是否含有指定的字符串,如果有那么就立即返回。图1.4
图1.4
-
由于上一步匹配到指定的命令提示,那么send就会发送已经指定好的字符串,用于用户的模拟输入。这里需要注意的一点是:需要在命令后面加入**\r作为回车键。如果一个命令有多个交互在执行完一个交互后还要继续执行下一个交互那么就要在前一个命令后面输入“;exp_continue**”。图1.5
图1.5
-
在执行完所有的命令后需要将控制权交给控制台那么需要在最后输入interact。
二、总结
expect在脚本中使用是非常简单的,简化了在执行脚本时会出现的人机交互的过程。方便了用户实现了全自动化运维的功能。