十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章给大家分享的是有关linux如何自动化交互脚本expect的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
创新互联成立于2013年,先为公安等服务建站,公安等地企业,进行企业商务咨询服务。为公安企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
一、介绍
expect脚本是Tcl脚本语言的拓展。用来实现自动的交互式任务,无需人为干预。在实际开发中,运行shell脚本有时候会输入linux密码或者是MySQL密码等,而expect可以帮我们输入。
二、安装
expect在linux系统中没有自带,需要我们自行安装,在Ubuntu系统下,安装命令如下
?
1 2 |
|
三、简单的expect脚本
3.1、编写脚本
首先创建expect脚本
?
1 |
|
在hello.exp下写如下内容:
?
1 2 3 4 5 6 7 8 9 10 11 |
|
运行hello.exp
?
1 |
|
运行后,你会发现你的用户就变成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 3 |
|
说明:判断输出的信息有没有包含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
?
1 2 3 4 5 6 7 8 9 |
|
该脚本的意思就是输入你的账号,密码,并打印出来
(2)创建一个expect脚本,1.exp。让1.exp帮我们输入信息
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
(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
感谢各位的阅读!关于“linux如何自动化交互脚本expect”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
原文链接:https://blog.csdn.net/lendsomething/article/details/109066545