logo资料库

TCL脚本语言-基础(1-14).pdf

第1页 / 共189页
第2页 / 共189页
第3页 / 共189页
第4页 / 共189页
第5页 / 共189页
第6页 / 共189页
第7页 / 共189页
第8页 / 共189页
资料共189页,剩余部分请下载后查看
TCL、Python 和软件测试自动化 1 TCL 脚本语言 目录 TCL 脚本语言 ................................................................................................................................... 1 了解它,一小时之内! ........................................................................................................... 5 启动解释器 ....................................................................................................................... 6 变量和表达式 ................................................................................................................... 7 定义函数 ........................................................................................................................... 8 循环和控制 ....................................................................................................................... 8 列表和数组 ..................................................................................................................... 10 输入输出 ......................................................................................................................... 11 类和面向对象 ................................................................................................................. 11 函数库程序包 ................................................................................................................. 13 总结 ................................................................................................................................. 14 基本词法和概念 ..................................................................................................................... 15 一切都是命令和及其参数 ............................................................................................. 15 单词、引号、括号 ......................................................................................................... 17 解释执行过程 ................................................................................................................. 18 脚本注释 ......................................................................................................................... 20 没有 do...while?自己实现............................................................................................. 21 置换:TCL 的灵魂 ................................................................................................................. 23 变量置换 ......................................................................................................................... 23 命令置换 ......................................................................................................................... 25 反斜线置换 ..................................................................................................................... 26 subst 置换 ........................................................................................................................ 27 数学计算,怎么这么烦? ..................................................................................................... 29 语法描述 ......................................................................................................................... 29 操作符 ............................................................................................................................. 30 操作数 ............................................................................................................................. 31 数学函数 ......................................................................................................................... 32 类型、精度 ..................................................................................................................... 32 字符串计算 ..................................................................................................................... 33 计算性能方面的考虑 ..................................................................................................... 33 简单变量和字符串处理 ......................................................................................................... 35 作者:雷雨后 Email: leiyuhou010@gmail.com
TCL、Python 和软件测试自动化 2 创建和删除变量 ............................................................................................................. 35 string:一般处理 ............................................................................................................ 36 format:格式化 ............................................................................................................... 42 scan:解析扫描 .............................................................................................................. 46 Chr()和 Ord() ........................................................................................................ 47 列表和数组:高效强大的数据结构 ..................................................................................... 49 列表 ................................................................................................................................. 49 数组 ................................................................................................................................. 60 正则表达式 ............................................................................................................................. 67 正则表达式语法 ............................................................................................................. 67 正则表达式匹配查找 ..................................................................................................... 74 正则表达式匹配替换 ..................................................................................................... 76 控制结构 ................................................................................................................................. 79 Boolean 类型 ................................................................................................................... 79 条件判断 ......................................................................................................................... 79 循环控制 ......................................................................................................................... 82 break、continue ............................................................................................................... 85 异常处理 ......................................................................................................................... 86 执行字符串 ..................................................................................................................... 90 使用 assert ....................................................................................................................... 97 过程和变量 ............................................................................................................................. 99 定义过程 ......................................................................................................................... 99 全局、局部 ................................................................................................................... 100 参数默认值 ................................................................................................................... 102 可变数量参数列表 ....................................................................................................... 102 处理选项参数 ............................................................................................................... 105 传引用还是传值? ....................................................................................................... 110 再说 return ..................................................................................................................... 111 过程更名、删除 ........................................................................................................... 112 变量跟踪 ....................................................................................................................... 113 名字空间 ............................................................................................................................... 117 创建名字空间 ............................................................................................................... 117 variable 命令 ................................................................................................................. 119 名字和名字解析 ........................................................................................................... 120 引入命令 ....................................................................................................................... 122 输出命令 ....................................................................................................................... 123 其他名字空间命令 ....................................................................................................... 125 面向对象编程 ....................................................................................................................... 129 作者:雷雨后 Email: leiyuhou010@gmail.com
TCL、Python 和软件测试自动化 3 定义类 ........................................................................................................................... 129 使用类和对象 ............................................................................................................... 135 继承 ............................................................................................................................... 138 虚函数 ........................................................................................................................... 139 find:查找类和对象 ..................................................................................................... 140 程序库和程序包 ................................................................................................................... 143 source:TCL 中的#include ........................................................................................... 143 unknow 方法 ................................................................................................................. 143 auto_load:加载程序库 ................................................................................................ 144 创建程序库(library) ................................................................................................. 146 交互模式下执行命令 ................................................................................................... 150 程序包(package) ...................................................................................................... 152 事件驱动 ............................................................................................................................... 165 after 命令 ....................................................................................................................... 165 vwait 进入事件循环 ..................................................................................................... 166 输入输出系统 ....................................................................................................................... 169 操作文件系统 ............................................................................................................... 169 读写文件 ....................................................................................................................... 175 匿名管道 ....................................................................................................................... 188 作者:雷雨后 Email: leiyuhou010@gmail.com
TCL、Python 和软件测试自动化 5 了解它,一小时之内! TCL 语言非常简单,下面我们通过一个简单的例子,让我们对 TCL 有一个大概的映象 和了解。如果你会使用 C Shell 脚本或者有过 C/C++的经验,那么 TCL 对你而言,应该非常 容易。先看看下面的程序 complex.TCL: #File complex.TCL # package require Itcl package require control itcl::class Complex { public variable m_r public variable m_i ;#实数 ;#虚数 constructor {r i} { set m_r $r set m_i $i } public method + { c } { ;#复数的加法 set r [expr "$m_r + [$c cget -m_r]"] set i [expr "$m_i + [$c cget -m_i]"] return [code [Complex #auto $r $i]] } public method GetReal { } { ;#复数的减法 return $m_r } public method GetImag { } { return $m_i } public method - { c } } 作者:雷雨后 Email: leiyuhou010@gmail.com
TCL、Python 和软件测试自动化 6 itcl::body Complex::- {c} { set r [expr "$m_r - [$c cget -m_r]"] set i [expr "$m_i - [$c cget -m_i]"] return [itcl::code [Complex #auto $r $i]] } pro main {} { ;#定义了过程 main set r 100;set i 200 Complex a $r $i Complex b 50 50 set c [a - b] control::control assert enabled 1 puts “c.real = [$c GetReal] ; c.imag = [$c GetImag]” control::assert "[$c GetReal]==50" control::assert "[$c GetImag]==150" } main ;#调用过程 main 上面的代码实现了一个简单的复数类,并且实现了几个成员函数,完成加法和减法操作。 最后的代码创建两个对象,并且相减得到另外一个对象。然后使用 assert 来断定我们的操作 是正确的。 启动解释器 我们可以在 Dos 提示符中输入命令 tclsh 来启动 TCL 解释器,并且进入交互式模式,然 后使用 source 命令来执行我们刚才创建的脚本,如下: C:\>tclsh % cd e:/work/script % source complex.TCL c.real = 50 ; c.imag = 150 % 交互式模式下,我们每输入一次命令,TCL 解释器就执行这命令,然后把命令的执行结 果给打印出来。如果出现了语法错误或者异常,就把异常信息给打印出来。 我们也可以在 DOS 提示符下输入 tclsh e:/work/script 直接执行我们的脚本,如下: 作者:雷雨后 Email: leiyuhou010@gmail.com
TCL、Python 和软件测试自动化 7 C:\>tclsh e:/work/script/complex.tcl c.real = 50 ; c.imag = 150 C:\> ActiveTCL 软件包中还有一个程序 tkCon,可以在启动菜单中找到。这是一个使用 TCL/Tk 开发的图形界面的脚本解释器,使用起来更加方便。 变量和表达式 TCL 中也存在变量的概念,我们可以创建变量,赋值,引用,删除变量,比如上面的代 码中: % set r 100;set i 200 200 % Complex m $r $i m % ;#创建了两个变量 r 和 i,并且初始化为 100 和 200 ;#引用变量 r 和 i,创建了一个 Complex 对象 TCL 中的变量没有类型,或者我们换一种说法,所有的变量都是同一种类型:“字符串” 类型。比如上面例子种的变量 r 和 i,他们的值分别是 100 和 200,这里 100 和 200 都是字符 串,没有整数这么一说。可能我们会迷惑了,如果我要计算这两个数的和,怎么办? % set sum $r+$i ;#企图计算 r 和 i 两个变量的和,但是事与愿违; 100+200 % set sum [expr $r+$i] ;#只有这样才行 300 % 看看上面的例子就明白了,第一种方法计算 sum,结果 sum 的值是字符串“100+200”。 只有通过第二种方式,使用 expr 命令来计算表达式$r+$i,sum 的值才是我们期望的 300。在 TCL 中,所有的数学计算都是通过 expr 命令来实现的。例如通过计算正弦来得到 2 的平方 根: % set PI 3.1415926535897932 3.1415926535897932 % expr "cos($PI/4)*2" 1.41421356237 % expr "sqrt(2)" 1.41421356237 ;#创建变量 PI ;#计算得到 sqrt(2) ;#直接计算得到 sqrt(2) 作者:雷雨后 Email: leiyuhou010@gmail.com
TCL、Python 和软件测试自动化 8 TCL 中表达式的写法和 C 语言是比较类似的,并且支持常用的数学函数。 定义函数 Pascal、VB 语言中存在函数和过程的区别,并且函数和过程的定义方式不一样。在 TCL 语言中,函数和过程的定义方式没有差别,就像 C/C++一样,所以后面的章节中针对 TCL 而言,“函数”和“过程”两种提法是等价的。TCL 中的过程分成两类: 1. TCL 语言自带的核心命令。 2. 用户编写的扩展命令。 TCL 的核心命令只有 80 多条,比如 set 命令;我们还可以使用 TCL 脚本定义自己的过 程,也可以使用 C/C++语言来实现一些和操作系统等紧密相关的过程。前面的例子代码中, 我们就定义了一个过程 main;下面是另外一个过程定义: #过程 Factorial,计算参数 n 的阶乘。 proc Factorial {n} { if {$n<=1} { return 1 } return [expr $n*[Factorial [expr $n-1]]] } puts "10! = [Factorial 10]" puts "5! = [Factorial 5]" ;#调用过程 Factorial,计算 10! ;#调用过程 Factorial,计算 5! 可见,TCL 中的过程是可以递归调用的。 循环和控制 TCL 的核心命令中提供了常见的控制结构。而且 TCL 和其他语言相比很大的不同是: 你甚至可以编写你自己的控制结构!这是后话。TCL 中循环结构包括 for 循环和 while 循环, 例如: #使用 for 循环实现阶乘 proc Factorial1 {n} { set result 1 for {set i 1} {$i<=$n} {incr i} { set result [expr $result*$i] } 作者:雷雨后 Email: leiyuhou010@gmail.com
分享到:
收藏