expect的基础用法

本篇内容介绍了“expect的基础用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

本篇内容介绍了“expect的基础用法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

固始网站建设公司成都创新互联公司,固始网站设计制作,有大型网站制作公司丰富经验。已为固始近千家提供企业网站建设服务。企业网站搭建\外贸星空体育app最新版本(2024已更新)建设要多少钱,请找那个售后服务好的固始做网站的公司定做!

以下是一个可以使用的脚本 。在这种交互式的应用中,经常需要用到休眠函数,这样可以对输出的界面显示更加友好,而且也可能尽量多的减少 错误的出现

关于转义字符,网上存在一部分,本例中用到来-号需要转义,转义是用两个\来转义。

\ 需转义为 \\\

} 需转义为 \}

[ 需转义为 \[

$ 需转义为 \\\$

` 需转义为 \`

" 需转义为 \\\"

expect遵循的是tcl语法。这是一种标准。有时间可以参考学习。

#!/usr/bin/expect -f

set timeout -1#永不超时

set deviceType [lindex $argv 0]

set writesize  [lindex $argv 1]  #设置输入变量

set i 0  #设置变量

log_file test.log   #记录log。

#log_file -noappend rtime_md_test_${stationNum}_[clock format $currenttime -format %m%d%H].log

spawn   /home/redhat/Downloads/Mitsubishi/Latest/Driver/Sample/md_test

expect {

"menu No"     {exp_send "1\r" ;exp_continue} 

"ChanelNo"    {exp_send "151\r"}

}

expect {

"mode = "     {exp_send "\\-1\r"}  #这里比较坑爹,害我查了很久很久,最后试出来的

}

while {$i<10} {                 #循环语法使用

#写入数据部分

expect {

"menu No" {exp_send "11\r"}

}

#exec sleep 1

expect {

"StationNo" {exp_send "255\r"}

}

exec sleep 0.01         #休眠时间可以是小数 

expect {

"NetworkNo" {exp_send "1\r"}

}

exec sleep 0.01

expect {

"DeviceType" {exp_send "$deviceType\r"}

}

exec sleep 0.01

expect "DeviceNo.(or ChannelNo.)" {exp_send "0\r"}

exec sleep 0.01

expect "WriteSize"  {exp_send "$writesize\r"}

exec sleep 0.01

expect "WriteDataType" {exp_send "2\r"}

#读取数据部分

exec sleep 0.1

expect "menu No."  {exp_send "12\r"}

exec sleep 0.01

expect {

"StationNo" {exp_send "255\r"}

}

exec sleep 0.01

expect {

"NetworkNo" {exp_send "1\r"}

}

exec sleep 0.01

expect {

"DeviceType" {exp_send "$deviceType\r"}

}

exec sleep 0.01

expect "DeviceNo.(or ChannelNo.)" {exp_send "0\r"}

exec sleep 0.01

expect "ReadSize"  {exp_send "$writesize\r"}

incr i

}

expect "menu No" {exp_send "0\r"}

expect eof

expect语法基础: while、for 循环、if 语句的用法示例
==两种for循环的写法
for {set i 0} {$i<=10} {incr i} {#i默认增量是1,即等价incr i 1。注意这个反括号一定要写在这行行末:args: should be "for start test next command"
............

.............}
Q:能不能改为i为我指定的几个数就好。比如我指定i为 3 5 6 7 9这几个数? 谢谢。
foreach  i { 1 3 5 7 9 } {
    puts "$i"
}注:expect 用的是tcl语法,不是shell语法,或者用switch
==for/while循环写法
    [15:33:05-Bob@hzling08:~/test/tcl]-(1109)No.108->$ cat tclfor.test
    #!/usr/bin/expect --
    #                  http://bbs.chinaunix.net/thread-2301733-1-1.html
    # 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"

运行:

    [15:33:09-Bob@hzling08:~/test/tcl]-(1110)No.109->$ ./tclfor.test

 ===if的写法

    if { $sync_flag == "true" } {

            puts "Sync start at [clock format [clock seconds]]"
            catch {eval exec ${TOOL_HOME}/bin/${sync_cmd} ${sync_parm} } output
            puts $output
            if { $output eq "SYNC complete!" } {
                    puts "SYNC complete!"
            } else {
                    puts "SYNC error!"
                    exit 1

            }
            puts "Sync end at [clock format [clock seconds]]"
    }
===ping的例子
set p_loop 5
while { $p_loop } {
    send_user "\nStpe 1 Ping to server..."
    set timeout 60

    send "ping 10.1.1.1 -c5\r"

    expect {
        "64 bytes" {
            send_user "ok"
            set p_loop 0
        }
     
        timeout {
            set p_loop [expr $p_loop-1]  #expect里的加减法
            send_user "failed.\n"
        }
        eof {
            send_user "ping 10.1.1.1 -c5 FAIL\n"
            exit 1
        }
}
===expect读取文件的例子

#!/usr/bin/expect --

#            http://scmbob.org/counting_file_lines.html
#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

本文题目:expect的基础用法
本文路径:/article38/iopp.html

成都网站建设公司_创新互联,为您提供手机网站建设网站内链标签优化自适应网站响应式网站服务器托管

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

营销型网站建设