【转】TCL语法简介

1,脚本构成

set a 2
set b 3
//
set a 2;set b 3

TCL脚本可以包括多个命令,命令间使用换行符或者分号分开,一个命令使用空格分开命令、变量等其他参数。

2,置换

  • 变量置换

  

set c $a+$b //c = a+b=2+3

使用美元符号$进行变量置换,上式中c=2+3而不是5,要让c=5需要使用命令置换。

  • 命令置换

  

set c [expr $a+$b]

当使用[]时,括号内第一个字符会当做命令,后续的作为命令参数,expr命令用于进行表达式求值。对求值结果进行返回并赋值给c。

  • 反斜杠\置换

\使得特殊字符失去特殊含义

set msg money\ \$3333

使用使用\,上述空格不会被当做命令间字符分割处理,$也不会当做变量置换。

  • 双引号“”与花括号{}

使用双引号“”和花括号{}也可以使得解释器将分隔符置换符等特殊字符当做普通字符。“”只是对分割符不处理,对换行符、变量置换$、命令置换依然会处理

set y "$a xxx" //y -> 2 xxx

使用花括号所有特殊字符都变成普通字符

set y {/n$x [expr 10 +100]} //y->/n$x [expr 10 +100] 

3,注释

行首的‘#’符开始表示该行为注释。‘#‘必须出现在TCL解释器期望命令的第一个字符。因此‘#‘出现在行首及‘;‘后后面内容才能当做注释。

# this is a comment
set msg "hello world!" ;#this is another comment
set msg2 "nice day!" #error,this is not a comment

4,变量

TCL变量由名字和值构成,名字和值均可以是任意字符。要注意的是‘$’进行变量置换时是值得第一个不是字母、数字、下划线的字符之间的单词符号作为被置换变量名。使用set命令来设置变量,unset 命令取消变量。

set a 2
set a.1 4
set b $a.1
set c ${a.1}
# b=2.1;c=4

TCL的数组有点向python的字典,数组下标可以是任意字符串。

set day(monday) 1
set day(tuesday) 2
set b $day(monday);#b=1

unset删除变量

unset a b day

5,表达式
TCL支持和C语言类似的运算符,和C类似的操作数,0777//八进制,0xff//16进制,8e10//8的10次方,和C语言一样,TCL也内置了很多数学函数。

6,列表list

列表是TCL重要的数据结构。list表示一堆元素的集合,元素可以是任意字符,包括list。

{}
{1 2 3 4 5}
{1 23 3 {4 5}}

1)list使用list命令生成列表,list 1 2 3 4

2)使用concat list list...合并两个或多个列表

3)lindex list index 返回list第index个元素,从0开始计算。

4)llength list 返回list的元素个数

5)linsert list index value value...返回新list,新list是把所有value插入到list第index个元素之前

6)lreplace list first last value value...返回新list,把list第first个到last个元素用value参数替换,没有value参数则表示删除。

7)lrange list first last 返回list第first到last个元素组成的串。last 为end则返回到串末

8)lappend varname value value 把每个value附加到varname后面。

9)lsearch -exact -glob -regexp list pattern 返回第一个匹配的元素索引,找不到则返回-1。-exact、-glob、-regexp是可选的3中模式匹配技术。

-exact表示精确匹配;-glob和string match命令的匹配方式相同,-regexp表示正规表达式匹配。

10)lsort options list 对list排序,通过options指定排序方式,有-ascii:缺省方式,按照ASCII字符顺序排序,-dictionary,按照字典顺序,字典顺序不考虑大小写,数字被当做整数排序。-integer,将list元素转换成整数,按照整数排序,-real,转换成浮点数排序;-increasing升序,-decreasing降序。-command cmd 按照cmd命令对元素一一比较后给出排序结果。

11)split string splitchar 按照splitchar对string进行分割,返回分割后的list

12)join list joinstring 将list元素合并到字符串,中间以joinstring分开,缺省joinstring为空格。

7,控制流

和c语言类似,支持常见的控制流,if,switch,while,for,foreach。foreach 可以对list进行很好的遍历。

if {$x>0}{
    do_something;
}elseif{$x==0} {

...
}else{
    do_anotherthing;
}
    

使用{}对语句块进行分割以及条件表达式测试,第一行最后的{必须放在上一行,否则TCL会认为if命令已经结束,而将行首的{当做命令从而导致错误。

‘if {$x>0}‘if与{间有空格。

switch options string {pattern body pattern body} //options可以指定匹配方式-exact,-glob(default),-regexp

switch $x {
a -
b {incr t1}
c {incr t2}
default {incr t3}
}

while test body

set i [expr [llength $a] -1]
while { $i>=0}{
lappend b [lindex $a $i]
incr i -1
} 

for init test reinit body

for {set i [expr [llength $a] -1]} {$i>=0} {incr i -1} {
lappend b [lindex $a $i] }

foreach varnem list body

set x {}
foreach {i j} {a b c d e f} {
lappend x $j $i
} 

和C类似,TCL提供了break,continue命令用于跳出循环。
source命令,TCL提供source命令来调用和执行其他的tcl脚本,source /home/xxx/scripts/scripts1001.tcl

8,函数定义

TCL使用过程proc来进行C类似的函数定义,使用proc可以实现一些自定义的命令,其用法和内置命令一样。

proc add {x y } {expr $x+$y}add 1 2 ;# result is 3

proc内部可以使用global声明一个全局变量,即该变量在proc体外定义,声明global后,可以在proc内部对全局变量进行访问。
应用upvar,使用upvar实现对一个变量的引用,upvar othervar myvar,一旦实现引用的绑定,对myvar的修改都将对应到othervar上去。

原文地址:https://www.cnblogs.com/houxiliang/p/8996384.html

时间: 2024-08-05 00:02:14

【转】TCL语法简介的相关文章

TCL语法简介1

1,脚本构成 set a 2 set b 3 // set a 2;set b 3 TCL脚本可以包括多个命令,命令间使用换行符或者分号分开,一个命令使用空格分开命令.变量等其他参数. 2,置换 变量置换 set c $a+$b //c = a+b=2+3 使用美元符号$进行变量置换,上式中c=2+3而不是5,要让c=5需要使用命令置换. 命令置换 set c [expr $a+$b] 当使用[]时,括号内第一个字符会当做命令,后续的作为命令参数,expr命令用于进行表达式求值.对求值结果进行返

MarkDown语法简介

Markdown 语法简介 概述 宗旨 兼容 HTML 特殊字符自动转换 区块元素 段落和换行 标题 区块引用 列表 代码区块 分隔线 区段元素 链接 强调 代码 图片 其它 反斜杠 自动链接 感谢 Markdown 免费编辑器 概述 宗旨 Markdown 的目标是实现「易读易写」. 可读性,无论如何,都是最重要的.一份使用 Markdown 格式撰写的文件应该可以直接以纯文本发布,并且看起来不会像是由许多标签或是格式指令所构成.Markdown 语法受到一些既有 text-to-HTML 格

freemarker语法简介

ftl是一种模板标记语言,用于渲染数据,输入html结构.语法简介如下: ${book.name} ${book.name?if_exists} //值是否存在 ${book.name??} //值是否存在 ${book.name?has_content} //值是否存在 ${book.name?default("xxx")} //默认值xxx ${book.name!"xxx"} //默认值xxx ${book.date?string("yyyy-mm-

Razor基础语法简介

原文:Razor基础语法简介 Razor的出现,使页面看起更加简洁,Razor的页面后缀为:.cshtmlRazor基础语法:1.代码注释:      多行注释: @*注释信息*@     单行注释: // 注释 1.代码体{...} @{ var x=100; var y=100; string str="this is string": } 在代码体中,没一行都需要用";"结束,代码区中,字母区分大小写.字符类型常量必须用""括起来,2. 由

Android系统Recovery工作原理之使用update.zip升级过程---updater-script脚本语法简介以及执行流程(转)

目前update-script脚本格式是edify,其与amend有何区别,暂不讨论,我们只分析其中主要的语法,以及脚本的流程控制. 一.update-script脚本语法简介: 我们顺着所生成的脚本来看其中主要涉及的语法. 1.assert(condition):如果condition参数的计算结果为False,则停止脚本执行,否则继续执行脚本. 2.show_progress(frac,sec):frac表示进度完成的数值,sec表示整个过程的总秒数.主要用与显示UI上的进度条. 3.for

汇编基本语法简介

转载 http://www.360doc.com/content/10/0926/12/1317564_56492037.shtml 汇编基本语法简介在 AT&T 汇编格式中,寄存器名要加上 '%' 作为前缀:而在 Intel 汇编格式中,寄存器名不需要加前缀.例如:AT&T 格式 Intel 格式 pushl %eax push eax 在 AT&T 汇编格式中,用 '$' 前缀表示一个立即操作数:而在 Intel 汇编格式中,立即数的表示不用带任何前缀.例如:AT&T

perl语法简介

Perl语法简介 1.PERL变量 1.1.Perl变量分类 1.2.Perl变量 1.2.1 Scalar变量 1.2.2 数组变量 1.2.3 标量与数组变量 1.2.4 关联数组 2.PERL运算符 2.1 算数运算符 2.2 位运算符 2.3 比较运算符 2.4 逻辑运算符 2.5 字符运算符 2.6 赋值运算符 2.7 Lvalue 2.8 表运算符 2.9 文件测试运算符 1.PERL变量 1.1.Perl变量分类 Perl变量分为标量变量,数组变量,关联数组变量3类.PERL的变量

【ABAP系列】SAP ABAP7.40新语法简介第一篇

公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP7.40新语法简介第一篇 前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 SAP的系统不断的更新 7.40已经出来很久了,一直忙着没有更新7.40新语法内容 慢慢写点新语法的相关内容 首先说一下7.40的特点及简介 1.ABAP 7.40是AS ABAP 7.31(也称为ABAP 7.

shell语法简介

一.基本语法 1.1.shell文件开头 shell文件必须以下面的行开始(必须方在文件的第一行):  #!/bin/sh  符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序.  当编辑好脚本时,如果要执行该脚本,还必须使其可执行.  要使脚本可执行: 运行chmod +x filename 这样才能用./filename 来运行 1.2 注释  在进行shell编程时,以#开头的句子表示注释,直到这一行的结束.我们真诚地建议您在程序中使用注释