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

说明:

  1. exp_send和send一样,\\r和\\n一样。
  2. 需要连续匹配的,需要在每次完成匹配并执行动作后,加上exp_continue。
  3. 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入门的主要内容,如果未能解决你的问题,请参考以下文章

Expect入门

expect入门--自动化linux交互式命令

expect(...).toHaveAttribute 不是函数 - 为啥?

KMM 入门平台差异化实现

KMM 入门平台差异化实现

KMM 入门平台差异化实现