TCL脚本技术及用法.ppt_第1页
TCL脚本技术及用法.ppt_第2页
TCL脚本技术及用法.ppt_第3页
TCL脚本技术及用法.ppt_第4页
TCL脚本技术及用法.ppt_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

TCL简介,引言 TCL语法 TCL内建命令 TCL命令的扩展,引言,TCL指工具命令语言(Tool Command Language) ,主要包括两个方面的内容:语法和函数库。 TCL语法简单,可扩充性强。 % set a 3 % 3 TCL的函数库包含分析器、执行内建命令的例程及定义新的过程的库函数。这组库函数提供了丰富的扩充函数,允许用户编写新的命令解释程序,加入TCL 的解释器中;,引言,TCL提供了C语言的调用接口,可以很容易地嵌入到C程序中;由于TCL提供了与C的接口函数,所以可以在C编写的应用中调用TCL的库函数,执行TCL的命令或脚本。具体的工作有: 创建TCL的解释器; 执行TCL的命令或脚本; 对返回代码进行处理; 撤消TCL的解释器。,引言,基本的C程序结构如下: #include #include 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运行环境:Windows/Unix/Linux TCL版本:tcl8.5(最高版本) 运行文件:tclsh85.exe wish85.exe: 包括tcl和tk两个部分 文本编辑器:NotePad TextPad UltraEdit,TCL语法,TCL语法是TCL解释器对TCL命令进行分析执行的规则的集合。 在分析阶段 TCL解释器将TCL命令分成一个个的单词,第一个单词是命令名,其余单词是命令的参数,单词之间用空格或Tab键隔开,同时进行必要的置换。 在执行阶段TCL解释器根据第一个单词查找该命令是否有定义,有的话就激活该命令所对应的C/C+过程,并将所有的参数传递给该命令过程,通过命令过程进行处理。 % set a 3 % set b $a % 3,TCL语法,置换 TCL解释器在分析命令时把所有的命令参数当做字符串对待,置换的作用是获取命令参数所对应的值,而非命令参数所代表的字符串。 置换包括变量置换、命令置换和反斜杠置换。变量置换传递的是变量的值,命令置换传递的是命令参数的计算结果,反斜杠置换主要用于在单词符号中插入诸如换行符、空格、$等被TCL解释器当作特殊符号对待的字符。置换可以嵌套。,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语法,注释 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解释器自身提供的一些命令: 变量 列表 控制结构 过程与作用域 字符串操作 文件访问 错误和异常 其他TCL命令,TCL内建命令,TCL支持两种类型的变量:简单变量和数组。简单变量包含两个部分:名字和值,名字把从符号往后直到第一个不是字母、数字或下划线的字符之间的单词符号作为要被置换的变量的名字;数组只能和数组元素一起声明 。 相关命令:set unset append incr puts expr % set a 6 % append a 6 % incr a 1 % expr $a+3 % puts $a % unset a,TCL内建命令,列表命令:list concat lindex llength linsert lreplace lrange lappend lsearch lsort split join % linsert 1 2 3 4 1 7 8 9 10 % 1 7 8 9 10 2 3 4,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内建命令,TCL过程与作用域命令: TCL中过程是由proc命令产生 E.G:% proc add x y expr $x + $y proc命令的第一个参数是你要定义的过程的名字,第二个参数是过程的参数列表,参数之间用空格隔开,第三个参数是一个TCL脚本,代表过程体。 proc生成一个新的内建命令,可以像固有命令一样调用: % add 1 2 % 3,TCL内建命令,TCL还提供三种特殊的参数形式: 首先,你可以定义一个没有参数的过程。 % proc add expr 2+3 其次,可以定义具有缺省参数值的过程。 % proc add val1 val2 2 val3 3 % expr $val1+$val2+$val3 % 另外,TCL的过程定义还支持可变个数的参数,如果过程的最后一个参数是args, 那么就表示这个过程支持可变个数的参数调用。,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内建命令,引用: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内建命令,字 符串操作命令:string、format、regexp、regsub、scan等 regexp ?switchs? ?-? exp string ?matchVar? ?subMatchVar subMatchVar.? % regexp (0x)?0-9a-fA-F+|0-9+)$ ab % 1 % regexp (0x)?0-9a-fA-F+|0-9+)$ 123j % 0,TCL内建命令,文件访问命令: 文件名:TCL中文件名和我们熟悉的windows表示文件的方法有一些区别:在表示文件的目录结构时它使用/,而不是 。 基本文件输入输出命令 :open gets read puts flush close 随机文件访问命令:seek tell eof 管理当前工作目录命令:pwd cd 文件操作和获取文件信息命令:TCL提供了两个命令进行文件名操作:glob和file,用来操作文件或获取文件信息。,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内建命令,错误和异常相关命令: catch command ?varName? error message ?info? ?code? return -code code ?-errorinfo info? ?-errorcode errorCode? ?string? % catch unset x msg % 1 % set msg % cant unset “x“: no such variable,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 /error 2 return -code return $string /return 3 return /break ,TCL内建命令,其他TCL命令: array info history time trace rename namespace,TCL命令扩展,TCL解释器由C过程库构成,并且能嵌入到C程序中,所以程序员可以用C编写新的TCL命令,从而可以在脚本中像TCL的命令一样使用该命令。,TCL命令扩展,扩展一个TCL命令大致可以分为两步:编写扩展命令对应的C/C+过程,注册命令。对Tcl命令的扩展过程一般按下图所示的步骤进行:,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命令扩展,方法(二) 编写扩展命令

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论