资讯专栏INFORMATION COLUMN

使用Expect实现自动化交互

frank_fun / 1922人阅读

摘要:于是抛出本文的主角,以实现一系列的自动化交互动作。简介是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预。说白了,就是一套用来实现自动交互功能的软件。而利用,则可以根据程序的提示,模拟标准输入提供给程序,从而实现自动化交互执行。

*写在前面

最近开发的一个项目希望实现这样一个功能。将本地项目创建脚手架置于远程服务器,而用户需要创建项目时,仅需要在提供的页面上填入一些项目基础配置并提交,后台便会根据选择自动化创建项目并push上仓库。
咋看是个非常简单的需求,我们仅需要在用户发起创建请求时在后端调取shell脚本并可以实现这一系列的操作。
然而目前项目创建脚手架不支持多参数传递,只能通过用户输入完成各参数传递的操作。
于是抛出本文的主角:Expect,以实现一系列的自动化交互动作。

Expect简介
expect是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预。说白了,expect就是一套用来实现自动交互功能的软件。

在实际工作中,我们运行命令、脚本或程序时,这些命令、脚本或程序都需要从终端输入某些继续运行的指令,而这些输入都需要人为的手工进行。而利用expect,则可以根据程序的提示,模拟标准输入提供给程序,从而实现自动化交互执行。这就是expect!!!

Expect命令

使用expect时,首先需要在文件顶部写入#!/usr/bin/expect,已告知进程这是一个expect文件。而在脚本书写中基本离不开以下这「六」个命令。

spawn 启动新的进程

expect 用来等待一个进程的反馈,我们根据进程的反馈,再发送对应的交互命

send 发送需要交互的值,替代了用户手动输入内容

set 设置变量值

expect eof 自动化结束

interact 退出自动化,进入人工交互

Expect语法

expect使用的是tcl语法,详细教程可查阅TCL基本语法 - Tcl教程
这里提供几个简单的流程控制,一般来说已经够用了。

传参

expect参数值存放在$argv中,比如取第一个参数就是[lindex $argv 0],以此类推。

// 执行命令 xxx.sh mike 22 engineer

#!/usr/bin/expect
set name = [lindex $argv 0]
set age = [lindex $argv 1]
set job = [lindex $argv 2]
if/else
if {$a == "a"} {
  set flag = 0
} else {
  set flag = 1
}

expect "*请输入xxx的值*"
send $flag
循环匹配

一般来说expect匹配成功会会退出语句,而exp_continue表示循环匹配。匹配到改关键字后继续从头开始匹配。例如安装软件时需要输入多个 yes。

expect {
    "*yes/no*" {
        send "yes"
        exp_continue
    }
    eof
    {
        send "eof"
    }
}
栗子

未完待续

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/109254.html

相关文章

  • Linux expect指令实现ssh自动登录脚本

    摘要:写在前面目前在公司是一人一台虚拟机,大多数工作都要在虚拟机上完成,为此每天要执行很多次指令登录虚拟机有很多方式解决这个问题,如使用等工具记录常用的连接,我就写了一个简单的脚本实现一键登录脚本内容如下密码再将配置别名,或移动到可执行目录中,即 写在前面:目前在公司是一人一台虚拟机,大多数工作都要在虚拟机上完成,为此每天要执行很多次【ssh xxx@xxxxxx】指令登录虚拟机;有很多方式...

    Astrian 评论0 收藏0
  • 加速器:Expect脚本

    摘要:目前,大部分系统安装有。命令会等待接受该进程返回的结果并且会根据返回的字符串来决定下一步的操作。然后结束脚本的运行。为了能够提高效率,可以借助脚本。无参数的脚本内容如下在终端执行,终端显示。 1、Expect简介 Expect是由 Don Libes 基于Tcl语言开发的,并被广泛应用于交互式操作和自动化测试的场景中,它尤其适用于需要对多台服务器执行相同操作的环境中,可以大幅度提高系统...

    dongxiawu 评论0 收藏0
  • 加速器:Expect脚本

    摘要:目前,大部分系统安装有。命令会等待接受该进程返回的结果并且会根据返回的字符串来决定下一步的操作。然后结束脚本的运行。为了能够提高效率,可以借助脚本。无参数的脚本内容如下在终端执行,终端显示。 1、Expect简介 Expect是由 Don Libes 基于Tcl语言开发的,并被广泛应用于交互式操作和自动化测试的场景中,它尤其适用于需要对多台服务器执行相同操作的环境中,可以大幅度提高系统...

    everfight 评论0 收藏0
  • 使用 expect 在必要情况下实现自动输入密码登陆

    摘要:原文地址补充网友穗乃果提示,用可以更完美地解决这个问题。试了一下,因为安全原因,默认不支持安装可以用以下命令安装使用方法你的密码添加命令别名在中添加一行你的密码使之生效完美解决了使用带来的副作用,感谢穗乃果 由于公司的堡垒机必须要用域账号登陆,然后转发密钥,所以每次登陆堡垒机的时候都需要手动输入域账号密码。密码太长且复杂,手动输入容易输错,故使用 expect 写了个脚本来做这个事情,...

    Barry_Ng 评论0 收藏0
  • Linux 命令--expect动化交互程序

    摘要:是的自动化交互程序从其他的交互式程序期望输出同时对所期望的输出做出相应。下面通过一段代码来说明常用的命令。现在我们想通过命令远程登录一台机器同时在远程主机上执行命令。 expect是Linux的自动化交互程序;expect从其他的交互式程序期望(expect)输出,同时对所期望的输出做出相应。 下面通过一段代码来说明expect常用的命令。现在我们想通过ssh命令远程登录一台机器, 同...

    wangxinarhat 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<