一、介绍
expect脚本是Tcl脚本语言的拓展。用来实现自动的交互式任务,无需人为干预。在实际开发中,运行shell脚本有时候会输入linux密码或者是mysql密码等,而expect可以帮我们输入。
二、安装
expect在linux系统中没有自带,需要我们自行安装,在Ubuntu系统下,安装命令如下
sudo apt-get update sudo apt-get install expect
三、简单的expect脚本
3.1、编写脚本
首先创建expect脚本
sudo vim hello.exp
在hello.exp下写如下内容:
#!/usr/bin/expect set timeout 5 spawn su expect { assword {send "123456\r"} #你的linux密码 } interact
运行hello.exp
expect hello.exp
运行后,你会发现你的用户就变成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:向进程发送字符串
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
#!/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帮我们输入信息
#!/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的信息
若你想更深入的研究expect语法,这里有使用手册
英语原版:http://www.tcl.tk/man/expect5.31/expect.1.html
中文翻译:https://blog.csdn.net/cbuy888/article/details/80561461
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]