这篇文章给大家分享的是有关linux如何自动化交互脚本期望的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
<强>一、介绍强>
希望脚本是Tcl脚本语言的拓展。用来实现自动的交互式任务,无需人为干预。在实际开发中,运行shell脚本有时候会输入linux密码或者是mysql密码等,而预计可以帮我们输入。
<强>二、安装强>
期望在linux系统中没有自带,需要我们自行安装,在Ubuntu系统下,安装命令如下
?
1
2
<代码> sudo 代码> <代码> apt-get更新代码>
<代码> sudo 代码> <代码> apt-get 代码> <代码> 代码> <代码>安装预计代码>
<强>三,简单的预计脚本强>
<强> 3.1,编写脚本强>
首先创建预计脚本
?
1
<代码> sudo 代码> <代码> vim hello.exp 代码>
在hello.exp下写如下内容:
?
1
2
3
4
5
6
7
8
9
10
11
<代码> # !/usr/bin/期望代码>
,
<代码> 代码> <代码>设置超时5 代码>
,
<代码>产卵苏代码> <代码> 代码>
,
<代码>期待{代码>
, <代码>,代码> <代码> assword{发送代码> <代码>“123456 \ r" 代码> <代码>}代码> <代码> #你的linux密码代码>
<代码>}代码>
,
<代码>交互代码>
运行hello.exp
?
1
<代码>期待hello.exp 代码>
运行后,你会发现你的用户就变成根用户了,我们用过linux的会知道,进入根用户是需要输入密码的,而使用了会脚本,他就会自动帮我们输入密码。这就是预期的自动化交互。
<强> 3.2,解释脚本强>
(1)<强> # !/usr/bin/期望强>
指定要运行的脚本,与外壳脚本中的<代码> # !/bin/bash 代码>一样意思,若你不知道你的期望安装在哪里,可以使用<代码>期待> 代码来查看。我的就安装在/usr/bin/expect下
(2)<强>设置超时5 强>
设置:是设置变量,可以设置<强>自定义变量>强,也可以设置期望脚本<强>内部变量强>的值
超时:<强>超时强>是期望脚本的<强>内部变量>强,我们自定义名称的使用不能使用这种<强>内部变量名强> .timeout意思是超时时间,单位是秒,默认是10年代超时,也可以设置1,永不超时
设置超时5:意思是在期望语句中,5 s后超时,不再作出选择。
(3)<强>产卵苏强>
开启一个新的进程来执行苏<代码> 代码>命令
(4)<强>期待{assword发送{“123465 \ r "}} 强>
期望:从进程中接收信息,如果匹配成功,就执行期望后的动作
发送:向进程发送字符串
?
1
2
3
<代码>期待{代码>
<代码>,,,,代码> <代码> assword发送{代码> <代码>“123465 \ r" 代码> <代码>}代码>
<代码>}代码>
说明:判断输出的信息有没有包含<代码> assword> 代码的字符串,如果有,则发送一个命令<代码> 123456 \ r> 代码(\ r是敲回车),并退出期望语句;如果没有,则等待超时的时间后退出期望语句。
(5)<强> 交互强>
执行完卵内的命令后不退出,剩下的操作由我们人工来执行。如登陆ssh,期望脚本可以帮我们登录(不用手动输入密码),登陆之后需要我们手动交互。
<强> 3.3,总结强>
看到这里,相信你已经知道了期望脚本本质:提前知道了linux系统的返回信息,并捕获这些信息,来作出应答。
<强>四,正文强>
<强> 4.1,常用命令说明强>
命令 说明 设置超时n 设置期望语句超时时间为n秒,1为永不超时 set name 价值 设置变量名为名字,其值为价值 set name  lindex $ argv [0] 设置变量名为名字,其值为,传入,期望脚本的第一个,参数,第。一个参数的索引值为0,第二个为1,依次类推 产卵 启动新的进程,执行命令或者指定程序 预计 接收进程中返回的信息,如果匹配成功(有大小写区分),就执行期望后的动作 发送 向进程发送字符串 send_user 用来打印信息,相当于壳中的回声 exp_continue 执行完料后的动作后,使期望不退出,继续往下匹配 预计eof 不允许用户交互,直接退出(这个用的会比多互动) 交互 允许用户交互