expect脚本

expect介绍

expect 是一个用来处理交互的命令。借助 expect 可以将交互过程写在一个脚本里,就可以实现自动化完成,无须用户输入

mac下安装

  1. 安装homebrew
  2. brew install expect 安装expect

启用选项

  • -c:执行脚本前先执行的命令,可多次使用。

  • -d:debug模式,可以在运行时输出一些诊断信息,与在脚本开始处使用exp_internal 1相似。

  • -D:启用交换调式器,可设一整数参数。

  • -f:从文件读取命令,仅用于使用#!时。如果文件名为"-",则从stdin读取(使用"./-"从文件名为-的文件读取)。

  • -i:交互式输入命令,使用"exit"或"EOF"退出输入状态。

    expect eof

    expect exit

  • --:标示选项结束(如果你需要传递与expect选项相似的参数给脚本时),可放到#!行:#!/usr/bin/expect --

  • -v:显示expect版本信息。

变量

  • set varible xxx设置变量varible为xxx

  • $varible 获取变量

  • set timeout n 设置超时时间为n秒

  • set timeout -1 timeout 时间设置为无限时

  • 设置使用参数变量

    touch test
    sudo chmod +x ./test
    ./test meng run
    
    #questions文件
    #!/bin/bash
    echo "Hello, who are you?"
    read $REPLY #不加read,会导致下面expect执行的时候,参数1和参数2在最后展示
    echo "Can I ask you some questions?"
    read $REPLY
    echo "What is your favorite topic?"
    read $REPLY
    
    #test文件
    #设置变量varible1为expect的第一个参数(可使用$varible1获取参数1)
    #不同于shell script,shell第一个参数为$1
    #!/usr/bin/expect -f 
    set my_name [lindex $argv 0]
    set my_favorite [lindex $argv 1]
    set timeout -1
    spawn ./questions
    expect "Hello, who are you?\r"
    send -- "Im $my_name\r"
    expect "Can I ask you some questions?\r"
    send -- "Sure\r"
    expect "What is your favorite topic?\r"
    send -- "$my_favorite\r"
    expect eof
    

    在这里插入图片描述

条件测试

使用大括号编写条件测试

expect {
    "something" { send -- "send this\r" }
    "*another" { send -- "send another\r" }
}
  • if elseif

    puts类似shell脚本的echo,将内容输出到控制台

    #!/usr/bin/expect -f
    set NUM 1
     if { $NUM < 5 } {
        puts "\Smaller than 5\n"
    } elseif { $NUM > 5 } {
        puts "\Bigger than 5\n"
    } else {
        puts "\Equals 5\n"
    }
    
  • while循环(while循环必须使用花括号来包含)

    #!/usr/bin/expect -f
    set NUM 0
    while { $NUM <= 5 } {
        puts "\nNumber is $NUM"
        set NUM [ expr $NUM + 1 ] 
    }
    puts ""
    
  • for循环

    #!/usr/bin/expect -f
    for {set NUM 0} {$NUM <= 5} {incr NUM} {
        puts "\nNUM = $NUM"
    }
    puts ""
    

函数

proc 函数名 {参数} {
	xxxx
}
[函数名 参数]
#!/usr/bin/expect -f
proc myfunc { TOTAL } {
    set TOTAL [expr $TOTAL + 1]
    return "$TOTAL"
}
set NUM 0
while {$NUM <= 5} {
    puts "\nNumber $NUM"
    set NUM [myfunc $NUM]
}
puts ""

用法

  • send:用于向进程发送字符串(代替用户手动输入)

  • expect:从进程接收字符串(也可以是正则),匹配脚本的反馈

    • $expect_out(buffer)   匹配到的是所有输入
    • $expect_out(0,string)   匹配到 expect 参数的输入
    • expect 'password:' {send "$passwd"} 匹配password
  • spawn:启动新的进程

    • spawn ssh username@passwd -p port 开启ssh连接
  • interact:允许用户交互

    有时,您的Expect脚本包含一些您不想与使用Expect脚本的其他用户共享的敏感信息,例如密码或任何其他数据,因此您希望脚本从您那里获取此密码并继续正常进行自动化。

    interact命令将控件还原回键盘。执行此命令后,Expect将开始从键盘读取。

  • puts类似shell脚本的echo,将内容输出到控制台

  • set varible xxx设置变量varible为xxx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值