linux自动化交互脚本expect详解

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

二、安装

expect在linux系统

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

sudo apt-get updatesudo apt-get install expect

 

三、简单的expect脚本

 

3.1、编写脚本

   
首先创建expect脚本

                               
1
sudo vim hello.exp

   
在hello.exp下写如下内容:

                               
1                               
2                               
3                               
4                               
5                               
6                               
7                               
8                               
9                               
10                               
11
#!/usr/bin/expect                                   
 set timeout 5                                   
 spawn su                                   
 expect {  assword {send "123456\r"} #你的linux密码}                                   
 interact

   
运行hello.exp

                               
1
expect hello.exp

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

linux自动化交互脚本expect详解

 

3.2、解释脚本

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

linux自动化交互脚本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:向进程发送字符串

                               
1                               
2                               
3
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

                               
1                               
2                               
3                               
4                               
5                               
6                               
7                               
8                               
9
#!/bin/bash                                   
 echo "read print"read -p "please input name in there " NAMEecho ${NAME}                                   
 read -p "input password in there " PASSWORD                                   
 echo ${PASSWORD}

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

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

                               
1                               
2                               
3                               
4                               
5                               
6                               
7                               
8                               
9                               
10                               
11                               
12                               
13                               
14                               
15                               
16                               
17                               
18                               
19                               
20                               
21                               
22                               
23                               
24
#!/usr/bin/expect                                   
 #若要运行shell脚本,写shell脚本的绝对路径spawn bash /home/hadoop/test/1.sh                                   
 #设置expect语句的超时时间。默认10sset 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)运行

linux自动化交互脚本expect详解

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

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

原创文章,作者:admin,如若转载,请注明出处:https://hostingchat.cn/1510.html

(0)
admin的头像admin
上一篇 2024年8月19日 上午12:00
下一篇 2024年8月21日

相关推荐

  • CentOS Linux升级内核kernel的详细过程

    一、背景 某些情况需要对Linux发行版自带的内核kernel可能版本较低,需要对内核kernel进行升级。例如:CentOS 7.x 版本的系统默认内核是3.10.0,如果需要再…

    2025年6月12日
    000
  • Linux流量监控工具iftop

    在类Unix系统中可以使用top查看系统资源、进程、内存占用等信息。查看网络状态可以使用netstat、nmap等工具。若要查看实时的网络流量,监控TCP/IP连接等,则可以使用i…

    2018年11月12日
    000
  • Linux服务器添加SWAP分区

    SWAP分区简介 Swap分区在系统的物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被…

    2017年12月25日
    000
  • RAID、LVM、LVM操作实例详解

    一、RAID简介 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有”独立磁盘构成的具有冗余能力的阵列”之…

    2017年12月14日
    000
  • Linux系统inodes资源耗尽问题

    1. inodes介绍 Linux系统下文件数据储存在"块"中,文件的元信息,例如文件的创建者、文件的创建日期、文件的大小等。这种储存文件元信息的区域就叫做in…

    2024年7月27日
    000
  • Linux磁盘性能分析

    读写IO(Read/Write IO)操作 磁盘是用来给我们存取数据用的,因此当说到IO操作的时候,就会存在两种相对应的操作,存数据时候对应的是写IO操作,取数据的时候对应的是是读…

    2018年11月12日
    000
  • Linux系统LVM磁盘扩容(EXT4文件系统)

    一、LVM简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现。LVM将一个或多个…

    2020年1月13日
    000
  • Linux环境变量详解与实战

    前言 本章节我们来看看环境变量和命令行参数是什么。我想大家可能会有疑惑,我们写的程序运行时需要 " ./ "。但是我们 ls、cd 等命令却不需要。这就和我们环…

    2025年10月14日
    000
  • Linux服务器PHP添加Curl扩展

    一、PHP扩展管理 1、什么是php扩展 php扩展就是php核心并不支持的功能,然后可以通过扩展的方式进行扩展PHP的功能,常见的扩展如MYSQL,gb2等等。 2、查看PHP安…

    2019年6月24日
    000
  • Nginx开启php-fpm状态页及状态详解

    说明 php-fpm和nginx一样,内建了个状态页,可以通过该状态页了解监控php-fpm的状态。 1、开启开启 php-fpm 状态页 #找到php的安装目录下的www.con…

    2019年7月1日
    000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注