linux⾃动化交互脚本expect详解settimeout5是意思是在expect
语句中。。。
linux⾃动化交互脚本expect详解
更新时间:2020年10⽉21⽇ 10:13:20 作者:lendsomething
这篇⽂章主要介绍了linux⾃动化交互脚本expect的相关知识,本⽂给⼤家介绍的⾮常详细,对⼤家的学习或⼯作具有⼀定的参考借鉴价值,需要的朋友可以参考下
⽬录
⼀、介绍
expect脚本是Tcl脚本语⾔的拓展。⽤来实现⾃动的交互式任务,⽆需⼈为⼲预。在实际开发中,运⾏shell脚本有时候会输⼊linux密码或者是mysql密码等,⽽expect可以帮我们输⼊。
⼆、安装
expect在linux系统中没有⾃带,需要我们⾃⾏安装,在Ubuntu系统下,安装命令如下
1 2sudo apt-get update sudo apt-get install expect
三、简单的expect脚本
3.1、编写脚本
⾸先创建expect脚本
1sudo p
在p下写如下内容:
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
运⾏p
p
运⾏后,你会发现你的⽤户就变成root⽤户了,我们⽤过linux的会知道,进⼊root⽤户是需要输⼊密码的,⽽使⽤了expect脚本,他就会⾃动帮我们输⼊密码。这就是expect的⾃动化交互。
3.2、解释脚本
(1) #!/usr/bin/expect
指定要运⾏的脚本,与shell脚本中的#!/bin/bash⼀样意思,若你不知道你的expect安装在哪⾥,可以使⽤which expect来查看。我的就安装在/usr/bin/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 3expect {
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
123456789#!/bin/bash
在linux下安装vim的命令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
234567891011121314151617181920212223
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
)运⾏
正常来说,运⾏1.sh 会让你⼿动输⼊name 与password ,但是这⾥运⾏了1.exp 后,就能让1.exp 来帮你输⼊1.sh 的信息
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论