1. regsub 模式匹配替换命令
语法: regsub ?switches? pattern string subspec varname
注: ?..?之间的选项表示可选的.
pattern: 表示要匹配的模式.
string:表示要进行匹配的源字符串.
subspec: 表示要将pattern进行替换的字符串.
varname: 表示匹配的结果存放的变量.
例子:
set Str 192.168.0.1
regexp -all "//." $Str "_" Str
这里将IP地址中的.号替换成了_线,并将匹配的结果保存到变量Str中.
2. global 全局变量引用命令
当你在全局的范围中定义了一个命令, 而你在另外一个函数中要引用到这个变量时,就要在函数体内用global命令进行声明,
例如:
set ipaddr 192.168.1.5
proc Recvpacket {args} {
global ipaddr
}
3. 数组
TCL支持数组的数据结构.
1> 一维数组定义
set net(ipaddr) 192.168.1.1
puts $net(ipaddr)
2> 二维数组的定义
set net(private,pubip) 137.117.18.129
puts $net(private,pubip)
4. 函数(过程)定义
语法: proc 函数名 {参数名} { }
注意: 这里的参数名可以不填,这样可以进行参数的过程调用;但是{}号不参省.
proc Add {a b} {
}
proc $a $b
5. 逻辑表达式
与:&&
或: ||
例子: if { $a==1 && $b==2 } { }
6. 字符串操作
string length
例子: set strLen [string length $myname]
append : 字符串的串接
set name [append $xin $ming]
另外一种字符串串接的方法:
set st1 Hello
set st2 "${st1} World/a"
==>str2="Hello World"
7. expect
expect 属于一种交互性的语言:即根据当前的输出来决定输入.
expect {
"*User name:" { input username }
timeout { timeout event }
}
这有点儿像C语言中的Case语句.timeout表示多少时间内没有匹配到分支中的任何一个字符串,则执行timeout这个分支 的语句块.
8. 循环语句
语法: foreach loopVar valueList commandBody
这个语句每次从valueList中取出一下数值赋于loopVar, 然后执行后面的命令块.
例子:
foreach name $EnglishClass {
puts $name
}
9. if/else
语法:
if {condition is true} {
}else {
}
或
if {condition is true} {
}elseif{
}
10: 分支语句switch
语法:
switch flags value pat1 body1 pat2 body2 ...
flags可以是-exact -glob -regexp --
-exact : value必须完全匹配下面其中的一个正则表达式.
-regexp : Use regular expression pattern matching
--: no flags.
例子:
switch -exact -- $value {
foo { doFoo; incr count(foo) }
bar { doBar; return $count(foo)}
default { incr count(other) }
}