TCL指令碼語言學習

2021-09-06 02:35:32 字數 4003 閱讀 8952

語言簡介

tcl是一種很通用的指令碼語言,它幾乎在所有的平台上都可以解釋執行,功能強大。是tool command language的縮寫,發音為 "tickle」。 實際上包含了兩個部分:乙個語言和乙個庫。 首先,tcl是一種簡單的指令碼語言,主要使用於發布命令給一 些互交程式如文字編輯器、偵錯程式和shell。它有乙個簡單的語法 和很強可擴充性,tcl可以建立新的過程以增強其內建命令的能力。其次,tcl是乙個庫包,可以被嵌入應用程式,tcl的庫包含了乙個分析器、用於執行內建命令的例程和可以使你擴充(定義新的 過程)的庫函式。應用程式可以產生tcl命令並執行,命令可以由使用者產生,也可以從使用者介面的乙個輸入中讀取(按鈕或選單等)。 但tcl庫收到命令後將它分解並執行內建的命令,經常會產生遞迴的呼叫。

學習動機

因為需要研究ns2無線路由協議,其中ns2的模擬使用tcl來寫的,如果tcl不搞懂的話就沒法看懂,所以還是來系統的學習一下。另外不得不抱怨一句ns2真是夠折磨人的,相當的考驗人的 耐心~~……真不知道最後能不能達到導師的要求,先厚著臉皮做吧。

環境安裝

執行的介面見下圖:

基本語法

1.命令結構:

commandname arguments。每條命令之間通過換行或者;隔開。例如:

set foo 0

set bar 1;

2.注釋:

使用#注釋,不過要注意的是下面的注釋是錯誤的:

set foo 0 #這個是注釋
因為tcl解析器總是認為一條命令應該以換行或者分號結束,其他的在同一行中都認為是引數。所以正確的應該是:

set foo 0; #這個是注釋
其實對於習慣於.net程式設計的人來說每行末尾加個;應該是理所當然的事情,所以這個對我們應該沒有什麼不習慣的。

3.資料型別:

tcl不支援.net中的形如int , double ,char等等型別,唯一支援的就是string型別。也就是說乙個變數可以在不同的時刻理解為不同的型別。

4.變數

tcl可以定義兩種型別的變數:變數和陣列。

變數:在tcl變數不需要宣告就可以直接賦值。給變數賦值的例子:

set ba 1;

set ma 「qian li feng」;#加引號的作用是為了告訴編譯器包括空格

取得變數的值可以在對應的變數名前面加$來取得,例如:      

puts $ba;  #表示列印出ba的值
陣列:陣列也不需要宣告,直接賦值,例如:

set qian(0) 1; 

set qian(1) 2;

乙個比較有意思的地方是陣列下標可以不按照順序來寫,也不一定是數字,可以是字串。例如:

set qian(123) f; 

set qian(6789) fs;

set qian(good) yes;

我們可以使用puts $qian(123);的形式來獲得陣列的內容。當然tcl陣列也支援多維陣列,宣告形式為:

set qian(1,1,1,1,1) fs; #隨便多少維
如果我們要檢視某個已經賦值的陣列的資訊,可以使用parray命令:如:     

parray qian;   #將列印出qian陣列的所有資訊

5.字串操作

string 命令基本語法如下(這裡的string1,string2可以是字串也可以是變數,option是下列選項之一)  

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的長度

例子:

string length $qian;  #將返回變數qian的長度

6.數字操作

因為tcl中只有乙個string型別的變數,所以當要運算元字進行運算的時候,tcl提供了incr和expr兩個運算元。

incr的基本用法為:

incr variable integer(variable必須為數字)
例如我要將乙個數字加3

set a 3;

incr a 3; #將a加3,如果要減3,則為 incr a –3;

預設的incr a等同於.net裡面的a++的意思,即本身自增1。

expr的基本語法為:

expr function number
expr是為了提供更加複雜的操作而設計的乙個語法,比如運算乘除法等等。在執行算術操作的時候必須將expr命令放在算術操作之前。例如:

set a 20; set b 4;

set c [expr $a/$b]; #此時的c的值為5

除此之外,expr還能夠識別一些函式及其返回值如下:

abs(x) x的絕對值

round(x) x捨入後得到的整數值

sin(x) x的正弦

…………………………………..

舉個例子:

set a [expr sin(0.3)]; #計算0.3的正弦

7.轉義

在tcl中可以使用{}將需要轉義的字串括起來。例如:

set a 5;

set b ; #此時b的值為」$a「,而不是5。

8.流控制

if 控制流

基本語法:

if   else
需要注意的是if….else,if……elseif…中的else,elseif必須要和if的後面乙個數值2

}

9.迴圈

tcl提供三種迴圈命令,分別為:for,foreach,while。此外tcl還提供兩個迴圈控制命令。注意:這個三個命令中的程式塊的開始花括號必須要和三個命令同一行。while基本語法:

while

foreach 將在一組變元中進行迴圈,並且每次都將執行他的迴圈體。基本結構:

foreach variable

這裡的variable是變數的名字,便於block中使用。舉例:

foreach element  

}

for是最常用的迴圈。其基本結構為:

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分別...