shell进阶——expect免交互工具的使用

前言:

  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

时间: 2024-11-09 21:53:30

shell进阶——expect免交互工具的使用的相关文章

Shell编程——Expect免交互

Expect概述 Expect是建立在tcl基础上的一个工具,Expect是用来进行自动化控制和测试的工具.主要解决shell脚本中不可交互的问题.对于大规模的Linux运维很有帮助在Linux运维和开发中,我们经常需要远程登录服务器进行操作,登录过程是一个交互的过程,可能会需要输入yes/no,password等信息.为了模拟这种输入,可以使用Expect脚本. 基本命令 send:向进程发送字符串,用于模拟用户的输入 该命令不能自动回车换行,一般要加\r(回车) expect expect的

Shell编程之Expect免交互

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

无标题文章shell编程之Expect免交互

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

Shll编程之Expect免交互

Shll编程之Expect免交互 1.Expect概述 2.Expect安装(底层语言Tcl) 3.Expect基本命令 4.Expect执行方式 5.Expect案例 Expect概述: 1.Expect是建立在tcl语言基础上的一个工具,Expect是用来进行自动化控制和测试的工具.主要解决shell脚本中不可交互的问题.对于大规模的linux运维很有帮助. 2.在linux运维和开发中,我们经常需要远程登录服务器进行操作,登录的过程是一个交互的过程,可能会余姚输入yes/no passwo

expect 免交互配置互信

++++++++++++++++++++++++++++++++++++++++ 标题:expect 免交互配置互信 时间:2020年3月3日 ++++++++++++++++++++++++++++++++++++++++ #/usr/bin/env expect set  ip  192.168.100.100 set  user  root set  password  centos set  timeout  5 spawn ssh-copy-id "${user}@${ip} -p 2

Shell脚本之Expect免交互

Expext概述 Expect是建立在tcl基础上的一个工具,Expect是用来自动化控制和测试的工具.主要解决shell脚本中不可交互的问题.有助于大规模的系统运维工作.在日常的运维与开发中,常常需要运城登录到服务器,然而登录的过程却是个需要交互的过程,可能会要输入yes/no等信息,使用Expect脚本即可实现免交互操作. Expect安装 挂载光盘制作本地YUM源执行安装命令yum install expect -y 基本命令 send 向进程发送字符串,用于模拟用户的输入,该命令不能自动

Shell编程之Expect免交互语句详解

Expect概述 Expect是建立在tcl基础_上的一个工具,Expect 是用来进行自动化控制和测试的工具.主要解决shell脚本中不可交互的问题.对于大规模的linux运维很有帮助.在linux运维和开发中,我们经常需要远程登录服务器进行操作,登录的过程是一个交互的过程,可能会需要输入(yes/no)password等信息.为了模拟这种输入,可以使用Expect脚本. Expect安装 yum install expect -y 基本命令 send: 向进程发送字符串,用于模拟用户的输入.

Expect免交互

一.expect 概述:(1)expect 是建立在 tcl 基础上的一个工具,expect是用来进行自动化控制和测试的工具,主要解决shell脚本中不可交互的问题.对于大规模的linux运维很有帮助(2)在linux 运维和开发中,我们经常需要远程登录服务器进行操作,登录的过程是一个交互的过程,可能会需要输入yes/no password等信息.为了模拟这种输入,可以使用expect脚本.(3)安装 yum install expect -y 二.基本命令:(1)send:向进程发送字符串,用

expect免交互脚本编程

一.大纲 1.Expect概述2.Expect安装(底层语言Tcl)3.Expect基本命令4.Expect执行方式5.Expect案例 一.Expect概述 1.Expect是建立在tcl语言基础上的一个工具,Expect是用来进行自动化控制和测试的工具.主要解决shell脚本中不可交互的问题.对于大规模的linux运维很有帮助.2.在linux运维和开发中,我们经常需要远程登录服务器进行操作,登录的过程是一个交互的过程,可能会余姚输入yes/no password等信息.为了模拟这种输入,可