(来自:《NS2仿真实验-多媒体和无线网络通信》)
1. 变量(Variable)和变量替换(Variable Substitution)
tcl变量是在第一次使用set的指令来指派变量的值时所产生的。可以使用unset来取消这个变量。当取用或者改变变量值时,只要在变量名称前加上一个“$”,就可以取用或改变变量内的值。指令eval用于执行一个tcl script。
2. 表达式
tcl中表达式通常使用“expr”指令去判断表达式的真假或去求表达式的值。
1 set value [expr 1>=2]
3. 指令替换
使用[]来完成指令的替换,即把“原tcl script执行结果”取代“原 tcl script”。
1 set age 23 2 puts “My age is $age”
4. 流程控制
控制指令包括,if-else, switch, while, for, foreach等。
if {condiftion} {body} elseif{condition} {body} else {body}
1 set value 23 2 if {$value < 20} {puts “$age is less than 20”} 3 elseif {$value == 20} {puts “$age is 20” } 4 else {puts “$age is more than 20” }
switch expression { case1{} case2 {} default{}}
1 set var 4 2 switch var{ 3 2 {puts “$var is 2”} 4 4 {puts “$var is 4”} 5 default {puts “$var”} 6 }
while {condition} {}
1 set i 0 2 while {$i < 5} { 3 puts “$i” 4 incr i 1 5 }
for {initialization} {condition} {change variable} {body}
1 for {set i 1} {$i < 5} {incr i 1} { 2 puts “$i” 3 }
foreach variable {variables} {body}
1 foreach i {a e i o u} { 2 puts “$i is vowel” 3 }
5. 程序
定义程序的基本语法为 proc name params body,即proc name {paramets} {body}。其中,name是函数名称,params是参数列表,body是程序主体。
1 proc sum {a b} { 2 return [expr $a + $b] 3 } 4 5 set num1 15 6 set num2 16 7 set sum [sum $num1 $num2] ;#有参数的调用方法 8 puts “The sum is $sum”
在函数中使用外部变量,即全局变量,需要使用global来声明。
1 set num 15 2 3 proc fun {} { 4 set tmp 14 5 puts “The local variable is $tmp” 6 global num 7 puts “The global variable is $num” 8 } 9 10 fun ;#无参数情况下的函数的调用
6. 数组
使用set array_name(index) value的格式来声明数组,并且index可以使用数字或字符串。
1 set num_array(0) “Zero” 2 set num_array(1) “One” 3 for {set i 0} {$i < 2} {incr i 1} { 4 put &num_array($i) 5 }
1 set person_info(name) “John” 2 set person_info(age) “28” 3 4 # foreach thing {name age} { 5 foreach thing [array names person_info] { 6 puts “$thing == $person_info($thing)” 7 }
这里需要注意,在数组名称与“(”之间不能有空格。