tcl/expect

上一篇 / 下一篇  2008-12-30 18:18:15 / 个人分类:TCL/EXPECT

set time_seconds [clock seconds]
set time_now [clock format $time_seconds -format {%y-%m-%d}]
#format与{之间有空格,要不出错
for {set i 1} {$i <= $length_smtp} {incr i} { #第二个{}注意是有效范围,不是中断范围

exec tcpreplay -i eth1 -r 10 -l 1 $smtp_arr($i) #老提示tcpreplay不是command,原因之一就是

tcpreplay没有装


spawn ssh 192.168.201.222
root@192.168.201.222's password:
error deleting ......................too long
    while executing
"file delete [glob -nocomplain *.SMTP]"
 
--------删除的文件长度也有限制。发现如果删除的文件长度不长,如果是一个的话,就可以删除。

解决方法,用如下命令:eval exec rm [glob -nocomplain *.SMTP]


有时注释掉的语句含有}这个的符合时,也引起问题。

set fileId [open /SMTP_result.txt a 100000]
        puts $fileId "the $i is OK"
        close $fileId
        after 1000

如果用参数“w”的话,那么写入文件的信息,只取最后一次输出的信息,以前没有。(好处是如果没有

SMTP_result.txt文件的话,可自动创建);如果改写成"a"参数,则写入的信息是累加的。(资料说:必

须SMTP_result.txt文件存在,试了下,如果不存在的话,也可自动创建。)


有时想把返回的数据,放到一个list里面,就会存在这样的问题,当设置一个空list后,用glob把返回的

数据lappend放到list里面后,
用lindex返回第一个元素,发现,把所有元素都返回了,看来是当做一个整体了。这个时候,就要用到eval。
cd path目录

eval lappend  list [glob *.SMTP]
lindex $list 0

其实index最大值,可通过wc -l返回的行数-1来表示。

 

不是调试信息:
如果一个变量的值,是几个变量的取值的组合,可用如下来表示:
set a "xyz[set b "abc"][set c "def"]
//return xyzabcdef


求表达式的值,用expr命令。语法 expr arg?arg?
例如:
set j [expr 123+90+80]
//return 293

改变变量的取值用:incr和append命令。

连接两个list的命令:concat
expect1.59> set a {1 2 3 4 5 6 7 8 9 10}
1 2 3 4 5 6 7 8 9 10
expect1.60> set b {11 12 13 14 15 16 17 18 19 20}
11 12 13 14 15 16 17 18 19 20
expect1.61> concat $a $b
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
expect1.62> lindex $a 0
1
expect1.63> lindex $a 1
2


把一个列表的值赋给一个空列表:
expect1.60> set b {11 12 13 14 15 16 17 18 19 20}
11 12 13 14 15 16 17 18 19 20
expect1.64> set a {}
expect1.78> eval "lappend a $b"
11 12 13 14 15 16 17 18 19 20
expect1.79> lindex $a 0
11

说明:如果在赋值时,不用eval命令,则赋值的结果当做一个值对待。如果
是这样lappend a $b
结果为:
{11 12 13 14 15 16 17 18 19 20}
用lindex $a 0可看出是当做一个整体。
expect1.66> lindex $a 0
11 12 13 14 15 16 17 18 19 20

还有,如果用了eval,但是不是用双引号,用的是大括号{}
,结果也是当做一个整体。用lindex $a 0返回的也是11 12 13 14 15 16 17 18 19 20


concat 结果赋值:
expect1.95> set a {}
expect1.96> set d [concat $a $b]
11 12 13 14 15 16 17 18 19 20
expect1.97> set d "[concat $a $b]"
11 12 13 14 15 16 17 18 19 20
expect1.98> set d
11 12 13 14 15 16 17 18 19 20

看到用[]扩住,如果用""的话,结果就是concat  11 12 13 14 15 16 17 18 19 20,不识别concat命令
的,不过双引号里面有[]扩住,还是正确的。


当给某个列表增加数值时,可用linsert命令。中间的是索引,后面是添加的元素,添加在所指索引的前

面。例如:
expect1.104> linsert {1 3 {2 2 } 6 7 8 9 } 1 {12 30 2}
1 {12 30 2} 3 {2 2 } 6 7 8 9

 

当想把某个列表中的某些元素删除,可用lreplace命令。(删除索引所指的范围元素)。例如:

expect1.105> lreplace {1 3 6 7 8 9 10 11 12 13 } 2 3 0 9 0
1 3 0 9 0 8 9 10 11 12 13


当想返回列表某些值时,用lrange命令。返回的值,用此命令所指的索引决定。例如:
expect1.107> lrange {1 2 3 4 5 6 7 8 9 10} 3 end
4 5 6 7 8 9 10

当想把值添加到另一个变量里面,则用lappend命令。例如:
expect1.108> lappend a 1 2 3
1 2 3
expect1.109> set a
1 2 3


TAG:

 

评分:0

我来说两句

日历

« 2024-05-13  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 2725
  • 日志数: 4
  • 建立时间: 2008-01-14
  • 更新时间: 2008-12-30

RSS订阅

Open Toolbar