linux自动化交互脚本expect的示例分析
这篇文章将为大家详细讲解有关linux自动化交互脚本expect的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
什么是Linux系统
Linux是一种免费使用和自由传播的类UNIX操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统,使用Linux能运行主要的Unix工具软件、应用程序和网络协议。
一、介绍
expect脚本是Tcl脚本语言的拓展。用来实现自动的交互式任务,无需人为干预。在实际开发中,运行shell脚本有时候会输入linux密码或者是mysql密码等,而expect可以帮我们输入。
二、安装
expect在linux系统中没有自带,需要我们自行安装,在Ubuntu系统下,安装命令如下
sudoapt-getupdate sudoapt-getinstallexpect
三、简单的expect脚本
3.1、编写脚本
首先创建expect脚本
sudovimhello.exp
在hello.exp下写如下内容:
#!/usr/bin/expect
settimeout5
spawnsu
expect{
assword{send"123456\r"}#你的linux密码
}
interact运行hello.exp
expecthello.exp
运行后,你会发现你的用户就变成root用户了,我们用过linux的会知道,进入root用户是需要输入密码的,而使用了expect脚本,他就会自动帮我们输入密码。这就是expect的自动化交互。
3.2、解释脚本
(1) #!/usr/bin/expect指定要运行的脚本,与shell脚本中的 #!/bin/bash 一样意思,若你不知道你的expect安装在哪里,可以使用 which expect来查看。我的就安装在 /usr/bin/expect下
(2) set timeout 5set:是设置变量,可以设置自定义变量,也可以设置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{
asswordsend{"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为永不超时 |
| setnamevalue | 设置变量名为name,其值为value |
| setname[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"readprint"
read-p"pleaseinputnameinthere"NAME
echo${NAME}
read-p"inputpasswordinthere"PASSWORD
echo${PASSWORD}该脚本的意思就是输入你的账号,密码,并打印出来
(2)创建一个expect脚本,1.exp。让1.exp帮我们输入信息
#!/usr/bin/expect
#若要运行shell脚本,写shell脚本的绝对路径
spawnbash/home/hadoop/test/1.sh
#设置expect语句的超时时间。默认10s
settimeout3
expect{
#expect类似于swtich语句,在括号{}内匹配语句,只要一找到匹配的语句,就会执行,
#执行完之后就会退出,而加上exp_continue之后不会退出,会继续往下执行。
#这里是匹配字符串,不需要双引号,有大小写区分
name{
send"meizhaowei\r"
send_user"success\n"
#回显示给用户的信息,类似与echo,打印信息到控制台上
exp_continue
}
assword{send"123456\r"}
}
expecteof#与interact相反,执行完程序不进入人工交互(3)运行
正常来说,运行1.sh会让你手动输入name与password,但是这里运行了1.exp后,就能让1.exp来帮你输入1.sh的信息
关于“linux自动化交互脚本expect的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
推荐阅读
-
《Linux就该这么学》自学书籍
《Linux就该这么学》是当前网上最流行的Linux书籍,它提供有电子版免费下载,零基础Linux入门,本书定期更新,通俗易懂的文...
-
Linux就该这么学PDF教程下载
这是一本非常适合Linux学习者阅读的教程,目前该书籍免费提供word和pdf电子版本下载。红联Linux社区强烈推荐给广大Lin...
-
Linux磁盘空间不足怎么办?安全清理Linux磁盘的几种方法详解
-
linux怎么搭建ftp服务器(linux ftp命令)
linuxftp命令?很欢喜问本问题,此观点祝你好运吧!再连接ftp服务器。格式:ftp[hostname|ip-address...
-
linux怎么调出屏幕键盘(linux | 怎么打出来,管道符号怎么打)
linux|怎么打出来,管道符号怎么打?楼主,你好!“|”这个符号在linux环境称做“管道符”框输入方法:Shift键盘的“...
-
linux系统生成core文件(linux udp缓存配置)
linuxudp缓存配置?临时再添加:sysctl-w_max26214400无限制再添加:将以下行添加到中:_max26214...
-
linux Centos如何安装PHP7
linuxCentos如何安装PHP7今天小编给大家分享一下li...
-
干了10多年的php,还不会安装,是不是丢人
-
Linux编程的十大代码编辑器新鲜出炉,你用的入榜单了吗?
-
从7到8,CentOS又更新了什么
