Expect简介与应用场景

一、简介

1、EXPECT是一个用来实现自动交互功能的软件套件(EXPECT is a software suite for automating interactive tools),用于提供自动交互的工具。

2、在实际工作中,我们运行命令、脚本或程序时,这些命令、脚本或程序都需要从终端输入某些继续运行的指令,而这些输入都需要人为的手工进行。而利用expect,则可以根据程序的提示,模拟标准输入提供给程序,从而实现自动化交互执行。这就是expect!!!

3、设想一个场景:比如你要用ssh或者 telnet登录服务器的时候,命令行下提示需要输入用户和密码等。如果叫你用shell脚本写自动登录脚本的话是不是有点困难呢? 你会说在shell中执行ssh命令的话,他会一直停在那里等你密码啊,这个要手工来做才行吧?

4、Expect就是为处理这类情况而设计的工具,简单来说它可以控制、处理输入,输出流,然后提供自动填写数据等需要用户交互式输入的数据的地方实现自动化处理。Expect就是为了处理“自动交互”的工具。
Expect 支持自定义的脚本,所以你通过编写自定义脚本就可以实现你想要的自动填写数据功能了。

二.expect的工作流程

expect的工作流程可以理解为,spawn启动进程---->expect期待关键字---->send向进进程发送字符—>退出结束。

三、spawn命令作用

1、spawn命令用来启动新的进程,spawn后的send和expect命令都是和使用spawn打开的进程进行交互。

2、spawn命令是expect的初始命令,它用于启动一个进程,之后所有expect操作都在这个进程中进行,如果没有spawn语句,整个expect就无法执行了,spawn使用方法如下:

spawn ssh root@192.168.2.5

// 在spawn命令后面,直接加上要启动的进程、命令等信息

四、expect命令作用

从进程接收字符串

expect 表达式 动作 表达式 动作。。。。。。。

expect 命令用于等候一个相匹配内容的输出,一旦匹配上就执行expect后面的动作或命令,如
在这里插入图片描述
从上面的例子可以看出。expect是依附与spawn命令的,当执行ssh命令后,expect就匹配命令执行后的关键字: password:,如果匹配到关键字就会执行后面包含在{}括号中的exp_send动作,匹配以及动作可以放在二行,这样就不需要使用{}括号了,就像下面这样,实际完成的功能与上面是一样的。

在这里插入图片描述

五、send命令作用

send命令接收一个字符串参数,并将该参数发送到进程。

send 用于向进程发送字符串

exp_send和send
exp_send命令或send命令是expect中的动作命令,使用方法如下:
在这里插入图片描述

六、timeout命令作用

timeout 是expect中的一个重要变量,它是一个全局的时间控制开关,你可以通过为这个变量赋值来规定整个expectc操作的时间,注意这个变量是服务与expect全局的,它不会纠缠某一条命令,即使命令没有任何错误,到时间依然会激活这个变量。使用方法如下
在这里插入图片描述
timeout 变量中,设置为0表示立即超时,-1则表示永久不超时。

七、expect eof命令作用

与spawn对应表示捕获终端输出信息终止

八、interact命令作用

1、允许用户交互

2、interact命令用的其实不是很多,一般情况下使用spawn、send和expect命令就可以很好的完成我们的任务;但在一些特殊场合下还是需要使用interact命令的,interact命令主要用于退出自动化,进入人工交互。比如我们使用spawn、send和expect命令完成了ftp登陆主机,执行下载文件任务,但是我们希望在文件下载结束以后,仍然可以停留在ftp命令行状态,以便手动的执行后续命令,此时使用interact命令就可以很好的完成这个任务。

九、环境准备
准备二台Centos6服务器
系统: Centos6.8 Centos6.5
内存:1G
cpu: 2核
IP地址: 10.0.0.22 10.0.0.53

十、演练操作

///在ip地址22的机器上操作
# 安装expect工具
yum -y install expect 
# 进入expect环境,exit可以退出。
expect 
# 环境执行的命令
whereis expect
# 编辑脚本文件,编辑如下图之后,可以wq保存退出!
vim dl.sh
#!/usr/bin/expect
spawn ssh root@10.0.0.53
expect "password:" {send "123456\r"}
interact

在这里插入图片描述

# 给脚本文件加执行权限,必须加!
chmod +x dl.sh 

在这里插入图片描述

# 执行脚本,查看一下效果
./dl.sh 

在这里插入图片描述

可以退出来,再次查看ip信息
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

OK,简单的ssh登录步骤,至此就做完了,可以自己去做一做!

发布了68 篇原创文章 · 获赞 24 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/aaronszm/article/details/103885187