《tcl脚本测试入门资料》由会员分享,可在线阅读,更多相关《tcl脚本测试入门资料(10页珍藏版)》请在金锄头文库上搜索。
1、tcl脚本测试入门Tcl 简介Tcl 是一种非常简单的编程语言,如果你以前曾经学过编程,那么你只要学习几个小时就可以编写出一些有趣的Tcl 程序。本文将对 Tcl 的功能做一个大概的介绍。一般来说,读完本文之后,你就可以开始独立的编写一些简单的Tcl 脚本了;不过,要想获得更全面的认识,我们建议你还是去参考几本目前已经出版的 Tcl 书籍。 基本语法 Tcl 脚本由一些被换行符或是分号分开的命令所组成。命令都有相同的基本格式, 如下面的例子所示: expr 20 + 10 该命令计算 20 加 10 的和,并返回结果 30。你可以把这个例子以及本文中的所有其它的例子键入到 tclsh 这样的
2、Tcl 应用程序中来验证它们;在一个命令结束后, tclsh 将打印出它的结果。 每个 Tcl 命令都含有一个或多个被空格分开的单词,在这个例子中有 4 个单词: expr,20,+, 和 10。第一个单词是一个命令名,其余的单词是这个命令 的参数。所有的 Tcl命令都含有一些单词,但不同的命令对他们的参数有不同的处理方式。expr 命令把它的所有参数看作是一个算术表达式,计算表达式的结 果,并以字符串的形式返回结果。在expr 命令中,单词之间的分隔不是很重要:同样的命令你可以写成这种形式:expr 20+10 不过,对大部分的命令来说,单词的结构是很重要的。每个单词都会用于不同的目的。所有
3、的 Tcl 命令都返回结果。 如果一个命令产生了没有意义的结果, 那么它将返回一个空字符串作为它的结果。变量Tcl 允许你在变量中保存数值,并且可以在后续的命令中使用这些数值。set 命令用于对变量进行读写操作。比如,下面的命令对变量 x 赋值为 32。set x 32这个命令返回变量的新值。你可以让 set 只带一个参数来读出变量的数值:set x 你不需要在 Tcl 中声明变量:变量在第一次 set 的时候被自动创建。 Tcl 变量没有类型:任何值可以赋给任何变量。要想在一个命令中使用变量的值,可以采用变量替代, 如下例所示:expr $x*3当一个字符 $出现在一个命令中的时候,Tcl
4、把跟在它后面的字母和数字看作是一个变量名并且将其替换成变量的值。在这个例子中,expr 命令接收到的实际参数将是 32*3(假设变量 x 在前面的例子中被set 过)。你可以在任何命令的任何单词中使用变量替代,甚至对一个单词多次使用:set cmd expr set x 11 $cmd $x*$x命令替代你也可以在一个命令的参数中使用另一个命令的结果。 这被称之为命令替代:set a 44 set b expr $a*4当中括号出现在一个命令中的时候, Tcl 把中括号之间的所有语句看作是一组Tcl 命令。Tcl 对这组命令进行解释,并用结果替代中括号之间的文字。上面的例子中,第二个 set
5、命令的第二个参数将为 176。双引号和大括号双引号允许你指定包含空格的单词。我们看下面的这个例子:set x 24 set y 18 set z $x + $yis expr $x + $y在这三个命令都被解释后, 变量 z 的值将是 24+18 is 42 。双引号之间的所有语句作为一个单词传给set 命令。此处需要注意几点( a)引号之间的命令和变量替代仍起作用, (b)引号自身不会被传给命令。如果没有引号的话, set 命令会得到 6 个参数,这将引起错误。花括号对单词提供另外一种组合信息的方式。它与双引号的不同之处在于:花括号内的替代不起作用: set z $x + $y is exp
6、r $x +$y这个命令把变量 z 赋值为 $x+ $y is expr $x +$y 。 控制结构 Tcl 提供一整套控制结构包括条件,循环和过程。 Tcl 的控制结构只是一些将 Tcl 脚本作为参数的命令。下面的示例创建了一个叫做 power 的 Tcl 的过程,实现对一个数求它的 n 次方: proc powe r base p set result 1 while $p 0 set result expr $result * $base set p expr $p- 1 return $result 这个脚本由一个简单的命令proc 所组成,这个 proc 命令有 3 个参数:过程名,
7、参数名列表和过程体。过程体是一个 Tcl 脚本。需要注意的是,第一行末尾 的花括号和最后一行花括号之间的语句都被逐字逐句的作为一个参数传给 proc 。proc 命令创建了一个新的叫做 power 的具有两个参数的 Tcl 命令。你 可以这样来调用 power: power 2 6 power 1.15 5 当 power 被调用的时候,过程体就被解释了。当过程体执行的时候,它可以变量的形式进入它的参数中:base 获得第一个参数, p 获得第二个参数。power 过程体中包含 3 个 Tcl 命令: set,while和 return 。while 命令完成了这个过程中的大部分工作。它有两个
8、参数,一个表达式( $ p0 )和一个 Tcl 脚本写的主体。while 命令使用与 C 语言相似的规则来解释它的表达式参数。如果结果是真(非零),那么它将把函数体作为脚本 来执行。他不断的重复这个过程,直到最后表达式的值变为假(零)。在这个例子中, while 命令的函数体将 result 的值与 base 相乘,然后减少 p 的 值。当 p 的值减到零的时候,结果就包含了需要的 base 的 n 次方值。 return 命令的作用是退出过程,同时将变量 result 的值作为过程的结果返回。 命令是如何运作的? 正如你所见到的, Tcl 中所有有趣的功能都是靠命令来描述的。声明是命令,表达
9、式由可执行命令来解释,控制结构是命令,过程也是命令。 Tcl 命令由 3 种方式来创建。一组命令由 Tcl 解释器自身来提供。 这些命令称之为内建命令, 他们包括到现在为止你已经看到的命令和更多其他的命令(见下面)。内建命令出现在所有的Tcl应用程序中。第二组命令使用 Tcl 扩展机制来创建。 Tcl 提供许多 API 接口,允许你用 C 或 C+编写一个命令过程来创建一个新的命令。然后你可以通过Tcl解释器来通知 Tcl 过程实现的命令名,来注册命令过程。以后只要那个特定的名称被当作 Tcl 命令来使用, Tcl 就会调用你的命令过程来执行这个命令。其实内建命令 也是使用同样的扩展机制来执行
10、的,只不过它们的命令过程是 Tcl 库中的一部分。 当 Tcl 用于嵌入到一个应用程序中的时候, 应用程序使用扩展机制把它的主要功能和 Tcl 结合起来,这样一来那些可用的 Tcl 命令就因程序的不同而不同。还 有大量的扩展包可以和 Tcl 应用程序组合起来使用。 Tk 是最著名的扩展之一,它提供了许多强大的创建图形用户界面的工具。 而其他的扩展则提供了面向对象的 编程,数据库访问,更多的图形功能,及其他的一些特性。用 Tcl 来创建完整的应用程序的优势之一是它可以很方便的进行扩展, 从而可以组合进新的功能或与其 它的资源进行通信。第三组命令是一些由 proc 命令创建的过程。比如上面创建的
11、power 命令。通常,扩展用于较低层的功能,用 C语言实现比较方便;而过程用于较高层的功能, 用 Tcl 实现比较方便。 其它的功能 T cl 除了前面的例子中所使用的命令外,还有许多其它的命令,这里举例给出一些内建的 Tcl 命令所具有的功能: 更多的控制结构,如 if,for,foreach 和 switch 字符串操作,包括一个强大的规则表达式匹配工具。不定长字符串可以像数字一样被传递和操作 I/O 输入输出包括磁盘,网络通信通道,和类似串口的设备中的文件。 Tcl 为在 Internet 上进行通信提供了非常方便的工具文件管理: Tcl 提供许多命令来操作文件名,读写文件属性,复制文
12、件,删除文件,创建目录,等等分支过程的实现:你可以使用exec 命令来运行其他程序,并且可以在它们的运行过程中和它们进行通信 Lists Tcl 使创建数值的集合变得很容易,并且可以用许多方式来对它们进行操作数组 你可以创建有成对的名称数值组成的结构化数值,同时可以使用不定长字符串来定义这些名称和数值可以对时间和日期进行操作 Events 允许等待一定的事件发生后再触发 Tcl 脚本,比如一段时间的延迟或是网络通信中输入的数据变为有效Expect简介一个叫做fsck 的 Unix文件系统检查程序,可以从 Shell里面用 -y 或者 -n 选项来执行。在手册 1 里面, -y 选项的定义是象这
13、样的。“对于 fsck 的所有问题都假定一个“yes”响应;在这样使用的时候,必须特别的小心,因为它实际上允许程序无条件的继续运行,即使是遇到了一些非常严重的错误”相比之下, -n 选项就安全的多,但它实际上几乎一点用都没有。这种接口非常的糟糕,但是却有许多的程序都是这种风格。 文件传输程序 ftp 有一个选项可以禁止交互式的提问,以便能从一个脚本里面运行。但一旦发生了错误,它没有提供的处理措施。Expect是一个控制交互式程序的工具。他解决了fsck 的问题,用非交互的方式实现了所有交互式的功能。Expect不是特别为fsck 设计的,它也能进行类似ftp 的出错处理。fsck 和 ftp
14、的问题向我们展示了象sh,csh和别的一些shell提供的用户接口的局限性。Shell没有提供从一个程序读和象一个程序写的功能。这意味着shell可以运行fsck 但只能以牺牲一部分fsck 的灵活性做代价。有一些程序根本就不能被执行。比如说,如果没有一个用户接口交互式的提供输入,就没法运行下去。其他还有象Telnet,crypt,su,rlogin等程序无法在shell脚本里面自动执行。还有很多其他的应用程序在设计是也是要求用户输入的。Expect被设计成专门针和交互式程序的交互。一个 Expect程序员可以写一个脚本来描述程序和用户的对话。接着 Expect程序可以非交互的运行“交互式 ”的程序。写交互式程序的脚本和写非交互式程序的脚本一样简单。 Expect 还可以用于对对话的一部分进行自动化,因为程序的控制可以在键盘和脚本之间进行切换。Tcl 安装配置1 安装 ActiveTcl8.4 (包括 Expect扩展)下载地址:http:/