没有合适的资源?快使用搜索试试~ 我知道了~
首页tcl 基础教程tcl 基础教程
tcl 基础教程tcl 基础教程
需积分: 9 66 浏览量
更新于2023-06-01
评论
收藏 352KB DOC 举报
Tcl(Tool Command Language)是一种类似于命令行的语言,在很多领域都有广泛的应用,我最初用Tcl来做自动测试的工具,据我所知,象CISCO,LUCENT等这样的公司都在广泛应用Tcl作为自动测试的工具,因为Tcl可以方便的把各种程序粘合在一起,对局部的修改又不用编译,通过把测试序列写成脚本,可以方便的完成各种测试.
资源详情
资源评论
资源推荐

是一种类似于命令行的语言在很多领域都有广泛的应用我
最初用 来做自动测试的工具据我所知象 等这样的公司都在广泛应用
作为自动测试的工具因为 可以方便的把各种程序粘合在一起对局部的修改又不用编译通
过把测试序列写成脚本可以方便的完成各种测试象 这样的网络分析仪中就用
开发了一套复杂的协议分析软件
语言也是一种功能强大的脚本语言是一种完全的面向对象语言 的内核感觉非
常先进用它来编写程序却非常简单一个新手只要花一天时间看看语法就可以开始编写
代码 采用了预编译技术使这种解释性语言的速度感觉非常快它的语句对齐方
式使 代码天生就看起来很整齐容易看懂
目前见到的 和 的开发环境并不是很多还没有象 ! 这样的成熟的商业开发工具目
前功能最强大的应该是 "# 公司开发的 $但速度感觉比较慢我从 %&&& 年开
始研究 和 的嵌入扩展调试等技术逐渐完善我的集成开发环境目前已经基本可以
使用我的目标是使这个开发环境成为一个脚本语言的开发调试和应用开发平台因为这个开发
环境本身提供了很多的语言扩展通过这些扩展命令可以方便的构建一个应用程序只要加载一
个工程就可以成为一个全新的应用程序例如构建一个 " 系统等等我的演示程序将演示
'!数据库应用等演示工程
Tcl 教程
TCL 语法 > 脚本、命令和单词符号
一个 脚本可以包含一个或多个命令。命令之间必须用换行符或分号隔开,下面的两个脚本
都是合法的:
(
)%
或
(;)%
的每一个命令包含一个或几个单词,第一个单词代表命令名,另外的单词则是这个命令的
参数,单词之间必须用空格或 " 键隔开。
解释器对一个命令的求值过程分为两部分:分析和执行。在分析阶段,解释器运用规
则把命令分成一个个独立的单词,同时进行必要的置换); 在执行阶段,解
释器会把第一个单词当作命令名,并查看这个命令是否有定义,如果有定义就激活这个命令对
应的 *++过程,并把所有的单词作为参数传递给该命令过程,让命令过程进行处理。
TCL 语法 > 置换(substitution)
1

注:在下面的所有章节的例子中,,%,为 的命令提示符,输入命令回车后, 会在接着
的一行输出命令执行结果。,**,后面是我自己加上的说明,不是例子的一部分。
解释器在分析命令时,把所有的命令参数都当作字符串看待,例如:
-.(&**定义变量 .并把 . 的值赋为 (&
(&
-.+(&&** 的值是 .+(&&,而不是我们期望的 ((&
.+(&&
上例的第二个命令中,. 被看作字符串 .+(&& 的一部分,如果我们想使用 . 的值,(&,,就必
须告诉 解释器:我们在这里期望的是变量 . 的值,而非字符,.,。怎么告诉 解释器呢,
这就要用到 语言中提供的置换功能。
提供三种形式的置换:变量置换、命令置换和反斜杠置换。每种置换都会导致一个或多个
单词本身被其他的值所代替。置换可以发生在包括命令名在内的每一个单词中,而且置换可以
嵌套。
■变量置换(variable subtitution)
变量置换由一个$符号标记,变量置换会导致变量的值插入一个单词中。例如:
-/.+(&&** 的值是 (&+(&&,这里 . 被置换成它的值 (&
(&+(&&
这时, 的值还不是我们想要的值 ((&,而是 (&+(&&,因为 解释器把 (&+(&& 看成是
一个字符串而不是表达式, 要想得到值 ((&,还必须用命令置换,使得 会把 (&+(&&
看成一个表达式并求值。
■命令置换(command substitution)
命令置换是由01括起来的 命令及其参数,命令置换会导致某一个命令的所有或部分单词被
另一个命令的结果所代替。例如:
-0.2/.+(&&1
((&
的值是 ((&,这里当 解释器遇到字符,0,时,它就会把随后的 .2 作为一个命令名,从
而激活与 .2 对应的 *++过程,并把,.2,和变量置换后得到的,(&+((&,传递给该命令
过程进行处理。
如果在上例中我们去掉01,那么 会报错。因为在正常情况下, 解释器只把命令行中的
第一个单词作为看作命令,其他的单词都作为普通字符串处理,看作是命令的参数。
2

注意,01中必须是一个合法的 脚本,长度不限。01中脚本的值为最后一个命令的返回值,
例如:
-0.2/.+(&&3)4&&1** 的值为 4&&,因为 )4&& 的返回值为 4&&
4&&
有了命令置换,实际上就表示命令之间是可以嵌套的,即一个命令的结果可以作为别的命令的
参数。
■反斜杠置换(backslash substitution)
语言中的反斜杠置换类似于 语言中反斜杠的用法,主要用于在单词符号中插入诸如换行
符、空格、0、/等被 解释器当作特殊符号对待的字符。例如:
252** 的值为 22。
如果没有,5,的话, 会报错,因为解释器会把这里最后两个单词之间的空格认为是分隔符,
于是发现 命令有多于两个参数,从而报错。加入了,5,后,空格不被当作分隔符,,2
2,被认为是一个单词6。又例如:
-55/444455"550%1
**这个命令的执行结果为:/4444
"0%1
这里的/不再被当作变量置换符。
支持以下的反斜杠置换7
8 9:2
5")&.;
5)82&.<
5='=&.
56&.
5&.
5)&.>
5#!)&.)
5##)
6 ,
5. ?.##)
)= ,
562"2
例如:
%5.@<**对应 5.
?**十六进制的 @< 正好是 ;%,对应 ?
% 5((&**对应 5
3

?**八进制的 ((& 正好是 ;%,对应 ?
%0.25**对应562,一个命令可以用56 转到下一行继续
%+41
A
■双引号和花括号
除了使用反斜杠外, 提供另外两种方法来使得解释器把分隔符和置换符等特殊字符当作普
通字符,而不作特殊处理,这就要使用双引号和花括号BC。
解释器对双引号中的各种分隔符将不作处理,但是对换行符 及$和01两种置换符会照常处
理。例如:
-.(&&
(&&
-D/.D
(&&
而在花括号中,所有特殊字符都将成为普通字符,失去其特殊意义, 解释器不会对其作特
殊处理。
-B*/.0.2(&+(&&1C
*/.0.2(&+(&&1
TCL
语言教程 > TCL 语法 > 注释
中的注释符是,#,,,#,和直到所在行结尾的所有字符都被 看作注释, 解释器对注
释将不作任何处理。不过,要注意的是,,#,必须出现在 解释器期望命令的第一个字符出
现的地方,才被当作注释。
例如:
-#
-(&&E
6E7 )D#F6!FD
-)(&(3E
(&(
第二行中,#,就不被当作注释符,因为它出现在命令的中间, 解释器把它和后面的字符当
作命令的参数处理,从而导致错误。而第四行的,#,就被作为注释,因为前一个命令已经用一
个分号结束, 解释器期望下一个命令接着出现。现在在这个位置出现,E,,随后的字符就被
当作注释了。
变量
TCL
语言教程 > 变量 > 简单变量
4

一个 的简单变量包含两个部分:名字和值。名字和值都可以是任意字符串。例如一个名为
“(4%4;GH7 D的变量在 中都是合法的。不过为了更好的使用置换),
变量名最好按 5++语言中标识符的命名规则命名。 解释器在分析一个变量置换时,只
把从$符号往后直到第一个不是字母、数字或下划线的字符之间的单词符号作为要被置换的变
量的名字。例如7
-%
%
(@
@
-)/(
%(
在最后一个命令行,我们希望把变量 ( 的值付给 ),但是 解释器在分析时只把/符号之
后直到第一个不是字母、数字或下划线的字符这里是,,之间的单词符号这里是,,当作要被
置换的变量的名字,所以 解释器把 置换成 %然后把字符串“%(I付给变量 )。这显然与
我们的初衷不同。
当然,如果变量名中有不是字母、数字或下划线的字符,又要用置换,可以用花括号把变量名
括起来。例如:
-)/B(C
@
中的 命令能生成一个变量、也能读取或改变一个变量的值。例如:
% B8=J8J=C
8=J8J=
如果变量 还没有定义,这个命令将生成 变量 ,并将其值置为 8=J8J=,若 已定义,就简
单的把 的值置为 8=J8J=。
%
8=J8J=
这个只有一个参数的 命令读取 的当前值 8=J8J=。
TCL
语言教程 > 变量 > 数组
数组是一些元素的集合。 的数组和普通计算机语言中的数组有很大的区别。在 中,不
能单独声明一个数组,数组只能和数组元素一起声明。数组中,数组元素的名字包含两部分:
数组名和数组中元素的名字, 中数组元素的名字(下标〕可以为任何字符串。例如:
(
%
5
剩余56页未读,继续阅读














安全验证
文档复制为VIP权益,开通VIP直接复制

评论0