前言:
expect是什么?
答:expect 是由Don Libes基于Tcl(Tool Command Language )语言开发的,主要应用于自动化交互式操作的场景,是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预。说白了,expect就是一套用来实现自动交互功能的软件。
expect能做什么?
答:借助expect处理交互的命令,可以将交互过程如:ssh登录,ftp登录等写在一个脚本上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率,使用它,你甚至可以仅仅执行一个脚本来完成分布式应用系统的搭建与维护。
以上两个问题的答案或许还不能详尽的解释expect的作用,但可以肯定的是,它将会为你带来方便,让你更轻松的完成你的工作。
一、环境安装:
expect并非是shell能够解释的,所以,想要执行它来完成你的脚本,你需要先安装两个软件包,当然,在使用yum的情况下,我们执行这条命令就可以了:
yum install expect -y
二、expect介绍:
在使用expect时,基本上都是和以下四个命令打交道:
命令 作用
send 用于向进程发送字符串
expect 从进程接收字符串
spawn 启动新的进程
interact 允许用户交互
详细介绍:
send命令接收一个字符串参数,并将该参数发送到进程。
expect命令和send命令相反,expect通常用来等待一个进程的反馈,我们根据进程的反馈,再发送对应的交互命令。
spawn命令用来启动新的进程,spawn后的send和expect命令都是和使用spawn打开的进程进行交互。
interact命令用的其实不是很多,一般情况下使用spawn、send和expect命令就可以很好的完成我们的任务;但在一些特殊场合下还是需要使用interact命令的,interact命令主要用于退出自动化,进入人工交互。比如我们使用spawn、send和expect命令完成了ftp登陆主机,执行下载文件任务,但是我们希望在文件下载结束以后,仍然可以停留在ftp命令行状态,以便手动的执行后续命令,此时使用interact命令就可以很好的完成这个任务。
应用举例1:
#!/usr/tcl/bin/expect: #使用expect来解释该脚本; set timeout 30: #设置spawn执行后等候回应的超时时间,单位为秒,默认情况下是10秒; set host "192.168.92.100": #设置变量;
set username "root"#设置用户名;
set password "123456"#设置密码;
spawn ssh \[email protected]\$host:spawn #是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。它主要的功能是给ssh运行进程加个壳,用来传递交互指令; "yes/no" { send "yes\r"; exp_continue; } #选择是否信任该IP expect "*password*": #这里的expect也是expect的一个内部命令,这个命令的意思是判断上次输出结果里是否包含“password”的字符串,如果有则立即返回;否则就等待一段时间后返回,这里等待时长就是前面设置的30秒; send "\$password\r": #当匹配到对应的输出结果时,就发送密码到打开的ssh进程,执行交互动作; interact: #执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上,这个功能是我们在需要完成人工干预的情况下所做的选择。
应用举例2(在shell脚本中应用expect并执行命令):
#!/bin/bash /usr/bin/expect << EOF #在shell中调用expect spawn ssh [email protected]192.168.92.129 expect { "yes/no" { send "yes\r"; exp_continue; } "password" { send "123\r" } } expect "]*" #root用户为]#,普通用户为]$,我们选择*来模糊匹配 send "cd / && ls\r" expect "]*" send "exit\r" EOF
执行结果:
可以看到,执行是没有问题的,我们成功的远程执行了linux命令(当然,也可以实现不同的用户在同一台机器上执行命令)。
总结:
能够在工作中熟练的使用Shell脚本可以很大程度的提高工作效率,如果再搭配上expect,那么很多工作都可以自动化进行,很多的应用场景都可以应用到expect的功能,如oracle的安装,weblogic的静默安装等等,如果掌握了expect,我们完全可以通过脚本来进行实现,如果足够熟悉脚本而且工作需要的话,我们甚至可以实现单个脚本来完成搭建,测试,排错等等一系列解放双手的功能。
原文地址:https://www.cnblogs.com/xiaoyuxixi/p/12084377.html