视频软件App开发引领数字内容创作与分享的新时代
1405
2022-09-21
expect基础用法及示例
以下是一个可以使用的脚本 。在这种交互式的应用中,经常需要用到休眠函数,这样可以对输出的界面显示更加友好,而且也可能尽量多的减少 错误的出现
关于转义字符,网上存在一部分,本例中用到来-号需要转义,转义是用两个\来转义。
\ 需转义为 \\\
} 需转义为 \}
[ 需转义为 \[
$ 需转义为 \\\$
` 需转义为 \`
" 需转义为 \\\"
可以用log_user 0或1实现输出屏蔽和显示 log_file test.log #记录log。追加 |
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 -- # # 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 5while { $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 --
# a fileset fd [open "/home/xiabao/myfile.txt" r]set number 0# read each linewhile { [gets $fd line] >= 0 } { incr number }puts "Number of lines: $number"
close $fd
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~