1、TCL脚本基本语法(概要)

来源:互联网 发布:阿拉曼战役知乎 编辑:程序博客网 时间:2024/04/29 03:43

TCL常用基本语法

一个TCL脚本可以包含一个或多个命令。命令之间必须用换行符或分号隔开。

第一个单词代表命令名,另外的单词则是这个命令的参数,用空格或TAB键隔开。

变量置换$。

命令置换[]

反斜杠置换\ ,例如set msg multiple\ space ,如果没有\则有报警。

双引号将各种分隔符将不作处理,对换行符及$和[]两种置换符会照常处理。

花括号中所有特殊字符成为普通字符,失去其意义。

注释符 ‘#’

$符号往后直到第一个不是字母、数字或下划线的字符之间的单词符号作为要被置换的变量的名字。

(bin) 28 % set a.1 2

2

(bin) 29 % set b $a.1

1.1

(bin) 30 % set b ${a.1}

2

数组如下:

(bin) 31 % set day(1) 1

1

(bin) 32 % set day(2) 2

2

TCL不能支持复杂的数据类型,不过扩展ITCL填补了这个缺憾。

unset命令可以删除变量。

6/58

字符串

append将文本加到一个变量的后面

incr命令把变量值加上一个整数。

TCL表达式操作数是整数或实数。0开头表示八进制,0X开头表示十六进制

支持加减乘除,移位等操作。

此外expr是TCP的一个命令,

list在TCL中表示集合,可以嵌套定义。

concat命令,把多个list合成一个list.

lindex返回list的第index个0-based元素

llength返回list的元素个数。

linsert返回一个新串,把所有的value参数值插入list的第index个元素之前

lreplace替换第first到第last个元素所有的value参数。

lrange返回list的第first到第last元素组成的串。如果last为end表示到串的最后。

lappend将value值作为一个元素附加到变量varname后面,并返回变量的新值

lsearch返回list中第一个匹配模式pattern的元素的索引,找不到匹配就返回-1.-exact,-glob,-regexp是三种匹配。-exact表示精确匹配,-glob和string match命令匹配方式相同。-regexp表示正规表达式匹配。

lsort这个命令返回把list排序后的串。

Split把string按分隔符splitChars分成一个个单词。例如split “how.are.you” .

Join是命令的逆。把所有元素合并到一个字符串中,中间以joinString分开。

字符串操作

format格式化类似sprintf函数

set msg [format "%s is %d yearsold" $name $age];

scan命令式format命令的逆,类似于sscanf函数。

regexp用于判断正规表达式exp是否全部或部分匹配字符串string,匹配返回1,否则0.

resub命令第一个参数是一个整个表达式,第二个参数是一个输入字符串,这一点和regexp命令完全一样。匹配返回1,否则返回0,不过regsub用第三个参数来替换字符串string中和正规表达式匹配的部分,第四个参数被认为是一个变量,替换后的字符串存入这个变量中。

String命令具有强大的操作字符串的功能,其中option选项多达20个。  

控制流:

         If后面的{一定要写在上一行,如果不这样TCL解释器会认为if命令在换行符处已结束,下一行会被当成新的命令,从而导致错误的结果。此外if和{之间需要有个空格,否则TCL会把if{当成一个整体,从而导致错误。

         whiletest body

 Test是一个表达式,body是一个脚本,如果表达式的值非0,就运行脚本,直到表达式为0才停止循环。

         forinit test reinit body

         参数init是一个初始化脚本,第二个参数test是一个表达式,用来决定循环什么时候中断,第三个参数reinit是一个重新初始化的脚本,第四个参数body也是脚本,代表循环体。

         Foreach命令有两种语法形式

         第一种:foreachvarName list body

         第二种:foreachvarlist1 list1 ?varlist2 list2 ..? Body

         TCL支持switch命令,支持三种匹配方式:-exact,-glob,-regexp方式

         缺省是-glob方式。-regexp是正规表达式的匹配方式。

      文件

         eval可以接收一个或多个参数,然后把所有的参数以空格隔开组合到一起成为一个脚本,然后对这个脚本进行求值。

         source命令读一个文件并把这个文件的内容作为一个脚本进行求值。

         Open命令以access方式打开文件. Open命令返回一个字符串用于表识打开的文件。TCL有三个特定的文件标识:stdin,stdout,stderr.对应标准输入、标准输出和错误通道。

         Gets读fileid标识的文件下一行,忽略换行符。

         Gets类似的命令是read,不过read不是一行为单位。

         Puts把string写到fileid中。

         Flush把缓冲区内容写到filed标识的文件中。

         Close关闭标识为filedid的文件。

         Tcl提供了seek,tell和eof等命令使用户可以非连续访问文件。

         TCL提供pwd和cd命令来管理当前工作目录。

         文件操作的第二个命令式file,file有许多选项的常用命令,可以用来进行文件操作也可以检索文件信息。

过程

Proc命令的第一个参数是你要定义的过程的名字,第二个参数是过程的参数列表,参数之间用空格隔开。

proc add {x y} {expr $x+$y}

定义过程时,可以使用return命令在任何地方返回想要的值。

TCL提供三种特殊的参数形式:

upvar命令使得用户可以在过程中对全局变量或其他过程中的局部变量进行访问。

可以理解成绑定变量。

错误异常

         异常是导致脚本被终止的事件。

         很多情况下,错误信息提供了足够的信息指出哪里以及为什么发生了错误。如果错误发生在一组深层套嵌的过程调用中,仅仅给出错误信息还不能为指出哪里发生了错误提供足够信息。为了帮助指出错误的位置,当TCL撤销程序中运行的命令时,创建了一个跟踪栈,并且把这些跟踪栈存储到全局变量errorInfo中。

         Catch命令可以俘获所有的异常,不仅是错误。Catch命令的返回值表示是那种情况的异常。

深入

         利用array命令可以查询一个数组变量中已经定义了的元素的信息。

         Info命令提供了查看TCL解释器信息的手段,有超过一打的选项。

例如info exist a

info global

         tcl命令提供了trace命令来跟踪一个或多个变量。

 

0 0
原创粉丝点击