linux expect的for和while循环以及if else 用法总结

linux命令 waitig 8918℃ 百度已收录 0评论

linux 的expect是一个很强大的脚本工具,可以帮助我们执行很多自动化交互动作,是一个非常实用的脚本类工具。

关于expect的基本功能和用法请看我的上一篇文章:

linux expect脚本详解

这篇文章对expect的基本的命令做了一个基本的介绍,对于判断和循环的语法没有做过多介绍,本文着重讲一下expect的if else 用法和for/while循环的用法。

循环详解

我们通过以下例子来了解下expect的循环的用法,大家可以慢慢理解

    #!/usr/bin/expect --
    # http://www.waitig.com
# for Bob testing # puts "---1---" for {set i 0} {$i < 10} {incr i} { puts "I inside first loop: $i" } puts "---2---" for {set i 3} {$i < 2} {incr i} { puts "I inside second loop: $i" } puts "---3---" puts "Start" set i 0 while {$i < 10} { puts "I inside third loop: $i" incr i puts "I after incr: $i" } set i 0 incr i puts "---4---" puts "$i" # This is equivalent to: set i [expr {$i + 1}] #expect里的加减法 puts "---5---" puts "$i"
  • 运行结果
    ---1---
    I inside first loop: 0
    I inside first loop: 1
    I inside first loop: 2
    I inside first loop: 3
    I inside first loop: 4
    I inside first loop: 5
    I inside first loop: 6
    I inside first loop: 7
    I inside first loop: 8
    I inside first loop: 9
    ---2---
    ---3---
    Start
    I inside third loop: 0
    I after incr: 1
    I inside third loop: 1
    I after incr: 2
    I inside third loop: 2
    I after incr: 3
    I inside third loop: 3
    I after incr: 4
    I inside third loop: 4
    I after incr: 5
    I inside third loop: 5
    I after incr: 6
    I inside third loop: 6
    I after incr: 7
    I inside third loop: 7
    I after incr: 8
    I inside third loop: 8
    I after incr: 9
    I inside third loop: 9
    I after incr: 10
    ---4---
    1
    ---5---
    2

if 和 else的用法

  • expect中的判断语句:
if { condition } {
         # do your things
    } elseif {
         # do your things
    } else {
         # do your things
    }

expect中没有小括号(),所有的if/else, while, for的条件全部使用大括号{}, 并且{ 与左边要有空格,否则会报错。另,else 不能单独占一行,否则会报错。

  • 字符串比较
if { "$node" == "apple" } {
         puts "apple"
    } elseif { "$node" == "other" } {
         puts "invalid name"
         exit 70
    } else {
         puts "asd"
    }

对比string,使用==表示相等, !=标示不相等。

  • switch 语句
switch $location {
        "apple" { puts "apple" }
        "banana" { puts "banana" }
        default {
            puts "other"
         }
    }

记得左大括号{ 的左边要有空格,否则会报错

  • 读取用户输入
    expect_user -re "(.*)\n"
    send_user "$expect_out(1, string)\n"

expect_user -re 表示正则表达式匹配用户按下回车前输入的所有字符
expect_out(1, string) 表示第一个匹配的内容,即回车前所有字符
expect_out(buffer) 所有的buffer内容

  • break && continue

如c中一样,expect一样可以使用break && continue, 并且功能相同。

注:只能用在循环中。

  • 定义交互命令
    # stick control + z in variable
    set ControlZ \032
    # stick control + c in variable
    set ControlC \x03
    # define string embedded ctrl-z && tab
    set oddword foo\032bar\tgorp
  • expect读取文件的例子
#!/usr/bin/expect
# http://www.waitig.com
#open a file
set fd [open "/home/xiabao/myfile.txt" r]
set number 0
# read each line
while { [gets $fd line] >= 0 } { incr number }
puts "Number of lines: $number"
close $fd

本文由【waitig】发表在等英博客
本文固定链接:linux expect的for和while循环以及if else 用法总结
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (10)分享 (0)