TCL脚本语言学习

TCL脚本语言学习

语言简介html

         Tcl是一种很通用的脚本语言,它几乎在全部的平台上均可以解释运行,功能强大。是tool command language的缩写,发音为 "tickle”。 实际上包含了两个部分:一个语言和一个库。 首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一 些互交程序如文本编辑器、调试器和shell。它有一个简单的语法 和很强可扩充性,Tcl能够建立新的过程以加强其内建命令的能力。其次,Tcl是一个库包,能够被嵌入应用程序,Tcl的库包含了一个分析器、用于执行内建命令的例程和可使你扩充(定义新的 过程)的库函数。应用程序能够产生Tcl命令并执行,命令能够由用户产生,也能够从用户接口的一个输入中读取(按钮或菜单等)。 但Tcl库收到命令后将它分解并执行内建的命令,常常会产生递归的调用。shell

学习动机编程

         由于须要研究NS2无线路由协议,其中ns2的模拟使用tcl来写的,若是tcl不搞懂的话就无法看懂,因此仍是来系统的学习一下。另外不得不抱怨一句ns2真是够折磨人的,至关的考验人的 耐心~~……真不知道最后能不能达到导师的要求,先厚着脸皮作吧。数组

环境安装编辑器

     到这里下载运行程序:http://www.newhua.com/soft/63285.htm,运行的界面见下图:函数

13512837

基本语法学习

1.命令结构:spa

commandName arguments。每条命令之间经过换行或者;隔开。例如:.net

1设计

2

set foo 0

set bar 1;

2.注释:

使用#注释,不过要注意的是下面的注释是错误的:

1

set foo 0 #这个是注释

由于tcl解析器老是认为一条命令应该以换行或者分号结束,其余的在同一行中都认为是参数。因此正确的应该是:

1

set foo 0; #这个是注释

其实对于习惯于.net编程的人来讲每行末尾加个;应该是理所固然的事情,因此这个对咱们应该没有什么不习惯的。

3.数据类型:

tcl不支持.net中的形如int , double ,char等等类型,惟一支持的就是string类型。也就是说一个变量能够在不一样的时刻理解为不一样的类型。

4.变量

tcl能够定义两种类型的变量:变量和数组。

变量:在tcl变量不须要声明就能够直接赋值。给变量赋值的例子:

1

2

set ba 1;

set ma “qian li feng”;#加引号的做用是为了告诉编译器包括空格

          

         取得变量的值能够在对应的变量名前面加$来取得,例如:      

1

puts $ba;  #表示打印出ba的值

 

数组:数组也不须要声明,直接赋值,例如:

1

2

set qian(0) 1;

set qian(1) 2;

         一个比较有意思的地方是数组下标能够不按照顺序来写,也不必定是数字,能够是字符串。例如:

1

2

3

set qian(123) f;

set qian(6789) fs;

set qian(good) yes;

         咱们可使用puts $qian(123);的形式来得到数组的内容。固然tcl数组也支持多维数组,声明形式为:

1

set qian(1,1,1,1,1) fs; #随便多少维

         若是咱们要查看某个已经赋值的数组的信息,可使用parray命令:如:     

1

parray qian;   #将打印出qian数组的全部信息

 5.字符串操做

string 命令基本语法以下(这里的string1,string2能够是字符串也能够是变量,option是下列选项之一)  

1

string option string1 string2;

 

option的操做选项:

  compare 按照字典的排序方式进行比较。根据string1 <,=,>string2分别返回-1,0,1

  first 返回string2中第一次出现string1的位置,若是没有出现string1则返回-1

  last 和first相反

  trim 从string1中删除开头和结尾的出如今string2中的字符

  tolower 返回string1中的全部字符被转换为小写字符后的新字符串

  toupper 返回string1中的全部字符串转换为大写后的字符串

  length 返回string1的长度

例子:

1

string length $qian;  #将返回变量qian的长度

6.数字操做

由于tcl中只有一个string类型的变量,因此当要操做数字进行运算的时候,tcl提供了incr和expr两个操做数。

 

incr的基本用法为:

incr variable integer(variable必须为数字)

  例如我要将一个数字加3

1

2

set a 3;

incr a 3; #将a加3,若是要减3,则为 incr a –3;

  默认的incr a等同于.net里面的a++的意思,即自己自增1。

 

expr的基本语法为:

1

expr function number

  expr是为了提供更加复杂的操做而设计的一个语法,好比运算乘除法等等。在执行算术操做的时候必须将expr命令放在算术操做以前。例如:

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的正弦

7.转义

在tcl中可使用{}将须要转义的字符串括起来。例如:

1

2

set a 5;

set b {$a};  #此时b的值为”$a“,而不是5。

8.流控制

if 控制流

  基本语法:

1

2

3

4

5

if { 表达式 } {

     #运算;

else {

    #其余运算;

}

  须要注意的是if….else,if……elseif…中的else,elseif必需要和if的后面一个{在同一行。

 

switch控制流:

  基本语法:

1

2

3

4

5

6

switch $x {

  

  数值1 { 操做1 ;}            

 

  数值2 { 操做2 ;}

}

9.循环

tcl提供三种循环命令,分别为:for,foreach,while。此外tcl还提供两个循环控制命令。注意:这个三个命令中的程序块的开始花括号必需要和三个命令同一行。

 

while基本语法:

  while {条件} { 程序块 }

 

foreach 将在一组变元中进行循环,而且每次都将执行他的循环体。基本结构:

  foreach variable {items} {block}

  这里的variable是变量的名字,便于block中使用。举例:

1

2

3

4

5

foreach element {0 m n b v} {

       switch $element {

             # 判断element的值

     }

}

 

for是最经常使用的循环。其基本结构为:

  for {initialization} {condition} {increment} {body}

  例如: 

1

for {set i 0} {$i < 10} {incr i} {puts $i;} #将打印出0到9

相关文章
相关标签/搜索