logo资料库

华为TCL培训教程 全.pdf

第1页 / 共70页
第2页 / 共70页
第3页 / 共70页
第4页 / 共70页
第5页 / 共70页
第6页 / 共70页
第7页 / 共70页
第8页 / 共70页
资料共70页,剩余部分请下载后查看
TCL培训教程深圳市华为技术有限公司
TCL培训教程6/21/2014第2页,共70页目录1引言................................................................................................................................................................62语法................................................................................................................................................................72.1脚本、命令和单词符号.................................................................................................................72.2置换(substitution)...........................................................................................................................72.2.1变量置换(variablesubtitution)...............................................................................................82.2.2命令置换(commandsubstitution)..........................................................................................82.2.3反斜杠置换(backslashsubstitution).......................................................................................92.2.4双引号和花括号...................................................................................................................102.3注释...............................................................................................................................................103变量..............................................................................................................................................................113.1简单变量.......................................................................................................................................113.2数组...............................................................................................................................................123.3相关命令.......................................................................................................................................123.3.1set..........................................................................................................................................123.3.2unset......................................................................................................................................123.3.3append和incr.........................................................................................................................134表达式.........................................................................................................................................................134.1操作数...........................................................................................................................................134.2运算符和优先级...........................................................................................................................141.1数学函数.......................................................................................................................................142List..............................................................................................................................................................162.1list命令..........................................................................................................................................162.2concat命令:...................................................................................................................................162.3lindex命令.....................................................................................................................................162.4llength命令....................................................................................................................................162.5linsert命令.....................................................................................................................................162.6lreplace命令:.................................................................................................................................172.7lrange命令:...................................................................................................................................17
TCL培训教程6/21/2014第3页,共70页2.8lappend命令:.................................................................................................................................172.9lsearch命令:.................................................................................................................................172.10lsort命令:.......................................................................................................................................182.11split命令:.......................................................................................................................................182.12join命令.........................................................................................................................................193控制流.........................................................................................................................................................193.1if命令.............................................................................................................................................193.2循环命令:while、for、foreach...............................................................................................193.2.1while命令..............................................................................................................................193.2.2for命令..................................................................................................................................203.2.3foreach命令...........................................................................................................................203.2.4break和continue命令............................................................................................................213.2.5switch命令...........................................................................................................................213.3eval命令........................................................................................................................................223.4source命令....................................................................................................................................224过程(procedure)...........................................................................................................................................224.1过程定义和返回值.......................................................................................................................224.2局部变量和全局变量...................................................................................................................234.3缺省参数和可变个数参数...........................................................................................................234.4引用:upvar..................................................................................................................................245字符串操作................................................................................................................................................265.1format命令....................................................................................................................................265.2scan命令........................................................................................................................................265.3regexp命令....................................................................................................................................271.1regsub命令....................................................................................................................................281.2string命令......................................................................................................................................291.2.1stringcompare?-nocase??-lengthint?string1string2....................................................291.2.2stringequal?-nocase??-lengthint?string1string2......................................................291.2.3stringfirststring1string2?startindex?..............................................................................291.2.4stringindexstringcharIndex.............................................................................................301.2.5stringlaststring1string2?startindex?..........................................................................301.2.6stringlengthstring.........................................................................................................30
TCL培训教程6/21/2014第4页,共70页1.2.7stringmatch?-nocase?patternstring.................................................................................301.2.8stringrangestringfirstlast..........................................................................................311.2.9stringrepeatstringcount..............................................................................................311.2.10stringreplacestringfirstlast?newstring?..............................................................311.2.11stringtolowerstring?first??last?................................................................................311.2.12stringtoupperstring?first??last?..............................................................................311.2.13stringtrimstring?chars?.............................................................................................311.2.14stringtrimleftstring?chars?.............................................................................................321.2.15stringtrimrightstring?chars?.....................................................................................322文件访问.....................................................................................................................................................322.1文件名...........................................................................................................................................322.2基本文件输入输出命令...............................................................................................................322.3随机文件访问...............................................................................................................................342.4当前工作目录...............................................................................................................................342.5文件操作和获取文件信息...........................................................................................................353错误和异常................................................................................................................................................393.1错误...............................................................................................................................................403.2从TCL脚本中产生错误...............................................................................................................413.3使用catch捕获错误......................................................................................................................413.4其他异常.......................................................................................................................................421深入TCL.......................................................................................................................................................441.1查询数组中的元素.......................................................................................................................441.2info命令........................................................................................................................................461.2.1变量信息...............................................................................................................................461.1.1过程信息...............................................................................................................................481.1.2命令信息...............................................................................................................................491.1.3TCL的版本和库...................................................................................................................491.1.4命令的执行时间...................................................................................................................491.1.5跟踪变量...............................................................................................................................501.1.6命令的重命名和删除...........................................................................................................531.1.7unknown命令........................................................................................................................531.1.8自动加载...............................................................................................................................54
TCL培训教程6/21/2014第5页,共70页2历史记录.....................................................................................................................................................553TCL和C\C++................................................................................................................................................583.1生成自己的TCLSH......................................................................................................................583.2扩展自己的命令:方法(一)........................................................................................................593.2.1编写扩展命令对应的C/C++过程.......................................................................................593.2.2注册命令...............................................................................................................................613.2.3命令返回值和命令对应的过程的返回值..........................................................................623.3扩展自己的命令:方法(二)........................................................................................................643.3.1Tcl_Obj结构.........................................................................................................................643.3.2编写扩展命令对应的C/C++过程.......................................................................................663.3.3注册命令...............................................................................................................................673.4利用clientData参数和deleteProc参数.........................................................................................673.5在C/C++应用程序中嵌入TCL....................................................................................................714总结..............................................................................................................................................................72
TCL培训教程6/21/2014第6页,共70页TCL培训教程(全)关键词:TCL摘要:本文是TCL教材的第三稿,前两稿分别是《TCL的使用》和《TCL培训教程》。这一稿加入了不少内容,是北研TCL兴趣小组共同努力的结果。本文详细介绍了TCL的各个方面,特别对利用C\C++语言扩展TCL命令作了详细论述。本文附有大量实例。缩略语清单:TCLToolCommandLanguage一种脚本语言参考资料清单:请在表格中罗列本文档所引用的有关参考文献名称、作者、标题、编号、发布日期和出版单位等基本信息。参考资料清单名称作者编号发布日期查阅地点或渠道出版单位(若不为本公司发布的文献,请填写此列)TclandTkToolKitJohnK.Ousterhout981-235-951-61999自己的图书AddisonWesleyPublishingCommpanyTCL的使用陈旭盛自写文档TCL培训教程陈旭盛自写文档1引言TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage)。它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。由于TCL的解释器是用一个C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作一个C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,可以很容易就在C\C++应用程序中嵌入TCL,而且每个应用程序都可以根据自己的需要对TCL语言进行扩展。我们可以针对某一特定应用领域对TCL语言的核心命令集进行扩展,加入适合于自己的应用领域的扩展命令,如果需要,甚至可以加入新的控制结构,TCL解释器将把扩展命令和扩展控制结构与固有命令和固有控制结构同等看待。扩展后的TCL语言将可以继承TCL核心部分的所有功能,包括核心命令、控制结构、数据类型、对过程的支持等。根据需要,我们甚至可以屏蔽掉TCL的某些固有命令和固有控制结构。通过对
TCL培训教程6/21/2014第7页,共70页TCL的扩展、继承或屏蔽,用户用不着象平时定义一种计算机语言那样对词法、语法、语义、语用等各方面加以定义,就可以方便的为自己的应用领域提供一种功能完备的脚本语言。TCL良好的可扩展性使得它能很好地适应产品测试的需要,测试任务常常会由于设计和需求的改变而迅速改变,往往让测试人员疲于应付。利用TCL的可扩展性,测试人员就可以迅速继承多种新技术,并针对产品新特点迅速推出扩展TCL命令集,以用于产品的测试中,可以较容易跟上设计需求的变化。另外,因为TCL是一种比C\C++语言有着更高抽象层次的语言,使用TCL可以在一种更高的层次上编写程序,它屏蔽掉了编写C\C++程序时必须涉及到的一些较为烦琐的细节,可以大大地提高开发测试例的速度。而且,使用TCL语言写的测试例脚本,即使作了修改,也用不着重新编译就可以调用TCL解释器直接执行。可以省却不少时间。TCL目前已成为自动测试中事实上的标准。2语法简单的讲,TCL语言的语法实际上是一些TCL解释器怎样对TCL命令进行分析的规则的集合。2.1脚本、命令和单词符号一个TCL脚本可以包含一个或多个命令。命令之间必须用换行符或分号隔开,下面的两个脚本都是合法的:seta1setb2或seta1;setb2TCL的每一个命令包含一个或几个单词,第一个单词代表命令名,另外的单词则是这个命令的参数,单词之间必须用空格或TAB键隔开。TCL解释器对一个命令的求值过程分为两部分:分析和执行。在分析阶段,TCL解释器运用规则把命令分成一个个独立的单词,同时进行必要的置换(substitution);在执行阶段,TCL解释器会把第一个单词当作命令名,并查看这个命令是否有定义,如果有定义就激活这个命令对应的C/C++过程,并把所有的单词作为参数传递给该命令过程,让命令过程进行处理。2.2置换(substitution)注:在下面的所有章节的例子中,'%'为TCL的命令提示符,输入命令回车后,TCL会在接着的一行输出命令执行结果。'//'后面是我自己加上的说明,不是例子的一部分。
TCL培训教程6/21/2014第8页,共70页TCL解释器在分析命令时,把所有的命令参数都当作字符串看待,例如:%setx10//定义变量x,并把x的值赋为1010%setyx+100//y的值是x+100,而不是我们期望的110x+100上例的第二个命令中,x被看作字符串x+100的一部分,如果我们想使用x的值'10',就必须告诉TCL解释器:我们在这里期望的是变量x的值,而非字符'x'。怎么告诉TCL解释器呢,这就要用到TCL语言中提供的置换功能。TCL提供三种形式的置换:变量置换、命令置换和反斜杠置换。每种置换都会导致一个或多个单词本身被其他的值所代替。置换可以发生在包括命令名在内的每一个单词中,而且置换可以嵌套。2.2.1变量置换(variablesubtitution)变量置换由一个$符号标记,变量置换会导致变量的值插入一个单词中。例如:%sety$x+100//y的值是10+100,这里x被置换成它的值1010+100这时,y的值还不是我们想要的值110,而是10+100,因为TCL解释器把10+100看成是一个字符串而不是表达式,y要想得到值110,还必须用命令置换,使得TCL会把10+100看成一个表达式并求值。2.2.2命令置换(commandsubstitution)命令置换是由[]括起来的TCL命令及其参数,命令置换会导致某一个命令的所有或部分单词被另一个命令的结果所代替。例如:%sety[expr$x+100]110y的值是110,这里当TCL解释器遇到字符'['时,它就会把随后的expr作为一个命令名,从而激活与expr对应的C/C++过程,并把'expr'和变量置换后得到的'10+110'传递给该命令过程进行处理。如果在上例中我们去掉[],那么TCL会报错。因为在正常情况下,TCL解释器只把命令行中的第一个单词作为看作命令,其他的单词都作为普通字符串处理,看作是命令的参数。注意,[]中必须是一个合法的TCL脚本,长度不限。[]中脚本的值为最后一个命令的返回值,例如:%sety[expr$x+100;setb300]//y的值为300,因为setb300的返回值为300300有了命令置换,实际上就表示命令之间是可以嵌套的,即一个命令的结果可以作为别的命令的参数。
分享到:
收藏