Expect 自动化交互式程序

Expect介绍

expect是一个用来实现自动交互功能的软件套件,是基于TCL的脚本编程工具语言。

为什么要使用Expect

在现今的运维中,自动化运维已经成为运维的主流趋势,但是在很多情况下,执行系统命令或程序时,系统会以交互式的形式要求运维人员必须输入指定字符之后才能继续执行命令。例如,为用户设置密码时,一般情况下就需要手动输入2次密码。再比如使用SSH远程连接服务器时,第一次连接要和系统实现俩次交互输入:
如图:

在这里插入图片描述

安装Expect软件

[root@zh ~]# yum install -y expect

下面利用Expect的功能实现自动交互,发送密码并执行上述ssh命令(由于已经执行过一次ssh了,yes的交互就不会再出现了)

[root@zh ~]# cat test.exp  # <==扩展名使用exp代表是Expect脚本
#!/usr/bin/expect		   # <==脚本开头解释器,和shell类似,表示程序使用Expect解析
spawn ssh root@192.168.1.141 uptime  # <==执行ssh命令(注意开头必须要有spawn,否则无法实现交互)
expect "*password:" 	   #<==利用Expect获取执行上述ssh命令输出的字符串是否为期待的字符串 *password,这里的*是通配符
send "1\n"      		   #<==当获取到期待的字符串password时,则发送 1 密码给系统,\n为换行
expect eof     			   #<==处理完毕后结束Expect

执行Expect脚本

[root@zh ~]# expect  test.exp 
spawn ssh root@192.168.1.141 uptime
root@192.168.1.141's password: #<==这里不需要手动输入密码了
 01:19:24 up 43 min,  2 users,  load average: 0.00, 0.01, 0.05

spawn 命令

spawn 命令的语法为:
spawn [选项]	[需要自动交互的命令或程序]

例如:

spawn ssh root@192.168.1.141 uptime

expect 命令

expect 命令语法
expect  表达式   [动作]

示例如下:

spawn ssh root@192.168.1.141 uptime
expect "*password" {send "123456\r"}

说明

1)exp_send和send类似,后面的 \r(回车) 、\n(换行)
2)expect {} , 类似多行expect。
3)匹配多个字符串,需要在每次匹配并执行动作后,加上exp_continue。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值