*写在前面
近来开辟的一个项目愿望完成如许一个功用。将当地项目建立脚手架置于长途服务器,而用户须要建立项目时,仅须要在供应的页面上填入一些项目基础设置并提交,背景便会依据挑选自动化建立项目并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"
}
}
栗子
未完待续