tcl入门培训

上传人:小** 文档编号:89363190 上传时间:2019-05-24 格式:PPT 页数:42 大小:163.51KB
返回 下载 相关 举报
tcl入门培训_第1页
第1页 / 共42页
tcl入门培训_第2页
第2页 / 共42页
tcl入门培训_第3页
第3页 / 共42页
tcl入门培训_第4页
第4页 / 共42页
tcl入门培训_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《tcl入门培训》由会员分享,可在线阅读,更多相关《tcl入门培训(42页珍藏版)》请在金锄头文库上搜索。

1、119-Tcl-Overview.ppt 1998/01/03,Tcl入门培训,文档结构,Tcl介绍 “Hello World” 程序及扩展 变量 数据类型 特殊字符 数据结构 控制结构 程序结构 语法要点 对oracle操作 ktcl 文件 一些建议 后附,我们为什么用Tcl?,Tcl是什么? 1、Tool Command Language 2、Terminal Control Language Tcl是一种解释型的脚本语言。脚本解释器为tclsh,同时它也是一个shell环境。Tcl和C语言有着天然的亲缘关系,即相近的数据类型与控制结构;通过规范的API,能够比较方便的用C进行Tcl的扩展

2、开发。 Tcl能做什么? 1、Tcl首先是作为一种简单的命令脚本语言而发明,以便控制和调用各个系统命令。 2、与C相似的数据类型与控制结构,使其具有处理高级事务的能力。 3、强大的文本处理能力。 4、扩展能力达到GUI、网络、OOP等各个方面。 我们为什么用Tcl? 1、确实好用,功能强大:从KAP加速引擎到html(ktcl)标签。 2、快速学习、快速开发。,老套,一个著名的程序 世界上最著名的程序是什么?猜一猜: 是“Hello World!”,下面是tcl版的程序(设aiobs56 为Unix系统提示符) aiobs56 cat hello.tcl #!/aitools/bin/tcls

3、h puts “Hello World!” aiobs56 hello.tcl Hello World! aiobs56 shell方式 以上是以程序的方式运行;tcl也可以运行于shell的形式(提示符%) aiobs56 tclsh % puts “Hello World!” Hello World! % exit aiobs56,老套(续),Tcl脚本程序的结构 1、在第一行指定解释器 #!/aitools/bin/tclsh 或如下写法 #!/bin/sh # the next line restarts using tclsh exec tclsh “$0“ “$ “ 2、注释的标记

4、为# 如: # This is a comment sentence 3、句与句(包括注释句)之间以“换行”或“;”分隔 如: # Following a sentence puts “line 1” puts “line 2” ; # Another comment,老套(续),puts 命令 看tcl的帮助,是这样说: puts 向一个channel(相当于C里的句柄)写 这里的channel可以是标准输出、一个打开的文件、一个打开的socket、甚至一个打开的Unix管道等等、等等。 puts 命令用法 puts ?-nonewline? ?channelId? string 两个?表示

5、之间的内容为可选。如上文的 puts “Hello World!” 向“屏幕(标准输出)”写字符串,可以写成 puts stdout “Hello World!” -nonewline是puts命令的一个option,它的意思是“输出内容后不换行”,另一个老套,第二著名的程序 aiobs56 cat hello2.tcl #!/aitools/bin/tclsh puts -nonewline “Please input your name: ” set Name gets stdin ;# You can write it as : gets stdin Name puts “Hello,

6、$Name!” 运行 aiobs56 hello2.tcl Please input your name: Mark Hello Mark! aiobs56 新的内容 符号对“” gets 命令 set 命令 $ 符号,另一个老套(续),新的内容 在前一页,有一个语句: set Name gets stdin 符号对“”的意思是:执行里面的命令,用结果替换这个组合,类似于C语言中的函数调用。 上文这个句子的含义是:把“gets stdin”的值赋给变量Name。 gets 的语法: gets channelId ?varName? gets 从一个channel取一个行到指定变量;同时它本身也

7、返回这个行,所以gets还有第二种用法: gets stdin Name,变量,变量是程序的基础。 变量:变量名、变量值 变量名:任何字符串都可作为变量名,如下所示,皆可作变量名 Name 变量1 “A Variable” 甚至空格或一个“空”串也可以作为变量名。 变量赋值: set Name Mark set Line “Hello World!” set 变量名 值 与gets类似,命令set同时也返回值。 引号的作用是让里面的内容为一个整体(因为中间有空格),其本身不是实际数据;如果要把引号作为数据引用,在其前面用转义符号 ,变量(续),变量的值:变量的值以符号“$”加变量名来展开,如:

8、 $Name $变量1 $“A Variable” 注意,在展开变量名之前必须保证此变量已被赋过值,否则在展开时会报错“no such variable”。 举例,请在一个tcl环境里逐一试试如下命令: % set Name Mark % puts $Name % set x puts % set y $Name % $x “Hello $y!” 由于tcl是解释型语言,在执行每个句子前都要先展开变量,上文最后一行句子就形成一种动态代码的效果。由此类推,可以实现动态过程、动态调用等代码形式,在某些地方是很有用的。,数据类型,tcl 的数据类型实际上只有一种:字符串 所以在tcl中的变量没有类型

9、转换或类型匹配问题,所有的“数据”都是以字符串的形式存在。 那么,tcl如何进行数值计算?我如何计算并输出一个小数? 数值计算 tcl是支持数值计算的(包括数学函数),不过仅能用在expr 命令中 % set x 100 % set y expr $x + 1 % incr y -2 % expr double($x) % set y expr $x * 2.3 % expr abs(sin($x) “数据类型”输出 一个命令format,其格式串参数类似C语言。 % set z format “This is %-8.2f !” $y This is 230.00 !,特殊字符,有涵义的字符

10、 $ 展开变量的值 展开一个命令(或调用过程)的值 “” 内容作为一个整体,里面支持$ 的作用 内容作为一个整体,但里面不支持$ 及转义字符的作用 转义符,让特殊字符失去特殊涵义,转为纯粹可现字符;同时让一些可现字符转为特殊字符,如 n t r 等 例子 在tcl环境中逐一试试以下命令 % set x 100 % puts $x % puts “$x” % puts $x % puts expr $x * 2.3 % puts “It is expr $x * 2.3” % puts It is expr $x * 2.3 % puts “It is expr $x * 2.3 n”,数据结构

11、- 列,列是tcl里功能非常强大非常灵活的一种数据结构: 1、各个值按序排列 % set x list arg1 arg2 arg3 2、或者按指定分隔符拆分一个字符串 % set Str “1,2,3” % set x split $Str “,” 列的元素可以是任何东西,字符串、空格、“空”、甚至一个列。 列的概念比较复杂,下面例子,体会一下: % set x “1 2 3 4” % llength $x % split $x “ ” % set x “ 1 2 3 4” % llength $x % split $x “ ” % set x list 1 2 3 “” 4 % lleng

12、th $x % split $x “ ”,数据结构-数组,数组提供一个或多个值到另一个值的映射,或者这种映射的集合: 简单说,某个数组的某个下标对应某个值,和C语言不同的是,tcl里的数组下标可以是“任何”字符串,包括空格或“空”(所以数组的下标对空格敏感,注意)。 试试下面命令: % set Data(1) 1.0 % set Data(-2.3) abc % set Data(Name) Mark % set Data() “Hello,” % set Data( ) “a space” % set Data(“My Name”) “Mark !” % puts “$Data() $Dat

13、a(“My Name”)” % set Data(hello,$Data(Name) “$Data() $Data(“My Name”)” % puts $Data(hello,Mark) 数组还有很多相关的操作,可参见命令 array,控制结构-条件分支,终于来到if语句了,没有if语句怎么能有程序? 建议形式: if expr . . . 或者: if expr1 . . . elseif expr2 . . . else . . . 表达式的值应该为逻辑值,表达式支持逻辑运算(与C相似)。 例子 if $x = “Mark” & $y = 1 puts Hello! ,控制结构-条件分支

14、(续),一点体会 1、等式一定要写两个等号 2、如果表达式一端有字符串常量,一定用引号括起 3、注释,设有如下代码 if $x = “Mark” puts Hello! 如果想临时改条件,可否这样写? #if $x = “Mark” if $x = “John” puts Hello! 试试便知。 4、整个if是一个句子,里面必要的分隔符不能省,控制结构-循环,for 循环 按照C语言的教程,if语句后应该是for循环了。 for start_expr test_condition next or step body; for set x 0 $x10 incr x puts “x is $x

15、“ 循环里可以有break ,continue。实际上,for 的语法形式很简单,你完全可以用C的语法来考虑它。 表达式也可以是复合的: % for set x 0; set y 10 $x 3 incr y puts “$x - $y“ 在写程序时需要注意的是整个句子里,变量有的地方带$,有的地方不带$,这是经常容易笔误的地方。,控制结构-循环(续),while 循环 while test_condition body; set x 0 while $x10 puts “x is $x“ incr x 在实际程序中,while 用到较多的地方是处理文件, set fpIn open $FileName r while eof $fpIn != 1 set CurLine gets $fpIn if $CurLine = “” continue . . . ,控制结构-循环(续),前面有一个和C程序不同的地方: 如果文件已经读完最后一行,继续 while eof $fpIn != 1 在C和tcl里条件都会通过 但在句子 set CurLine gets $fpIn 里 tcl 会返回并设CurLine 为文件的最后一行 C 会返回并设 CurLine 为空 所以在tcl程序里在其后加上了如下判断: if $CurLine = “”

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号