語言簡介
tcl是一種很通用的指令碼語言,它幾乎在所有的平台上都可以解釋執行,功能強大。是tool command language的縮寫,發音為 "tickle」。 實際上包含了兩個部分:乙個語言和乙個庫。 首先,tcl是一種簡單的指令碼語言,主要使用於發布命令給一 些互交程式如文字編輯器、偵錯程式和shell。它有乙個簡單的語法 和很強可擴充性,tcl可以建立新的過程以增強其內建命令的能力。其次,tcl是乙個庫包,可以被嵌入應用程式,tcl的庫包含了乙個分析器、用於執行內建命令的例程和可以使你擴充(定義新的 過程)的庫函式。應用程式可以產生tcl命令並執行,命令可以由使用者產生,也可以從使用者介面的乙個輸入中讀取(按鈕或選單等)。 但tcl庫收到命令後將它分解並執行內建的命令,經常會產生遞迴的呼叫。
學習動機
因為需要研究ns2無線路由協議,其中ns2的模擬使用tcl來寫的,如果tcl不搞懂的話就沒法看懂,所以還是來系統的學習一下。另外不得不抱怨一句ns2真是夠折磨人的,相當的考驗人的 耐心~~……真不知道最後能不能達到導師的要求,先厚著臉皮做吧。
環境安裝
執行的介面見下圖:
基本語法
1.命令結構:
commandname arguments。每條命令之間通過換行或者;隔開。例如:2.注釋:set foo 0
set bar 1;
使用#注釋,不過要注意的是下面的注釋是錯誤的:3.資料型別:因為tcl解析器總是認為一條命令應該以換行或者分號結束,其他的在同一行中都認為是引數。所以正確的應該是:set foo 0 #這個是注釋
其實對於習慣於.net程式設計的人來說每行末尾加個;應該是理所當然的事情,所以這個對我們應該沒有什麼不習慣的。set foo 0; #這個是注釋
tcl不支援.net中的形如int , double ,char等等型別,唯一支援的就是string型別。也就是說乙個變數可以在不同的時刻理解為不同的型別。4.變數
tcl可以定義兩種型別的變數:變數和陣列。5.字串操作變數:在tcl變數不需要宣告就可以直接賦值。給變數賦值的例子:
取得變數的值可以在對應的變數名前面加$來取得,例如:set ba 1;
set ma 「qian li feng」;#加引號的作用是為了告訴編譯器包括空格
陣列:陣列也不需要宣告,直接賦值,例如:puts $ba; #表示列印出ba的值
乙個比較有意思的地方是陣列下標可以不按照順序來寫,也不一定是數字,可以是字串。例如:set qian(0) 1;
set qian(1) 2;
我們可以使用puts $qian(123);的形式來獲得陣列的內容。當然tcl陣列也支援多維陣列,宣告形式為:set qian(123) f;
set qian(6789) fs;
set qian(good) yes;
如果我們要檢視某個已經賦值的陣列的資訊,可以使用parray命令:如:set qian(1,1,1,1,1) fs; #隨便多少維
parray qian; #將列印出qian陣列的所有資訊
string 命令基本語法如下(這裡的string1,string2可以是字串也可以是變數,option是下列選項之一)6.數字操作option的操作選項:string option string1 string2;
compare 按照字典的排序方式進行比較。根據string1 string2分別返回-1,0,1
first 返回string2中第一次出現string1的位置,如果沒有出現string1則返回-1
last 和first相反
trim 從string1中刪除開頭和結尾的出現在string2中的字元
tolower 返回string1中的所有字元被轉換為小寫字元後的新字串
toupper 返回string1中的所有字串轉換為大寫後的字串
length 返回string1的長度
例子:
string length $qian; #將返回變數qian的長度
因為tcl中只有乙個string型別的變數,所以當要運算元字進行運算的時候,tcl提供了incr和expr兩個運算元。7.轉義incr的基本用法為:
例如我要將乙個數字加3incr variable integer(variable必須為數字)
預設的incr a等同於.net裡面的a++的意思,即本身自增1。set a 3;
incr a 3; #將a加3,如果要減3,則為 incr a –3;
expr的基本語法為:
expr是為了提供更加複雜的操作而設計的乙個語法,比如運算乘除法等等。在執行算術操作的時候必須將expr命令放在算術操作之前。例如:expr function number
除此之外,expr還能夠識別一些函式及其返回值如下:set a 20; set b 4;
set c [expr $a/$b]; #此時的c的值為5
abs(x) x的絕對值
round(x) x捨入後得到的整數值
sin(x) x的正弦
…………………………………..
舉個例子:
set a [expr sin(0.3)]; #計算0.3的正弦
在tcl中可以使用{}將需要轉義的字串括起來。例如:8.流控制set a 5;
set b ; #此時b的值為」$a「,而不是5。
if 控制流9.迴圈基本語法:
if else需要注意的是if….else,if……elseif…中的else,elseif必須要和if的後面乙個數值2}
tcl提供三種迴圈命令,分別為:for,foreach,while。此外tcl還提供兩個迴圈控制命令。注意:這個三個命令中的程式塊的開始花括號必須要和三個命令同一行。while基本語法:while
foreach 將在一組變元中進行迴圈,並且每次都將執行他的迴圈體。基本結構:
foreach variable
這裡的variable是變數的名字,便於block中使用。舉例:
foreach elementfor是最常用的迴圈。其基本結構為:}
for
例如:
for #將列印出0到9
TCL指令碼語言學習
語言簡介 tcl是一種很通用的指令碼語言,它幾乎在所有的平台上都可以解釋執行,功能強大。是tool command language的縮寫,發音為 tickle 實際上包含了兩個部分 乙個語言和乙個庫。首先,tcl是一種簡單的指令碼語言,主要使用於發布命令給一 些互交程式如文字編輯器 偵錯程式和sh...
TCL指令碼語言學習(一)
編譯環境設定 1 軟體安裝 安裝activetcl 2 編寫tcl指令碼檔案 tcl是一種很通用的指令碼語言,它幾乎在所有的平台上都可以解釋執行,功能強大。是tool command language的縮寫,發音為 tickle 實際上包含了兩個部分 乙個語言和乙個庫。首先,tcl是一種簡單的指令碼...
TCL指令碼語言學習(二)
5.字串操作 string 命令基本語法如下 這裡的string1,string2可以是字串也可以是變數,option是下列選項之一 string option string1 string2 option的操作選項 compare 按照字典的排序方式進行比較。根據string1 string2分別...