語言簡介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,運行的界面見下圖:函數
基本語法學習
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