Expect脚本学习

一、Expect是什么

处理交互的一种脚本语言
 
 

二、交互流程

spawn启动指定进程 -> expect获取指定关键字 -> send想指定进程发送指定指令 -> 执行完成后退出
 
 

三、主要命令

1、spawn命令

启动新的交互进程, 后面跟命令或者指定程序

#启动一个telnet进程
spawn  telnet  192.168.1.1

 

2、expect命令

从进程中接收信息, 如果匹配成功, 就执行expect后的动作
expect命令也可以匹配正则表达式

#匹配Login,匹配成功则输入root\r,同时匹配Timeout,匹配成功则退出
expect {
	"Login" { 
		send: "root\r"
		}
	"Timeout" {
		exit 1
		}
}

 

3、send命令

向进程发送字符串

#匹配Login,匹配成功则发送root\r
expect {
	"Login" { 
		send: "root\r"
		}
}

 

4、interact命令

允许人为干预交互

#例如cmd为要自动执行的命令,如果命令为空,则停留在该进程中(例如Telnet、SSH)由人工进行交互
if { $cmd == "" } {
    interact 
    exit 0
}

 

5、set和puts命令

set设置变量的值
puts输出变量的值

#设置变量user的值为root,输出变量user的值
set user “root”
puts $user

 
 

四、常用场景

1、获取脚本传入参数

脚本传入的参数存在$argv数组中,下标从0开始

#设置user的值为传入的第一个参数,设置password的值为传入的第二个参数
set user [lindex $argv 0]
set password [lindex $argv 1]

 

2、超时处理(timeout)

set timeout 超时时间,然后expect tomeout

#30秒超时,超时后退出程序
spawn -noecho telnet $ipaddress
set timeout 30
expect {
   timeout exit
   "Login" {
   		send: "root\r"
   }
}

 

3、文件结尾处理(eof)

expect执行结束, 退出

spawn -noecho telnet $ipaddress
set timeout 30
expect {
   timeout exit
   eof {
   		puts: "finish"
   }
   "Login" {
   		send: "root\r"
   }
}

 

4、匹配所有样式

可以对timeout和eof做统一处理

spawn -noecho telnet $ipaddress
set timeout 30
expect {
   "Login" {
   		send: "root\r"
   }
   default {exit 1}
}

 

五、Example

ssh登录到192.168.1.1,执行ls命令后留在该终端

#!/usr/bin/expect
spawn -noecho ssh root@192.168.1.1
expect "*password:"
send "321321321\r"
expect "#"
send "ls\n"
interact

参考链接:
https://blog.miuyun.work/archives/13037464

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
xpect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。Expect的作者Don Libes在1990年开始编写Expect时对Expect做有如下定义:Expect是一个用来实现自动交互功能的软件套件(Expect [is a] software suite for automating interactive tools)。使用它系统管理员的可以创建脚本用来实现对命令或程序提供输入,而这些命令和程序是期望从终端(terminal)得到输入,一般来说这些输入都需要手工输入进行的。Expect则可以根据程序的提示模拟标准输入提供给程序需要的输入来实现交互程序执行。甚至可以实现实现简单的BBS聊天机器人。 :)   Expect是不断发展的,随着时间的流逝,其功能越来越强大,已经成为系统管理员的的一个强大助手。Expect需要Tcl编程语言的支持,要在系统上运行Expect必须首先安装Tcl。   Expect工作原理 :   从最简单的层次来说,Expect的工作方式象一个通用化的Chat脚本工具。Chat脚本最早用于UUCP网络内,以用来实现计算机之间需要建立连接时进行特定的登录会话的自动化。   Chat脚本由一系列expect-send对组成:expect等待输出中输出特定的字符,通常是一个提示符,然后发送特定的响应。例如下面的Chat脚本实现等待标准输出出现Login:字符串,然后发送somebody作为用户名;然后等待Password:提示符,并发出响应sillyme。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值