TCL脚本语言-8-控制结构

合集下载

TCL语言手册

TCL语言手册

Tcl语言快速参考手册Tcl("Tool Command Language",即工具命令语言;Tcl念作"tickle"即“踢叩” )是一种简单易用易于扩展的嵌入式脚本语言, 主要用于发布命令给交互式程序(如文本编辑器、调试器),及完成自动化批处理工作。

Tcl语言不同于其他语言的最大的特点是:Tcl程序由Tcl命令序列组成,其每条语句都是一条指令。

由于其极易扩展的特性,Tcl有大量的用C/C++编写的扩展用于提供Tcl本身不具有的功能。

其中使用最广泛的扩展是TK,TK提供了各种OS平台下的图形用户界面GUI(连强大的Python 语言都不单独提供自己的GUI,而是提供接口适配到TK上)。

另一个流行的扩展包是Expect,它提供了通过终端自动执行命令的能力,例如passwd, ftp, telnet等命令驱动的外壳。

一、Tcl程序基本结构1、基本语法Tcl的语法类似于shell:一条Tcl的命令串包含若干条命令,命令使用换行符或分号来隔开;而每一条命令包含若干个域(field),域使用空白(空格或TAB)来隔开——第一个域是命令的名字,其它的域是该命令的参数。

Tcl解释器对一个命令的执行过程分为两步:分析阶段和执行阶段。

在分析阶段,Tcl 解释器运用规则识别出命令并把命令分成一个个独立的单词,同时进行必要的置换(substitution);在执行阶段,Tcl 解释器会把第一个单词当作命令名,并查看这个命令是否有定义,如果有定义就激活这个命令对应的C/C++过程,并把所有后面的单词作为参数传递给该命令过程,让命令过程进行处理。

Tcl解释器既可以执行Tcl内建命令亦可执行用户自己通过C/C++函数实现的新建命令,在应用程序中可用函数Tcl_CreateCommand来完成命令的创建。

所有命令参数都被作为字符串来传递,命令自己会按其所需来解释参数。

另外关于Tcl的注释有一个特殊的要求:'#'必须出现在Tcl解释器期望命令的第一个字符出现的地方,才被当作注释。

TCL 测试语言入门

TCL 测试语言入门

相关命令
列表操作 concat - 将多个列表合并成一个列表 join - 把列表元素合并成一个字符串 lappend - 将元素添加到列表末尾 lassign - 将列表元素赋值给变量 lindex - 从列表中获得一个元素 linsert - 向列表插入一个元素 list - 创建一个列表 llength - 计算列表的元素个数 lrange - 返回列表中的一个或者多个临近的元素 lrepeat - 使用重复的元素构造一个列表 lreplace - 在一个列表中使用新的元素替代其它元素 lreverse - 反转列表元素的顺序 lsearch - 在列表中寻找特定元素 lset - 修改列表中的一个元素 lsort - 给列表中的元素排序 split - 将字符串分解成Tcl列表
注释:#
• • • '#'必须出现在TCL解释器期望命令的第一个字符出现的地方,才被当作注释。 %set a 100 # Not a comment %set b 101 ; # this is a comment
变量
• TCL支持两种类型的变量:简单变量和数组
• •
简单变量: TCL解释器在分析一个变量置换时,只把从$符号往后直到第一个不是字母、 数字或下划线的字符之间的单词符号作为要被置换的变量的名字。
相关命令
• 变量和过程 • • • • • • • • • • • • apply - 申请一个匿名函数 array - 处理数组变量 global - 存取全局变量 incr - 增加变量的值 namespace - 创建和操作命令和变量的上下文 proc - 创建一个Tcl过程 rename - 重新命名或者删除一个命令 set - 读写变量 trace - 监视变量存取、命令用法和执行 unset - 删除变量 upvar - 在不同的堆栈层中创建一个变量的链接 variable - 创建和初始化一个名字空间变量

Tcl脚本测试入门

Tcl脚本测试入门

Tcl脚本测试入门Tcl简介Tcl是一种非常简单的编程语言,如果你以前曾经学过编程,那么你只要学习几个小时就可以编写出一些有趣的Tcl程序。

本文将对Tcl的功能做一个大概的介绍。

一般来说,读完本文之后,你就可以开始独立的编写一些简单的Tcl 脚本了;不过,要想获得更全面的认识,我们建议你还是去参考几本目前已经出版的 Tcl书籍。

基本语法Tcl脚本由一些被换行符或是分号分开的命令所组成。

命令都有相同的基本格式,如下面的例子所示:expr 20 + 10该命令计算20加10的和,并返回结果30。

你可以把这个例子以及本文中的所有其它的例子键入到tclsh这样的Tcl应用程序中来验证它们;在一个命令结束后,tclsh将打印出它的结果。

每个Tcl命令都含有一个或多个被空格分开的单词,在这个例子中有4个单词:expr,20,+,和10。

第一个单词是一个命令名,其余的单词是这个命令的参数。

所有的Tcl命令都含有一些单词,但不同的命令对他们的参数有不同的处理方式。

expr命令把它的所有参数看作是一个算术表达式,计算表达式的结果,并以字符串的形式返回结果。

在expr命令中,单词之间的分隔不是很重要:同样的命令你可以写成这种形式:expr 20+10不过,对大部分的命令来说,单词的结构是很重要的。

每个单词都会用于不同的目的。

所有的Tcl命令都返回结果。

如果一个命令产生了没有意义的结果,那么它将返回一个空字符串作为它的结果。

变量Tcl允许你在变量中保存数值,并且可以在后续的命令中使用这些数值。

set命令用于对变量进行读写操作。

比如,下面的命令对变量x赋值为32。

set x 32这个命令返回变量的新值。

你可以让set只带一个参数来读出变量的数值:set x你不需要在Tcl中声明变量:变量在第一次set的时候被自动创建。

Tcl变量没有类型:任何值可以赋给任何变量。

要想在一个命令中使用变量的值,可以采用变量替代,如下例所示:expr $x*3当一个字符$出现在一个命令中的时候,Tcl把跟在它后面的字母和数字看作是一个变量名并且将其替换成变量的值。

tcl脚本教程

tcl脚本教程
body; } for {set x 0} {$x<10} {incr x} {
puts "x is $x"
} 循环里可以有break ,continue。实际上,for 的语法形式很简单,你完全 可以用C的语法来考虑它。 表达式也可以是复合的:
% for { set x 0; set y 10 } { $x <3 && $y < 13 } {incr x ;incr y } { puts "$x -- $y"
infoexistsvarnamesetvarnamesomevarjoin和splitsplitsomestring把一个字符串解成listsplitsomestring以为分隔符把一个字符串解成listjoinsomelist把一个list合成一个字符串joinsomelist以为分隔符把一个list合成一个字符串语法要点续list及相关操作listarg1argn把各个参数合成一个listllengthsomelist返回list的长度元素个数lindexsomelist返回list的第一个元素lindexsomelistend返回list的最后一个元素end是list操作的保留字lindexsomelistexprllengthsomelist什么意思
gets channelId ?varName? gets 从一个channel取一个行到指定变量;同时它本身也返回这个行, 所以gets还有第二种用法:
gets stdin Name
变量
• 变量是程序的基础。 • 变量:变量名、变量值 • 变量名:任何字符串都可作为变量名,如下所示,皆可作变量名
% puts $Name
% set x puts

tcl脚本语言学习

tcl脚本语言学习

4、llength 命令:
用于获得一个列表的元素个数。 set l "a 3 k";llength $l; =>3
5、lindex 命令:
返回列表中指定位置的特定元素,它是从 0 开始计数。 set x { 1 4 5 7 8 0 9};lindex $x 6; =>9 (1 表示第 0 个数,所以第 6 个 数为 9) 。
2、concat 命令:
以空格为分隔符将多个列表拼装在一起成为新的列表。 %set x {1 2} ;set y [concat $x 3]; => 1 2 3
它的作用等同于双引号:set y "$x 3"
3、lappend 命令:
用来将新元素追加到列表末尾。注意显示的时候会有空格 set a hel;lappend a lo; =>hel lo (由此可以看出, lappend 可以用于创建一 个列表)
5、string 命令:
(1) 、string compare、string equal 字符串比较
例 4-8string compare 和 string equal 进行字符串比较的例子 %set s1 abc =>abc %set s2 abd =>abd % if { [string compare $s1 $s2] == 0} { puts "s1 is same as s2" } else { puts "s1 isn’t same as s2" } => s1 isn’t same as s2 %if { [string equal $s1 $s2]} { puts "s1 is same as s2" } else { puts "s1 isn’t same as s2" } => s1 isn’t same as s2 (2)string match:匹配 string match alpha alpha;=>1;#匹配时输出 1 string match {[alpha]*} bfadsalpha ;=>0 ;#表示要匹配以 alpha 任何一个开头的 字符串 (3)string replace:字符串替换 (4)字符串映射:string map string map 命令根据字符映射对字符串进行转换。映射以输入、输出表的形 式表示。 凡是字符串中包含有输入序列的地方都使用相应的输出序列替换(列表 中输入后的字符) 。输入、输出要成对使用,如: string map {f p d l} "food" =>pool string map {f pp d ll oo a} "food" =>ppall

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(Tool Command Language)是一种解释执行的脚本语言(scrīpting Language)。

它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。

由于TCL的解释器是用一个C\\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作一个C库,这个库中有丰富的用于扩展TCL命令的C\\C++过程和函数,可以很容易就在C\\C++应用程序中嵌入TCL,而且每个应用程序都可以根据自己的需要对TCL语言进行扩展。

我们可以针对某一特定应用领域对TCL语言的核心命令集进行扩展,加入适合于自己的应用领域的扩展命令,如果需要,甚至可以加入新的控制结构,TCL解释器将把扩展命令和扩展控制结构与固有命令和固有控制结构同等看待。

扩展后的TCL 语言将可以继承TCL 核心部分的所有功能,包括核心命令、控制结构、数据类型、对过程的支持等。

根据需要,我们甚至可以屏蔽掉TCL的某些固有命令和固有控制结构。

通过对TCL的扩展、继承或屏蔽,用户用不着象平时定义一种计算机语言那样对词法、语法、语义、语用等各方面加以定义,就可以方便的为自己的应用领域提供一种功能完备的脚本语言。

TCL良好的可扩展性使得它能很好地适应产品测试的需要,测试任务常常会由于设计和需求的改变而迅速改变,往往让测试人员疲于应付。

利用TCL的可扩展性,测试人员就可以迅速继承多种新技术,并针对产品新特点迅速推出扩展TCL命令集,以用于产品的测试中,可以较容易跟上设计需求的变化。

另外,因为TCL是一种比C\\C++ 语言有着更高抽象层次的语言,使用TCL可以在一种更高的层次上编写程序,它屏蔽掉了编写C\\C++程序时必须涉及到的一些较为烦琐的细节,可以大大地提高开发测试例的速度。

TCL语言学习入门

TCL语言学习入门
TCL脚本语言学习
语言简介
Tcl是一种很通用的脚本语言,它几乎在所有的平台上都可以解释运行,功能强大。是tool command language的缩写,发音为"tickle”。实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。它有一个简单的语法和很强可扩充性,Tcl可以创建新的过程以增强其内建命令的能力。其次,Tcl是一个库包,可以被嵌入应用程序,Tcl的库包含了一个分析器、用于执行内建命令的例程和可以使你扩充(定义新的过程)的库函数。应用程序可以产生Tcl命令并执行,命令可以由用户产生,也可以从用户接口的一个输入中读取(按钮或菜单等)。但Tcl库收到命令后将它分解并执行内建的命令,经常会产生递归的调用。
1
2
set a 20; set b 4;
set c [expr $a/$b];#此时的c的值为5
除此之外,expr还能够识别一些函数及其返回值如下:
abs(x) x的绝对值
round(x) x舍入后得到的整数值
sin(x) x的正弦
…………………………………..
举个例子:
1
set a [expr sin(0.3)];#计算0.3的正弦
switch $element{
# 判断element的值
}
}
for是最常用的循环。其基本结构为:
for {initialization} {condition} {increment} {body}
例如:
1
for{set i 0} {$i< 10} {incr i} {puts $i;} #将打印出0到9
1
2

tcl语法认识

tcl语法认识

tcl语法认识TCL(Tool Command Language)是一种基于字符串的命令语言,语法结构简单明了。

下面是对TCL 语法的一些基本认识:1.命令与参数:•TCL中每个命令由一个或多个单词组成,第一个单词是命令名,后面的单词是该命令的参数。

命令与参数之间必须用空格或制表符隔开。

•命令之间必须用换行符或分号隔开。

1.变量:•TCL中的变量以美元符号()开开开开开开开开开开开开开开myVariable表示一个名为“myVariable”的变量。

•变量可以在命令中直接使用,无需事先声明。

2置换:•TCL支持三种置换:变量置换、命令置换和反斜杠置换。

•变量置换:$[variable]•命令置换:$[command]•反斜杠置换:$[command]3字符串操作:•TCL支持字符串连接、子串提取、字符串替换等操作。

例如,expr substr($string, 1, 3)表示提取字符串“string”的前三个字符。

4控制结构:•TCL支持条件判断(if/then/else)和循环控制(for/while)。

例如,if { $x > $y } { puts "x is greater" }表示如果x大于y,则输出“x is greater”。

5函数:•TCL允许用户自定义函数,使用proc关键字定义函数。

例如,proc add {a b} {return [expr $a + $b]}定义了一个名为“add”的函数,用于计算两个数的和。

6注释:•TCL使用双引号和注释符号(#)来添加注释。

例如,“puts “Hello World””和“# This is a comment”都是合法的TCL语法。

7输出:•TCL使用“puts”关键字来输出字符串到标准输出设备(通常是屏幕)。

例如,“puts "Hello World"”将输出“Hello World”。

TCL语言

TCL语言

TCL语言
TCL(Tool Command Language)是一种通用的脚本语言,最初设计用于自动
化软件测试。

它具有简单易学的语法结构和强大的扩展能力,可以在多个操作系统上运行。

TCL语言主要用于编写脚本来控制和配置软件应用程序。

TCL的特点
TCL语言具有以下特点:
•易学易用:TCL语法简单清晰,入门门槛低,适合初学者快速上手。

•跨平台:TCL脚本可以在多个操作系统上运行,包括Windows、Linux、Unix等。

•模块化:TCL支持模块化开发,可以将功能分割成多个模块,提高代码可复用性。

•动态类型:TCL是一种动态类型语言,变量的类型在运行时确定,灵活性较高。

•强大的扩展能力:通过TCL的扩展包,可以方便地扩展功能,适应多样化的需求。

TCL的应用领域
TCL语言在以下领域有着广泛的应用:
•自动化测试:TCL最初设计用于自动化软件测试,可以通过编写TCL 脚本来进行自动化测试。

•网站开发:TCL可以用于构建Web应用程序,通过TCL的Web扩展包可以实现服务器端的动态网页生成。

•网络编程:TCL提供了丰富的网络编程库,可以用于开发网络应用程序。

•嵌入式开发:TCL语言可以作为嵌入式系统的脚本语言,用于控制和配置嵌入式设备。

•图形界面开发:TCL/TK是一个常用的图形用户界面开发工具包,可以用来创建GUI应用程序。

TCL语言示例
下面是一个简单的TCL脚本示例,展示了如何输出。

tcl教程

tcl教程

tcl教程TCL(工具命令语言)是一种脚本语言,主要用于实现自动化工作流程、快速开发小型工具和控制系统等应用。

它具有简单易学、功能丰富以及可移植性好等特点。

本教程将带你从基础开始逐步学习TCL的语法和常用命令,并通过实例演示帮助你快速掌握TCL编程。

1. TCL的安装和运行环境配置首先,你需要下载并安装TCL的最新版本。

在安装过程中,请根据操作系统选择正确的安装文件,并按照向导进行安装。

安装完成后,你可以在命令行界面中输入"tclsh"来启动TCL解释器,并进入TCL编程环境。

2. TCL脚本的基本结构和语法一个TCL脚本通常由一系列的命令组成,每条命令占据一行。

TCL命令以"$"符号开头,如"$command argument1 argument2"。

TCL的注释以"#"符号开头,后面的内容将被忽略。

以下是一个简单的TCL脚本示例:```tcl#!/usr/bin/tclsh# 输出Hello World!puts "Hello World!"```3. 变量和数据类型TCL支持多种数据类型,包括整数、浮点数、字符串、列表和字典等。

你可以使用"set"命令定义一个变量,并使用"$"符号在其他地方引用该变量。

以下是一些例子:```tclset name "Tom"set age 18set pi 3.14159set fruits {apple banana orange}set person(name) "John"```4. 控制流结构TCL提供了常见的控制流结构,如条件语句和循环语句,用于控制程序的执行流程。

以下是一些控制流语句的示例:if语句:```tclif {$age >= 18} {puts "成年人"} else {puts "未成年人"}```while循环语句:```tclset num 1while {$num <= 10} {puts $numincr num}```5. 文件操作TCL提供了一组用于文件操作的命令,如打开文件、读取文件、写入文件和关闭文件等。

Tcl语言基础教程

Tcl语言基础教程
注意路径的描述应该和UNIX相同,使用'/'而不是'\'。
2、置换(Substitution)
set x 10
set y 100 + x
上面命令执行后,y的值是“100 + x”而不是我们期望的110。这是因为Tcl解释器在分析命令时,把所有的命令参数都当作
字符串看待,所以x 被看作了字符串“100 + x”的一部分。如果我们想使用x的值'10' ,就必须告诉Tcl解释器:我们在这里期望的
如果regexp命令后面有参数matchVar和subMatchVar,则所有的参数被当作变量名,如果变量不存在,就会被生成。
regexp把匹配整个正规表达式的子字符串赋给第一个变量,匹配正规表达式的最左边的子表达式的子字符串赋给第二个变
量,依次类推,例如:
regexp { ([0-9]+) *([a-z]+)} " there is 100 apples" total num word 1
都将成为普通字符,失去其特殊意义,Tcl解释器不会对其作特殊处理。
二、Tcl变量数据类型
Tcl只支持一种数据类型:字符串(string)。所有的命令,命令的所有的参数,命令的结果,所有的变量都是字符串。请牢记
这一点,所有的东西都是字符串。(然而字符串的实际解释是依赖于其所处上下文。它有三种形式:命令, 表达式和表)。
符串,然后把结果存到变量varName中,注意除了空格和TAB键之外,string 和formatsting中的字符和'%'必须匹配。例如:
scan "some 26 34" "some %d %d" a b

Tcl语言参考

Tcl语言参考

Tcl语言参考Tcl("Tool Command Language",即工具命令语言;Tcl念作"tickle"即“踢叩” )是一种简单易用易于扩展的嵌入式脚本语言, 主要用于发布命令给交互式程序(如文本编辑器、调试器),及完成自动化批处理工作。

Tcl语言不同于其他语言的最大的特点是:Tcl程序由Tcl命令序列组成,其每条语句都是一条指令。

由于其极易扩展的特性,Tcl有大量的用C/C++编写的扩展用于提供Tcl本身不具有的功能。

其中使用最广泛的扩展是TK,TK提供了各种OS平台下的图形用户界面GUI(连强大的Python语言都不单独提供自己的GUI,而是提供接口适配到TK上)。

另一个流行的扩展包是Expect,它提供了通过终端自动执行命令的能力,例如passwd, ftp, telnet等命令驱动的外壳。

一、Tcl程序基本结构1、基本语法Tcl的语法类似于shell:一条Tcl的命令串包含若干条命令,命令使用换行符或分号来隔开;而每一条命令包含若干个域(field),域使用空白(空格或TAB)来隔开——第一个域是命令的名字,其它的域是该命令的参数。

Tcl解释器对一个命令的执行过程分为两步:分析阶段和执行阶段。

在分析阶段,Tcl 解释器运用规则识别出命令并把命令分成一个个独立的单词,同时进行必要的置换(substitution);在执行阶段,Tcl 解释器会把第一个单词当作命令名,并查看这个命令是否有定义,如果有定义就激活这个命令对应的C/C++过程,并把所有后面的单词作为参数传递给该命令过程,让命令过程进行处理。

Tcl解释器既可以执行Tcl内建命令亦可执行用户自己通过C/C++函数实现的新建命令,在应用程序中可用函数Tcl_CreateCommand来完成命令的创建。

所有命令参数都被作为字符串来传递,命令自己会按其所需来解释参数。

另外关于Tcl的注释有一个特殊的要求:'#'必须出现在Tcl解释器期望命令的第一个字符出现的地方,才被当作注释。

tcl语言常用命令

tcl语言常用命令

tcl语言常用命令(最新版)目录1.TCL 语言简介2.TCL 语言常用命令分类3.TCL 语言常用命令示例4.TCL 语言命令的使用技巧5.总结正文1.TCL 语言简介TCL(Tool Command Language)是一种轻量级的脚本语言,主要用于嵌入式系统、测试自动化、网络设备配置等领域。

它的语法简单易学,功能强大,可以快速实现各种复杂的操作。

2.TCL 语言常用命令分类TCL 语言的命令主要分为以下几类:(1)控制结构命令:如 if、else、while、for 等,用于控制程序的执行流程。

(2)变量操作命令:如 set、get、array set 等,用于操作变量及其数组。

(3)字符串操作命令:如 string、substring、trim 等,用于处理字符串。

(4)数学运算命令:如 expr、lset 等,用于实现数学运算。

(5)流程控制命令:如 break、continue、return 等,用于控制程序的执行。

3.TCL 语言常用命令示例以下是一些 TCL 语言常用命令的示例:(1)控制结构命令:```if { $a > $b } {puts "a > b"} else {puts "a <= b"}```(2)变量操作命令:```set a 10set b 20puts "a = $a"puts "b = $b"```(3)字符串操作命令:```set str "Hello, world!"puts "str = $str"puts "substring($str, 0, 5) = $substring($str, 0, 5)"```(4)数学运算命令:```set a 5set b 3puts "a * b = $a * $b"puts "a + b = $a + $b"```(5)流程控制命令:```for { set i 0 } { $i < 10 } { incr i } {puts "i = $i"}```4.TCL 语言命令的使用技巧(1)使用 set 命令为变量赋值时,等号两边不能有空格。

TCL语言笔记:TCL中的控制结构命令

TCL语言笔记:TCL中的控制结构命令

TCL语⾔笔记:TCL中的控制结构命令⼀、引⾔控制结构允许程序根据不同的状态、条件和参数来选择不同的处理和执⾏路径,从⽽使代码具有更强的灵活性、健壮性和可读性。

Tcl 提供了 if、if/else、if/elseif、foreach、 for、while 和 switch 命令来管理控制结构。

这些命令和其他语⾔如C语⾔的条件语句的作⽤相同。

需要区别的是在 Tcl 中所有控制结构都是由相应的命令来实现,⽽ C 语⾔中则是⼀条控制语句。

控制结构通常要求带有⼀个延迟执⾏命令体或者过程体,这个命令体需要⽤花括号括起来以加以界定。

⼆、详细1.if/else 命令if 命令根据表达式的结果来执⾏命令体:如果表达式结果为真,则执⾏命令体,否则会执⾏另外⼀个条件命令体(如果存在的话)。

后⾯两个命令体(elseif 和 else)是可选的。

[语法] if { test expr 测试表达式 } {body 1} elseif {test expr 测试表达式} {body2} else {test expr}1.语法中⽤以界定过程体的花括号⼀定要和 if 命令在同⼀⾏上!因为对 Tcl 来讲,换⾏符就是命令结束符,所以如果在 if 表达式后直接换⾏,写成:if { test expr }{...}就会出错。

Tcl 遇到换⾏后就认为命令结束,但找不到执⾏命令体,返回错误。

其他的控制命令,还有以后的过程定义命令等等都存在这个问题。

但情况并不全部如此。

当在⼀个花括号体内或者⼀个双引号体内换⾏的时候,解释器不认为是命令的结束,所以上⾯的语法中,我们只将执⾏命令体的第⼀个花括号(左括号)留在了 if 命令⾏和 else 命令⾏,然后另起⼀⾏书写执⾏命令体的过程语句,右括号也被单独放到了⼀⾏上。

这样做是为了提⾼可读性和便于查错。

2.如果 if 后⾯还有 else/elseif 命令,则要留意 else/elseif 的位置。

系统学习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脚本语言-8-控制结构

TCL脚本语言-8-控制结构

控制结构TCL中使用命令来实现程序控制结构,我们还可以自己编写扩展命令来扩充控制结构。

常见的控制结构包括如下几种:循环控制、条件判断、异常处理和执行脚本。

这些结构控制命令都比较简单,和C/C++中的程序控制比较类似。

但是在介绍控制结构之前,先有必要介绍一下Tcl中的布尔类型。

Boolean类型再次强调,TCL中一切都是字符串,没有类型。

这里所说的Boolean类型,指的是在条件判断的时候,什么东西被当作True,什么被当作False。

请记住如下规则:1.字符串:Yes,Y,True,T,On。

不管大小写,当作条件来判断时,会被认为是True;2.字符串:No,N,False,F,Off。

不管大小写,当作条件来判断时,会被认为是False;3.数字0(整数或者浮点)会被当作False,任何非0的整数或者浮点数都会被当作True;例如:% while 0.00e23 "puts ccc;break;" ;#False% while 0. "puts ccc;break;" ;#False% while 0.1 "puts ccc;break;" ;#Trueccc% while T "puts ccc;break;" ;#Trueccc% while 1023 "puts ccc;break;" ;#Trueccc% while T "puts ccc;break;" ;#Trueccc条件判断TCL中的条件判断主要是两个命令:if和switch。

if…elseif命令的格式如下:if expr1 ?then? body1elseif expr2 ?then? body2elseif ... ?else? ?bodyN?可以看见,if命令的参数then是可以省略的。

这给喜欢Pascal风格和C风格的不同的编程人员,都带来了怀旧的机会。

TCL介绍工具控制语言介绍

TCL介绍工具控制语言介绍

14529‎45183‎1 075‎2 200‎912 6‎22202‎02000‎38480‎113人‎们常常问我‎设计Tcl‎语言的目的‎是什么,为‎什么它会变‎得这么受欢‎迎。

本文将‎重温一下当‎年产生设计‎T cl和T‎k的想法,‎回顾Tcl‎和Tk在过‎去十年间发‎展的过程,‎以及我从伯‎克利到su‎n到scr‎i ptic‎s的人生经‎历。

你将看‎到,起初T‎c l是很简‎陋的;这个‎系统的成功‎令我很吃惊‎,其实我也‎是通过回顾‎它的历史才‎开始明白T‎c l流行的‎原因是什么‎。

Tc‎l的诞生‎Tcl‎脚本诞生于‎80年代初‎,我在加州‎大学伯克利‎分校的项目‎“集成电路‎设计工具”‎的研究。

那‎时,我和我‎的学生已经‎写出了许多‎用于IC设‎计的交互工‎具,如Ma‎g ic和C‎r ysta‎l。

每个工‎具都需要一‎个命令语言‎(在那个年‎代,人们需‎要键入命令‎才能使用这‎些工具;图‎形用户界面‎还没有被广‎泛的使用)‎。

不过我们‎的研究重点‎是工具而不‎是它们的命‎令语言,所‎以我们没有‎在命令语言‎上投入太多‎的精力,结‎果语言方面‎变得很薄弱‎。

更糟的是‎,每个工具‎的语言之间‎是互不相通‎的。

这样一‎来,经过一‎段时间后,‎就变得相当‎棘手。

‎1987年‎秋,在DE‎C的西部研‎究所的假期‎中,我有了‎设计一种嵌‎入式命令语‎言的想法。

‎这个想法就‎是花费一些‎精力去创建‎一种优秀的‎解释型语言‎,然后进一‎步把它做成‎一个能够在‎许多不同的‎应用程序中‎重复利用的‎库包(li‎b rary‎pack‎a ge),‎语言的解释‎器要提供一‎系列相对通‎用的工具,‎如变量,控‎制结构,过‎程。

每个使‎用这个语言‎的程序都可‎以以扩展的‎形式把自己‎的功能加到‎语言中,达‎到用语言来‎控制程序的‎目的。

Tc‎l的全称“‎工具命令语‎言”正说明‎了这一点。

‎可嵌入‎性是Tcl‎的特点之一‎,为了实现‎这个想法,‎我准备在以‎下三个方面‎进行着手:‎★这个‎语言必须是‎可扩展的:‎它应该能够‎让每个应用‎程序可以很‎方便的把自‎己的功能加‎到语言的基‎本功能中,‎并且程序的‎特定功能必‎须使用起来‎非常自然,‎就好像一开‎始就是为这‎个语言设计‎的一样。

TCL基础教程——(5)TCL中的结构控制

TCL基础教程——(5)TCL中的结构控制

TCL基础教程——(5)TCL中的结构控制TCL中的控制结构是通过使用命令来实现的,命令中有循环命令:while,foreach和for。

还有条件命令:if和switch。

错误处理命令:catch。

还有一些控制微调结构的命令,如:break,continue,return和error。

一.if then else这个命令的语法为if espression then body1 else body2看这个程序:[ppcorn@localhost ppcorn]$ cat iftest1.tcl#!/usr/bin/tclsh###################################################### This program used to test if then eles# The number input by keyboard will be divide by 10####################################################puts -nonewline "Please input a number: "flush stdout;set x [gets stdin]if {$x==0} then {puts stderr "Divide by zero"} else {set slope [expr 10/$x]puts $slope}[ppcorn@localhost ppcorn]$ ./iftest1.tclPlease input a number: 0Divide by zero[ppcorn@localhost ppcorn]$ ./iftest1.tclPlease input a number: 25这个程序中,请大家注意一下读入键盘输入的方法,先执行flush stdout,然后使用get stdin 来读键盘输入。

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

控制结构TCL中使用命令来实现程序控制结构,我们还可以自己编写扩展命令来扩充控制结构。

常见的控制结构包括如下几种:循环控制、条件判断、异常处理和执行脚本。

这些结构控制命令都比较简单,和C/C++中的程序控制比较类似。

但是在介绍控制结构之前,先有必要介绍一下Tcl中的布尔类型。

Boolean类型再次强调,TCL中一切都是字符串,没有类型。

这里所说的Boolean类型,指的是在条件判断的时候,什么东西被当作True,什么被当作False。

请记住如下规则:1.字符串:Yes,Y,True,T,On。

不管大小写,当作条件来判断时,会被认为是True;2.字符串:No,N,False,F,Off。

不管大小写,当作条件来判断时,会被认为是False;3.数字0(整数或者浮点)会被当作False,任何非0的整数或者浮点数都会被当作True;例如:% while 0.00e23 "puts ccc;break;" ;#False% while 0. "puts ccc;break;" ;#False% while 0.1 "puts ccc;break;" ;#Trueccc% while T "puts ccc;break;" ;#Trueccc% while 1023 "puts ccc;break;" ;#Trueccc% while T "puts ccc;break;" ;#Trueccc条件判断TCL中的条件判断主要是两个命令:if和switch。

if…elseif命令的格式如下:if expr1 ?then? body1elseif expr2 ?then? body2elseif ... ?else? ?bodyN?可以看见,if命令的参数then是可以省略的。

这给喜欢Pascal风格和C风格的不同的编程人员,都带来了怀旧的机会。

Pascal中then是必须的。

C中是没有then的。

if命令中的条件表达式expr可以写成多行,只要是一个字符串都可以。

如果写成多行,那么最好加上then,这样看起来就比较方便。

这个命令的具体执行我就不详细解释了。

要注意的是最后的else,如果没有else,那么就不能有bodyN,如果有了else,就必须有bodyN。

请看例子:if {$vbl == 1} {puts "vbl is one"} elseif {$vbl == 2} {puts "vbl is two"} else {puts "vbl is not one or two"}switch相比if…else,switch命令则要复杂很多。

它有两种语法形式:1.switch ?options? string pattern body ?pattern body ...?2.switch ?options? string {pattern body ?pattern body ...?}两种形式功能上完全等价,我们一般建议采用第二种,它和C语言的语法比较接近:所有的候选值和对应的代码全部都放在一个花括号中。

但是如果需要对pattern和body等进行替换,那么第一个形式就比较方便。

switch的选项参数可以为:1.-exact:这是默认情况,表示参数string和模式pattern的精确匹配;2.-glob:表示采用glob模式进行匹配。

匹配方法参考string match命令;3.-regexp:表示采用正则表达式进行匹配,string是字符串,而pattern是正则表达式;4.--:表示选项参数到此为止,后面的是参数string。

这是为了防止参数string的第一个字符就是“-”而引起非法选项的错误。

该命令的执行过程:根据选项指定的匹配模式,逐个将string和pattern进行匹配,如果匹配成功,那么就执行pattern后面对应的代码,并且返回该代码的结果。

如果最后的一个模式是default,安么它匹配任意字符串。

如果string没有一个匹配成功并且没有default,那么switch直接返回空。

如果某一个pattern对应的body为“-”,那么表示这个pattern和下一个pattern共享一个body。

这和C语言中的case 1:case2:{…}比较类似。

switch中的-regexp请看下面的几个例子:set r "abbbcc"switch -regexp $r {ab{2}c { puts "1" }ab{3}c { puts "2" }ab{3}c{2} { puts "3" }}上面采用正则表达式进行匹配,显然,第三个表达式才是和$r完全匹配的。

但是上面的代码执行输出是“2”。

这给我们一个重要的启示:switch中的-regexp匹配选项,实质上就是把pattern拿出来在string中进行正则表达式查找,也就是执行regexp命令,如果regexp返回1(也就是在string中找到了pattern),那么就算匹配成功,就开始执行后面的body。

而根本不管pattern是不是恰好匹配了整个string!上面这一点务必牢记。

对-glob选项,则没有这样的问题。

选项pattern和string只有完全匹配的时候才算匹配成功。

也就是说执行命令string match $pattern $string返回1,才算匹配成功。

注释的位置如果使用switch的第二种语法形式,那么就要注意switch中注释的正确位置。

注释只有放在各个body中才是正确的注释,如果放在其它地方,会出现语法错误。

例如:set r "abbbcc"switch -glob $r {a {#匹配失败,不可能执行到这里puts "1"#正确的注释}a*cc { puts "2" }#放到这里,是错误的注释ab??cc {puts "3"}}我使用的是8.4.9版本,出现的错误信息还非常的人性化:extra switch pattern with no body, this may be due to a comment incorrectly placedoutside of a switch body - see the "switch" documentationwhile executing会提醒你可能是注释放错了地方,以前的版本就没有这么好了。

错误信息会让你不知所云。

循环控制TCL中使用while、for、foreach命令来实现循环控制结构。

除了这三个命令之外,tcl 程序包control还提供了do循环。

别忘了,前面的章节中,我们还自己实现了一个简单的do…while循环。

while循环while循环命令的语法格式如下:while test body其中test被当作一个表达式来求值(和expr命令一样),结果必须是一个合法的布尔值。

当test的值为True的时候,循环体body会被执行;body执行完之后,test会被再次求值,直到test为False为止。

while命令总是返回一个空的字符串。

如果body中包含continue,那么当前这一次循环迭代会被中止,然后直接计算test,根据结果判断是否继续下一次循环;如果body中包含break,那么整个while循环立刻全部中止。

前面的章节中我们介绍TCL置换原理的时候强调了,while命令的test条件必须放在华括号中,这样每次循环结束后才对test进行真正的求值。

如果不放在花括号中,就可能会出现死循环。

有些初学者会写出如下的代码:set x 100while {[expr $x>=50 && $x<=100 ]} {……}这样的代码错了吗?没有错误,但是不好。

while循环中的判断条件,我们没有必要写在expr命令中来求值,因为while命令会自动的进行expr计算。

所以如下的代码更好:while {$x>=50 && $x<=100} {……}for循环Tcl中的for循环和C中的类似,其语法如下:for start test next body其中start,next和body都是可以执行的TCL脚本;test和while中的test类似被当作一个表达式来求值,其结果作为循环是否继续的判断标准。

for循环的执行过程如下:1.首先执行start;2.计算表达式test;3.如果test的值是True,那么就执行body,然后再执行next;然后跳到第2步;4.如果test的值是False,那么就停止循环;如果在body或者next中执行了break命令,那么for循环马上中止;如果在body中执行了continue命令,那么body中剩下的命令全部跳过而继续执行next,然后再计算next,根据结果判断是否继续循环;这两个命令在for循环中的表现和C语言中的breakl以及continue类似。

一般而言,test都必须放在花括号中,这一点和while循环类似。

下面是for循环的例子:for {set x 1} {$x<=1024} {set x [expr {$x * 2}]} {puts "x is $x"}上面的代码打印出从1开始到1024中所有的2的n次方。

foreach 循环foreach提供了一种简单的在一个或者多个列表上进行迭代的方法。

它有两种形式:foreach varname list bodyforeach varlist list1 ?varlist2 list2…? body第一种语法中,只利用一个变量对列表list进行迭代,每一次循环,都顺序取一个列表元素的值赋给varname,然后执行body。

第二种语法中,可以同时对多个列表进行迭代。

在迭代的时候,可以一次取出一个列表多个元素。

实际上,第一中形式只是第二种语法的一个特例而已。

看看下面的几个例子:set x {}foreach {i j} {a b c d e f} {lappend x $j $i}#执行后,x的值为"b a d c f e";总共完成了3次迭代。

#下面的迭代中,同时针对两个列表进行迭代:set x {}foreach i {a b c} j {d e f g} {lappend x $i $j}#执行后,x的值为"a d b e c f {} g";总共完成了4的迭代。

相关文档
最新文档