Expect入门
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Expect入门相关的知识,希望对你有一定的参考价值。
文章目录
一、工作流程
spawn 启动指定进程 -> expect 获取期待的关键字 -> send 向指定进程发送指定字符 -> 结束
二、安装
yum install -y expect
apt install -y expect
三、基本案例
test.exp
#!/usr/bin/expect
spawn ssh bee@192.168.74.152 date
expect "*password" send "123456\\n"
expect
执行
expect
四、基本命令
- spwan 执行一个命令或程序
- expect
捕获spwan启动命令的输出。-re 参数启用正则表达式。 - send
与expect在同一行需要使用,否则不需要。 - 连续匹配:
#!/usr/bin/expect
spawn ssh root@server uptime
expect # 起始大括号前要有空格
"username" exp_send "cerana\\r";exp_continue
"*yes/no*" exp_send "yes\\r";exp_continue
"*password" exp_send "123456\\r"
expect
说明:
- exp_send和send一样,\\r和\\n一样。
- 需要连续匹配的,需要在每次完成匹配并执行动作后,加上exp_continue。
- spawn 后边可以执行脚本,如spawn /bin/sh test.sh
- send_user
打印提示信息,类似echo。 - exit
退出expect脚本。可以做一些关闭前的动作。
exit -onexit
send_user "Goodbye\\n"
- 定义及输出变量
set password "123456"
puts $password
- 脚本传参
set file [lindex $argv 0] # $1
set host [lindex $argv 1] # $2
set dir [lindex $argv 2] # $3
send_user "$file\\t$host\\t$dir\\n"
puts $argc # 参数的个数
puts $argv0 # expect脚本的名字
- if语句
if $argc != 3
send_user "usage: expect $argv0 # $argv0为脚本名字
exit
else
puts "good."
- expect eof
匹配结束符 - timeout
通过该变量来规定整个Expect操作的时间。0表示立即超时,-1表示永不超时。
#!/usr/bin/expect
spawn ssh root@192.168.74.231 uptime
set timeout 30 # 设置整个expect操作序列的超时时间是30秒
expect "yes/no" exp_send "yes/r";exp_continue
expect timeout puts "Request timeout";return # return退出
另一种用法
#!/usr/bin/expect
spawn ssh root@server uptime
expect
-timeout 3
"yes/no" exp_send "yes\\r";exp_continue
timeout puts "Request timeout";return
五、综合案例
- 循环执行expect
#!/bin/bash
if [ $# -ne 1 ]
then
echo $"Usage:$0
exit 1
fi
cmd=$1
for n in 128 129 130
do
expect test.exp 192.168.33.$n "$cmd"
done
以上是关于Expect入门的主要内容,如果未能解决你的问题,请参考以下文章