linux自动化交互脚本expect详解

一、介绍

expect脚本是Tcl脚本语言的拓展。用来实现自动的交互式任务,无需人为干预。在实际开发中,运行shell脚本有时候会输入linux密码或者是mysql密码等,而expect可以帮我们输入。

二、安装

expect在linux系统中没有自带,需要我们自行安装,在Ubuntu系统下,安装命令如下

sudo apt-get update
sudo apt-get install expect

三、简单的expect脚本

3.1、编写脚本

首先创建expect脚本

sudo vim hello.exp

在hello.exp下写如下内容:

#!/usr/bin/expect

set timeout 5

spawn su

expect {
  assword {send "123456\r"} #你的linux密码
}

interact

运行hello.exp

expect hello.exp

运行后,你会发现你的用户就变成root用户了,我们用过linux的会知道,进入root用户是需要输入密码的,而使用了expect脚本,他就会自动帮我们输入密码。这就是expect的自动化交互。

3.2、解释脚本

(1) #!/usr/bin/expect
指定要运行的脚本,与shell脚本中的 #!/bin/bash 一样意思,若你不知道你的expect安装在哪里,可以使用 which expect来查看。我的就安装在 /usr/bin/expect下

(2) set timeout 5
set:是设置变量,可以设置自定义变量,也可以设置expect脚本内部变量的值
timeout:timeout是expect脚本的内部变量,我们自定义名称的使用不能使用这种内部变量名。timeout意思是超时时间,单位是秒,默认是10s超时,也可以设置-1,永不超时

set timeout 5:意思是在expect语句中,5s后超时,不再作出选择。

(3) spawn su
开启一个新的进程来执行 su 命令

(4) expect { assword send {“123465\r”}}
expect:从进程中接收信息, 如果匹配成功, 就执行expect后的动作
send:向进程发送字符串

expect {
	assword send {"123465\r"}
} 

说明:判断输出的信息有没有包含assword的字符串,如果有,则发送一个命令123456\r( \r是敲回车),并退出expect语句;如果没有,则等待timeout的时间后退出expect语句。

(5) interact
执行完spawn内的命令后不退出,剩下的操作由我们人工来执行。如登陆ssh,expect脚本可以帮我们登录(不用手动输入密码),登陆之后需要我们手动交互。

3.3、总结

看到这里,相信你已经知道了expect脚本本质:提前知道了linux系统的返回信息,并捕获这些信息,来作出应答。

四、正文

4.1、常用命令说明

命令 说明
set timeout n 设置expect语句超时时间为n秒。-1为永不超时
set name value 设置变量名为name,其值为value
set name [lindex $argv 0] 设置变量名为name,其值为 传入 expect脚本的第一个 参数 。第一个参数的索引值为0,第二个为1,依次类推
spawn 启动新的进程,执行命令或者指定程序
expect 接收进程中返回的信息, 如果匹配成功(有大小写区分), 就执行expect后的动作
send 向进程发送字符串
send_user 用来打印信息,相当于shell中的echo
exp_continue 执行完expect后的动作后,使expect不退出,继续往下匹配
expect eof 不允许用户交互,直接退出(这个用的会比interact多)
interact 允许用户交互

4.2、示例:运行shell脚本

(1)创建一个shell脚本,1.sh

#!/bin/bash

echo "read print"
read -p "please input name in there " NAME
echo ${NAME}

read -p "input password in there " PASSWORD

echo ${PASSWORD}

该脚本的意思就是输入你的账号,密码,并打印出来

(2)创建一个expect脚本,1.exp。让1.exp帮我们输入信息

#!/usr/bin/expect

#若要运行shell脚本,写shell脚本的绝对路径
spawn bash /home/hadoop/test/1.sh

#设置expect语句的超时时间。默认10s
set timeout 3

expect {
  #expect类似于swtich语句,在括号{}内匹配语句,只要一找到匹配的语句,就会执行,
  #执行完之后就会退出,而加上exp_continue之后不会退出,会继续往下执行。

  #这里是匹配字符串,不需要双引号,有大小写区分
  name {
    send "meizhaowei\r"
    send_user "success\n"
    #回显示给用户的信息,类似与echo,打印信息到控制台上

    exp_continue
  }
  assword {send "123456\r"}
}

expect eof #与interact相反,执行完程序不进入人工交互

(3)运行

正常来说,运行1.sh会让你手动输入name与password,但是这里运行了1.exp后,就能让1.exp来帮你输入1.sh的信息

若你想更深入的研究expect语法,这里有使用手册
英语原版:http://www.tcl.tk/man/expect5.31/expect.1.html
中文翻译:https://blog.csdn.net/cbuy888/article/details/80561461

到此这篇关于linux自动化交互脚本expect的文章就介绍到这了,更多相关linux expect自动化交互脚本内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Linux expect实现自动登录脚本实例代码

    expect expect可以让我们实现自动登录远程机器,并且可以实现自动远程执行命令.当然若是使用不带密码的密钥验证同样可以实现自动登录和自动远程执行命令.但当不能使用密钥验证的时候,我们就没有办法了.所以,这时候只要知道对方机器的账号和密码就可以通过expect脚本实现登录和远程命令. 引言 目前在公司是一人一台虚拟机,大多数工作都要在虚拟机上完成,为此每天要执行很多次[ssh xxx@xxxxxx]指令登录虚拟机:有很多方式解决这个问题,如使用xshell.secureCRT等工具记录常用

  • Linux中使用expect脚本实现远程机器自动登录

    首先创建一个expect脚本ssh_expect,文件内容如下: #!/usr/bin/expect -f set hostname [lindex $argv 0] set user [lindex $argv 1] set passwd [lindex $argv 2] set timeout 30 set force_conservative 1 if {$force_conservative} { set send_slow {128 .1} } spawn ssh $user@$hos

  • linux中expect的介绍与使用示例

    一.概述 我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器等进行交互的功能.而Expect就使用来实现这种功能的工具. Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预.Expect的作者Don Libes在1990年 开始编写Expect时对Expect做有如下定义:Expect是一个用来实现自动交互功能的软件套件 (Expect [is a]

  • linux expect实现登陆远程主机并执行命令示例代码

    本文主要给大家介绍了关于linux expect实现登陆远程主机并执行命令的相关内容,分享出来供大家参考学习,下面来一看看详细的介绍: 示例代码: #!/bin/bash export cmd=$1 expect << 'END' set cmd "$env(cmd)" spawn ssh root@192.168.56.1 $cmd expect { "(yes/no)?" {send "yes\r";exp_continue} &

  • Linux下使用expect命令编写自动化交互脚本

    expect 是建立在工具控制语言(Tool Control Language,TCL)之上的一个工具,它允许你通过编写程序来对一些日常繁琐的任务进行有交互界面的自动化操作.在 expect 上下文环境,你可以使用一些额外的只适用于 expect 上下文环境的命令,如 spawn.send.interact 等命令. expect 预期的终端输出 这里预期的输出从左往右只要存在匹配即可.它相当于 Python 的 search() 函数,而非 match() 函数.举个例子你就明白了. 想要登陆

  • linux自动化交互脚本expect详解

    一.介绍 expect脚本是Tcl脚本语言的拓展.用来实现自动的交互式任务,无需人为干预.在实际开发中,运行shell脚本有时候会输入linux密码或者是mysql密码等,而expect可以帮我们输入. 二.安装 expect在linux系统中没有自带,需要我们自行安装,在Ubuntu系统下,安装命令如下 sudo apt-get update sudo apt-get install expect 三.简单的expect脚本 3.1.编写脚本 首先创建expect脚本 sudo vim hel

  • 利用expect命令实现Shell自动化交互的方法详解

    背景 linux脚本中有很多场景是进行远程操作的,例如远程登录ssh.远程复制scp.文件传输sftp等.这些命令中都会涉及到安全密码的输入,正常使用命令时是需要人工手动输入密码并接受安全验证的.为了实现自动化远程操作,我们可以借用expect的功能. expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预.expect是不断发展的,随着时间的流逝,其功能越来越强大,已经成为系统管理员的的一个强大助手.expect需要Tcl编程语言的支持,要在系统上运行expec

  • linux 下的yum命令详解

    yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载.安装.yum提供了查找.安装.删除某一个.一组甚至全部软件包的命令,而且命令简洁而又好记. yum的命令形式一般是如下:yum [options] [command] [package ...] 其中的[opt

  • Linux定时任务Crontab命令使用详解与总结

    crontab命令是Unix和Linux用于设置周期性被执行的指令,是互联网很常用的技术,很多任务都会设置在crontab循环执行 如果不使用crontab,那么任务就是常驻程序,这对你的程序要求比较高,一个要求你的程序是24X7小时不宕机,一个是要求你的调度程序比较可靠,实际工作中,90%的程序都没有必要花这么多时间和精力去解决上面的两个问题的,只需要写好自己的业务逻辑,通过Crontab这 工业级程序去调度就行了,Crontab的可靠性,健壮性,大家应该是毫无疑问的. crontab命令简易

  • linux 下selenium chrome使用详解

    安装chrome wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm yum install ./google-chrome-stable_current_x86_64.rpm yum install mesa-libOSMesa-devel gnu-free-sans-fonts wqy-zenhei-fonts 安装chromedriver 淘宝源(推荐) wget http://np

  • Golang 动态脚本调研详解

    目录 一.技术背景 1.1 程序的动态链接技术 1.1.1 动态链接库 1.1.2 动态共享对象 1.1.3 非编译语言的动态技术 1.2 Golang 的动态技术 二.Golang 的第三方解释器(Yaegi) 2.1 使用场景 2.1.1 内嵌解释器 2.1.2 动态扩展框架 2.1.3 命令行解释器 2.2 数据交互 2.2.1 数据输入 2.1.2 数据输出 三.实现原理 3.1 AST - 抽象语法树 3.1.1 抽象语法树示例 3.1.2 执行抽象语法树 一.技术背景 1.1 程序的

  • linux 随机密码生成工具mkpasswd详解及实例

    linux 随机密码生成工具mkpasswd详解及实例 mkpasswd命令生成随机复杂密码,前提安装expect,然后执行mkpasswd命令即可生成随机的密码. 一.基本的命令安装 安装expect: -l # (密码的长度定义, 默认是 9) -d # (数字个数, 默认是 2) -c # (小写字符, 默认是 3) -C # (大写字符, 默认是 2) -s # (特殊字符, 默认是 1) -v (详细...) -p prog (程序设置密码, 默认是 passwd) 详细参数,用如下命

  • LINUX重启MYSQL的命令详解

    如何启动/停止/重启MySQL 一.启动方式 1.使用 service 启动:service mysqld start 2.使用 mysqld 脚本启动:/etc/inint.d/mysqld start 3.使用 safe_mysqld 启动:safe_mysqld& 二.停止 1.使用 service 启动:service mysqld stop 2.使用 mysqld 脚本启动:/etc/inint.d/mysqld stop 3. mysqladmin shutdown 三.重启 1.

  • Linux crontab定时任务配置方法(详解)

    CRONTAB概念/介绍 crontab命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供之后读取和执行. cron 系统调度进程. 可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行.cron是系统主要的调度进程,可以在无需人工干预的情况下运行作业.crontab命令允许用户提交.编辑或删除相应的作业.每一个用户都可以有一个crontab文件来保存调度信息.系统管理员可以通过cron.deny 和 cron

  • Linux操作系统启动流程图文详解

    理解Linux操作系统启动流程,能有助于后期在企业中更好的维护Linux服务器,能快速定位系统问题,进而解决问题. 上图为Linux操作系统启动流程 1.加载BIOS 计算机电源加电质检,首先加载基本输入输出系统(Basic Input Output System,BIOS),BIOS中包含硬件CPU.内存.硬盘等相关信息,包含设备启动顺序信息.硬盘信息.内存信息.时钟信息.即插即用(Plug-and-Play,PNP)特性等.加载完BIOS信息,计算机将根据顺序进行启动. 2.读取MBR 读取

随机推荐