TCL脚本技术及用法

合集下载

tcl脚本语言介绍

tcl脚本语言介绍
实现执行 set b "hello" 并用其结果来替换源命令
中的方括号部分,产生一条新命令
set a "hello" //"hello" 为 set b "hello" 的返
//回值
最终的结果是b="hello" a="hello"
当命令的一个子域以方括号开始以方括号结束,表示要进行一个命令子替换。并执行该子命令,用其结果来替换原命令中的方括号部分。方括号中的部分都被视为Tcl命令。
Variables: scalars and arrays 变量:标量和向量(即数组)
向量就是数组,而标量是没有下表的变量。
我们用C来类比:
int i; // i 是标量
int j[10]; // j 是向量
变量不需要定义,使用的时候会自动的被创建。Tcl支持两种
变量:标量和向量
举个例子来说明吧,
Tcl是一种很通用的脚本语言,它几乎在所有的平台上都可以释运行,其强大的功能和简单精妙的语法会使你感到由衷的喜悦,这片文章对 Tcl有很好的描述和说明。如果你看起来很吃力,那是因为 Tcl与一般的语言有一些不同之处,刚开始可能有一些不理解,但很快就会掌握的。请坚持一下,我能坚持写完,你至少也应该坚持读一遍吧!
这里有一个初学者不注意的地方,上述的定义一定要写成那样子。而不能向下面那样写:
proc pf {str}
{
puts $str
}
因为proc实际上也只不过是一条命令,是一换行符或分号来结束的,用集群参数来传递函数体。proc的定义如下:
proc name args tclcommand

TCL脚本入门教程

TCL脚本入门教程

系统学习TCL脚本入门教程版本:1. 0作者:次目录1TCL语法 (4)1.1 简介 (4)1.2 运行环境 (4)1.3 本文约定 (4)1.4 参考资料 (4)2引言 (5)2.1 第1课:简单文本输出 (5)2.2 第2课:给变量赋值 (5)2.3 第3课:命令的赋值与置换一 (6)2.4 第4课:命令的赋值与置换二 (7)2.5 第5课:命令的赋值与置换三 (7)2.6 第6课:算数运算 (8)2.7 第7课:文本比较-SWITCH应用 (9)2.8 第8课:数值比较-IF应用 (10)2.9 第9课:WHILE循环 (11)2.10 第10课:FOR循环和INCR (11)2.11 第11课:过程PROC (12)2.12 第12课:过程PROC的参数定义 (13)2.13 第13课:变量的作用域 (13)2.14 第14课:LIST结构 (14)2.15 第15课:LIST项的增删改 (15)2.16 第16课:更多LIST相关 (16)2.17 第17课:字符串函数 (17)2.18 第18课:更多字符串函数 (17)2.19 第19课:修改字符串函数 (20)2.20 第20课:正则表达式 (21)2.21 第21课:更多正则表达式 (22)2.22 第22课:数组 (24)2.23 第23课:更多数组相关 (25)2.24 第24课:文件存取 (28)2.25 第25课:文件信息 (30)2.26 第26课:TCL中的子进程调用-OPEN & EXEC (33)2.27 第27课:命令或者变量是否存在-INFO (34)2.28 第28课:解释器状态-INFO (35)2.29 第29课:过程信息-INFO (36)2.30 第30课:模块化-SOURCE (37)2.31 第31课:建库-UNKNOWN & INFO LIBRARY (38)2.32 第32课:创建命令-EV AL (40)2.33 第33课:在EV AL中应用FORMAT & LIST (40)2.34 第34课:不使用EV AL替换-FORMAT & SUBST (42)2.35 第35课:改变工作目录-CD & PWD (43)2.36 第36课:调试和错误-ERRORINFO & ERROR C ODE & CATCH (44)2.37 第37课:调试-TRACE (45)2.38 第38课:命令行参数和环境串 (46)2.39 第39课:TIME & UNSET (47)2.40 第40课:SOCKET & FILEEVENT & VWAIT (49)2.41 第41课:日期时间-CLOCK (51)2.42 第42课:I/O通道-FBLOCKED & FCONFIG (53)2.43 第43课:子解释器 (56)2.44 第44课:数据库操作 (57)2.45 第45课:函数或过程数组的输入和输出方法 (59)2.46 第46课:INFO的用法 (60)2.47 第47课:多线程 (61)3跋 (75)1TCL语法1.1简介作为脚本语言,tcl语法简单而功能强大。

TCL脚本入门教程

TCL脚本入门教程

TCL脚本入门教程```puts "Hello, TCL!" ;# 输出 Hello, TCL!set name "John" ;# 定义一个变量 nameputs "My name is $name." ;# 输出 My name is John.```在这个例子中,第一行的`puts`命令用于输出文本到控制台,第二行的`set`命令用于定义一个变量,第三行的`puts`命令输出带有变量的文本。

在TCL中,变量需要以`$`开头。

- `set`:用于定义和修改变量的值。

- `if`:用于条件判断,根据条件执行不同的代码块。

- `for`:用于循环执行代码块一定的次数。

- `while`:用于在条件满足的情况下循环执行代码块。

- `proc`:用于定义和调用过程(函数)。

- `expr`:用于进行数学运算和表达式求值。

```set age 25set height 1.75set name "Tom"puts "My age is $age."puts "My height is $height meters."puts "My name is [string toupper $name]."```这个例子中,`set`命令用于定义三个变量,`puts`命令用于输出带有变量的文本。

`string toupper`是TCL中的字符串处理命令,用于将字符串转换为大写。

```set file [open "example.txt" r]set content [read $file]close $fileputs $content```这个例子中,`open`命令用于打开一个文件,`read`命令用于读取文件内容,`close`命令用于关闭文件。

TCL脚本技术及用法

TCL脚本技术及用法

TCL内建命令

TCL还提供三种特殊的参数形式: 首先,你可以定义一个没有参数的过程。 % proc add {} { expr 2+3} 其次,可以定义具有缺省参数值的过程。 % proc add {val1 {val2 2} {val3 3}} { % expr $val1+$val2+$val3 %} 另外,TCL的过程定义还支持可变个数的参数,如果 过程的最后一个参数是args, 那么就表示这个过程支持 可变个数的参数调用。
引言

TCL提供了C语言的调用接口,可以很容易地嵌入到C 程序中;由于TCL提供了与C的接口函数,所以可以 在C编写的应用中调用TCL的库函数,执行TCL的命令 或脚本。具体的工作有: ①创建TCL的解释器; ②执行TCL的命令或脚本; ③对返回代码进行处理; ④撤消TCL的解释器。
引言
基本的C程序结构如下: #include <stdio.h> #include <tcl.h> main() { Tcl_Interp *ip; // 定义解释器 int code; ip=Tcl_CreateInterp(); // 创建该解释器 code=Tcl_EvalFile(ip, "test.tcl"); // 执行文件“test.tcl” if(code!=TCL_OK) exit(1); // 是否成功 else exit(0); }
TCL语法
置换

TCL解释器在分析命令时把所有的命令参数当做字符 串对待,置换的作用是获取命令参数所对应的值,而 非命令参数所代表的字符串。 置换包括变量置换、命令置换和反斜杠置换。变量置 换传递的是变量的值,命令置换传递的是命令参数的 计算结果,反斜杠置换主要用于在单词符号中插入诸 如换行符、空格、[、$等被TCL解释器当作特殊符号 对待的字符。置换可以嵌套。

tcl点板原理和技巧

tcl点板原理和技巧

tcl点板原理和技巧TCL点板原理和技巧TCL(Tool Command Language)点板是一种常用的编程语言,它具有简单易学、功能强大的特点。

在编写TCL脚本时,掌握点板的原理和技巧是非常重要的。

本文将介绍TCL点板的原理和一些常用的技巧。

一、TCL点板的原理TCL点板的原理可以简单地理解为将一系列命令按照特定的顺序组织起来,形成一个可以重复使用的模板。

当需要执行某个功能时,只需调用该点板即可。

点板的原理主要包括以下几个要点:1. 命令组织:点板是由多个命令组成的,每个命令都有特定的功能。

这些命令可以按照特定的顺序排列,形成一个完整的点板。

2. 参数传递:点板可以接受参数,通过参数的传递可以使点板具有更强的灵活性。

参数可以是字符串、数值等各种类型,具体根据点板的功能而定。

3. 循环结构:点板可以包含循环结构,使得某些命令可以重复执行。

循环结构可以根据条件进行判断,从而决定是否继续执行。

4. 条件判断:点板可以包含条件判断结构,根据条件的不同执行不同的命令。

条件判断可以使点板具有更强的适应性和灵活性。

二、TCL点板的技巧除了了解点板的原理,掌握一些常用的技巧也是非常重要的。

下面介绍几个常用的TCL点板技巧:1. 参数传递技巧:在调用点板时,可以传递不同的参数,从而实现不同的功能。

参数的传递可以通过点板的定义来实现,也可以通过外部变量的方式来传递。

2. 循环技巧:循环结构是点板中常用的技巧之一。

通过使用循环结构,可以重复执行某个命令或一组命令。

循环结构可以使用for循环、while循环等方式实现。

3. 条件判断技巧:条件判断是点板中常用的技巧之一。

通过使用条件判断结构,可以根据不同的条件执行不同的命令。

条件判断可以使用if语句、switch语句等方式实现。

4. 错误处理技巧:在点板的执行过程中,可能会出现一些错误。

为了保证点板的稳定性和可靠性,需要添加错误处理的机制。

可以使用try-catch语句来捕获和处理错误。

TCL脚本语言-2-基本词法和概念

TCL脚本语言-2-基本词法和概念

基本词法和概念在进一步深入了解TCL的语法之前,弄清楚TCL脚本的几个基本概念以及TCL解释器解释执行一个脚本的基本流程,是很有必要的。

一切都是命令和及其参数TCL脚本语法的本质其实非常简单:1.一个脚本是由一个或多个命令以及其参数顺序排列而成;命令之间用换行字符或者分号分隔;TCL中的一切都是命令及其参数。

2.一个命令语句包括一个命令字以及零个或多个该命令的参数;命令和参数以及参数之间用空格或者Tab分隔;3.如果任何地方出现可以进行置换的操作,那么就会按照规则进行置换;例如下面的一段代码实际上是由三个命令组成的:class CPerson { ;#第一条命令class及其两个参数protected variable m_name ;#成员变量,保护类型,可以被继承protected variable m_sexconstructor {name sex} { ;#构造函数set m_name $nameset m_sex $sex}public method PrintInfo {} { ;#public方法,输出对象信息,可以被继承puts "CPerson [GetInfo]" ;#调用了成员函数GetInfo}public method GetInfo {} {return "name=$m_name; sex=$m_sex" ;#返回对象信息}} ;#第一条命令结束。

CPerson a “Lei Yuhou” Male ;#第二条命令a PrintInfo ;#第三条命令上面代码很长,但是实际上只有三个命令:第一个是class命令,带有两个参数,第一个是类名,第二个是类的定义体;第二个命令是CPerson命令,实际上刚才的class命令在执行之后就定义了一个新的TCL命令,命令名就是我们声明的类名;第三个命令的命令字是a,这是我们刚才创建的对象,实际上CPerson命令在执行的时候又创建了一个TCL命令,其名字就是我们给出的对象名。

TCL脚本语言-14-输入输出系统

TCL脚本语言-14-输入输出系统

file split name
和 file join 恰好相反,将路径 name 拆分层各个独立的
目录单元;
file tail name
返回路径 name 中剔除目录名后的最后文件名
请看下面的例子:
% file dirname {d:\tmp\a.txt}
->d:/tmp
% file extension {d:\tmp\a.txt}
perf_test.tcl pkgIfNeeded.tcl test_func.tcl 返回一个列表,三个元素都是搜索到文件名,如果我们下发如下的命令:
glob –directory –types f *.tcl
作者:雷雨后
Email: leiyuhou010@
TCL、Python 和软件测试自动化
v(atime) = 1116764165 v(ctime) = 1116761242 v(dev) = 3 v(gid) = 0 v(ino) = 0 v(mode) = 33188 v(mtime) = 1116545258 v(nlink) = 1 v(size) = 442 v(type) = file v(uid) = 0 % file system $fp
-archive = 1 -hidden = 0 -longname = D:/tmp/aa.txt -readonly = 0 -shortname = D:/tmp/aa.txt -system = 0 % file attributes $fp –shortname #查询短文件名 D:/tmp/aa.txt % file attributes $fp –readonly 1 #让文件具有只读
file stat name varname

TCL脚本基本语法

TCL脚本基本语法

TCL基本语法1语言简介TCL缩短工具命令语言的形式。

由加州大学伯克利分校的约翰Ousterhout设计它。

它是一种脚本语言,由其自身的解释器,它被嵌入到开发应用程序的组合。

TCL最初在Unix平台中。

后来移植到Windows,DOS,OS/2和Mac OSX。

TCL非常类似于其他UNIX的shell语言,类似Bourne Shell (Sh), the C Shell (csh), the Korn Shell (sh), 和Perl。

它的目的是提供程序与其他程序,也是作为一个可嵌入的翻译相互作用的能力。

虽然原来的目的是为了使程序能够进行交互,可以找到由Tcl/Tk 编写的完全成熟的应用。

1.1TCL特性TCL的特点如下:1、减少开发时间。

2、功能强大和简单的用户界面工具包整合传统知识。

3、一次编写,随处运行。

它可以运行在Windows,Mac OS X和几乎所有的Unix平台。

4、有经验的程序员很容易上手,因为语言就是这么简单,可以在几个小时或几天学习Tcl就可以搞定。

5、可以轻松地用Tcl扩展现有的应用程序。

另外,也可以包括Tcl的用C,C++或Java 来扩展Tcl,或反之亦然。

6、有一组功能强大的网络功能。

7、最后,它的开源,免费的,可以用于其他无任何限制商业应用。

2基本语法2.1命令结构commandName空格arguments。

每条命令之间通过换行或者;隔开。

例如:#设置变量foo为0set foo 0set bar 1;puts $bar; #设置(set 为一个Tcl命令)变量bar为1,输出(puts也是一个Tcl命令)bar2.2注释使用#注释,不过要注意的是下面的注释是错误的:set foo 0 #设置变量foo为0,这种注释是错误的因为tcl解析器总是认为一条命令应该以换行或者分号结束,其他的在同一行中都认为是参数。

所以正确的应该是:set foo 0#设置变量foo为0,这种注释是正确的set foo 0; #设置变量foo为0,这种注释是正确的3变量定义及基本操作tcl可以定义两种类型的变量:变量和数组。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

TCL内建命令

错误和异常相关命令: catch command ?varName? error message ?info? ?code? return -code code ?-errorinfo info? ?-errorcode errorCode? ?string?
% catch {unset x} msg %1 % set msg % can't unset "x": no such variable

TCL语法
注释

TCL中的注释符是‘#’,‘#’和直到所在行结尾的 所有字符都被TCL看作注释,TCL解释器对注释将不作 任何处理 。 E.G: %#This is a comment % set a 100 # Not a comment % wrong # args: should be "set varName ?newValue?" E.G: % set b 101 ; # this is a comment % 101
TCL内建命令
文件访问命令: 文件名:TCL中文件名和我们熟悉的windows表示文件 的方法有一些区别:在表示文件的目录结构时它使用 ‘/’,而不是‘\’ 。 基本文件输入输出命令 :open gets read puts flush close 随机文件访问命令:seek tell eof 管理当前工作目录命令:pwd cd 文件操作和获取文件信息命令:TCL提供了两个命令 进行文件名操作:glob和file,用来操作文件或获取文 件信息。
TCL内建命令

控制结构命令:if、while、for、foreach、switch、break、 continue % set b " " % set i [expr [llength $a] -1] % while { $i>=0}{ % lappend b [lindex $a $i] % incr i -1 %}
引言


TCL运行环境:Windows/Unix/Linux TCL版本:tcl8.5(最高版本) 运行文件:tclsh85.exe wish85.exe: 包括tcl和tk两个部分 文本编辑器:NotePad \ TextPad \ UltraEdit
TCL语法
TCL语法是TCL解释器对TCL命令进行分析执行的规则 的集合。
TCL内建命令
TCL过程与作用域命令: TCL中过程是由proc命令产生 E.G:% proc add {x y } {expr $x + $y} proc命令的第一个参数是你要定义的过程的名字,第 二个参数是过程的参数列表,参数之间用空格隔开, 第三个参数是一个TCL脚本,代表过程体。 proc生成 一个新的内建命令,可以像固有命令一样调用: % add 1 2 %3


在分析阶段 TCL解释器将TCL命令分成一个个的单词,第 一个单词是命令名,其余单词是命令的参数,单词之间用 空格或Tab键隔开,同时进行必要的置换。 在执行阶段TCL解释器根据第一个单词查找该命令是否有 定义,有的话就激活该命令所对应的C/C++过程,并将所 有的参数传递给该命令过程,通过命令过程进行处理。 % set a 3 % set b $a %3
TCL内建命令
% % % % % % % % % % % % % % proc tgrep {pattern filename} { set ff [open result.txt w+] set f [open $filename r] while {[gets $f line]!=-1} { if {[regexp $pattern $line x]} { puts $ff $x flush $ff } } close $ff close $f } tgrep {.*(\d+\.\d+\.\d+\.\d+)} HUAWEI_1log.txt RouterIP:10.20.0.59
TCL语法
置换

TCL解释器在分析命令时把所有的命令参数当做字符 串对待,置换的作用是获取命令参数所对应的值,而 非命令参数所代表的字符串。 置换包括变量置换、命令置换和反斜杠置换。变量置 换传递的是变量的值,命令置换传递的是命令参数的 计算结果,反斜杠置换主要用于在单词符号中插入诸 如换行符、空格、[、$等被TCL解释器当作特殊符号 对待的字符。置换可以嵌套。
TCL内建命令
引用:upvar % proc temp { arg } { % upvar $arg b % set b [expr $b+2] %} % proc myexp { var } { % set a 4 % temp a % return [expr $var+$a] %} 则: % myexp 7 % 13
TCL内建命令
proc do {varName first last body} { global errorInfo errorCode upvar $varName v for {set v $first} {$v <= $last} {incr v} { switch [catch {uplevel $body} string] { 1 {return -code error -errorInfo $errorInfo \ -errorcode $errorCode $string} 2 {return -code return $string} 3 return } } }
TCL简介


引言 TCL语法 TCL内建命令 TCL命令的扩展
引言
TCL指工具命令语言(Tool Command Language) ,主要包 括两个方面的内容:语法和函数库。


TCL语法简单,可扩充性强。 % set a 3 %3 TCL的函数库包含分析器、执行内建命令的例程及定义 新的过程的库函数。这组库函数提供了丰富的扩充函数, 允许用户编写新的命令解释程序,加入TCL 的解释器中;
处理返回结果 对TCL_OK与TCL_ERROR的处理 撤消解释器 删除命令
编写析构过程
TCL命令扩展
方法(一) 编写扩展命令函数: int Tcl_CmdProc(ClientData clientdata,Tcl_Interp* interp, int argc, char* argv[]); 注册命令函数: Tcl_CreateCommand(Tcl_Interp* interp, char* cmdName,Tcl_CmdProc* cmdProc,ClientData clientdata,Tcl_CmdDeleteProc* deleteProc) 缺点:TCL从外部应用到内部实现都是基于字符串的, 这样在涉及到类型转换时,需要在各种数据类型及其 字符串表示之间来回转换,效率比较低,加上TCL是 解释执行的,导致在利用TCL作较为大型的应用程序 时执行速度不够理想 。
Tcl库
初始化 语法分析器 命令循环
应用程序
核心 命令
公用子程序
程序 自定义 命令
TCL命令扩展

扩展一个TCL命令大致可以分为两步:编写扩展命令 对应的C/C++过程,注册命令。对Tcl命令的扩展过 程一般按下图所示的步骤进行:
编写命令处理过程 创建Tcl解释器 进行初始化工作
Tcl初始化(Tcl_Init) 关联命令与命令处理过程 将有关的Tcl变量与C变量关联 指定启动的脚本

TCL语法
变量置换由一个$符号标记 E.G: % set x 10 % 10 % set y $x+100 % 10+100 命令置换是由[]括起来的TCL命令及其参数 E.G: % set y [expr $x+100 ] % 110 反斜杠置换 E.G: % set msg multiple\ space % multiple space。
TCL内建命令

过程内部引用一个全局变量的值,可以使用global命令。 E.G: % set a 4 %4 % proc sample { x } { % global a % incr a % return [expr $a+$x] %} % sample 3 %8
TCL内建命令

引用:upvar 命令语法: upvar ?level? otherVar myVar ?otherVar myVar ...? upvar命令使得用户可以在过程中对全局变量或其他过程中 的局部变量进行访问。upvar命令的第一个参数otherVar是 我们希望以引用方式访问的参数的名字,第二个参数 myVar 是这个过程中的局部变量的名字,一旦使用了upvar 命令把otherVar 和myVar 绑定,那么在过程中对局部变量 myVar 的读写就相当于对这个过程的调用者中otherVar 所 代表的局部变量的读写 。 upvar命令语法中的level参数表示:调用upvar命令的过程相 对于我们希望引用的变量myVar在调用栈中相对位置 。
TCL内建命令

TCL还提供三种特殊的参数形式: 首先,你可以定义一个没有参数的过程。 % proc add {} { expr 2+3} 其次,可以定义具有缺省参数值的过程。 % proc add {val1 {val2 2} {val3 3}} { % expr $val1+$val2+$val3 %} 另外,TCL的过程定义还支持可变个数的参数,如果 过程的最后一个参数是args, 那么就表示这个过程支持 可变个数的参数调用。
TCL内建命令
TCL解释器自身提供的一些命令: 变量 列表 控制结构 过程与作用域 字符串操作 文件访问 错误和异常 其他TCL命令
相关文档
最新文档