文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

linux如何自动化交互脚本expect

2023-06-07 15:00

关注

这篇文章给大家分享的是有关linux如何自动化交互脚本expect的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

一、介绍

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

二、安装

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

?

1

2

sudo apt-get update

sudo 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 " NAME

echo ${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语句的超时时间。默认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)运行

linux如何自动化交互脚本expect

正常来说,运行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”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

原文链接:https://blog.csdn.net/lendsomething/article/details/109066545

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯