摘要:于是抛出本文的主角,以实现一系列的自动化交互动作。简介是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预。说白了,就是一套用来实现自动交互功能的软件。而利用,则可以根据程序的提示,模拟标准输入提供给程序,从而实现自动化交互执行。
*写在前面
最近开发的一个项目希望实现这样一个功能。将本地项目创建脚手架置于远程服务器,而用户需要创建项目时,仅需要在提供的页面上填入一些项目基础配置并提交,后台便会根据选择自动化创建项目并push上仓库。
咋看是个非常简单的需求,我们仅需要在用户发起创建请求时在后端调取shell脚本并可以实现这一系列的操作。
然而目前项目创建脚手架不支持多参数传递,只能通过用户输入完成各参数传递的操作。
于是抛出本文的主角: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
阅读 1728·2021-10-18 13:30
阅读 2604·2021-10-09 10:02
阅读 2961·2021-09-28 09:35
阅读 2090·2019-08-26 13:39
阅读 3520·2019-08-26 13:36
阅读 1948·2019-08-26 11:46
阅读 1132·2019-08-23 14:56
阅读 1692·2019-08-23 10:38