2013-07-23 118 views
-1

我是Linux(Ubuntu 12.10)的初學者。我想創建一個批處理文件來控制我的TCL文件,並且我希望我的TCL運行多次。如何編寫批處理文件來執行TCL文件

例如,我想該批處理文件做以下事情:

for(i=1;i<100;i++){ 
    sudo ns test.tcl $i 
} 

我希望我的TCL文件,以接受參數($ I),這樣我可以在TCL文件中使用的參數。

有誰能告訴我該怎麼辦?或給我一個方向?

在此先感謝。

ps。我在我的TCL文件中寫了循環,但失敗了。我的代碼是這樣的:

for(i=1;i<100;i++){ 

    set ns [new Simulator] 
    .... 
    ....(my NS code) 
    .... 
    $ns run 

} 

它只運行$ i == 1,所以我想在tcl腳本之外編寫循環。

PS2。嗨,大家好,我很抱歉沒有表達清楚。我確實遵循了TCL語法。我真正的代碼如下:

for {set i 1} {$i < 100} {incr i} { 
    set ns [new Simulator] 
    ... 
    ... 
    ... 
    $ns run 
} 

我重新安排我的代碼下面的解決了這個問題:

set ns [new Simulator] 
for {set i 1} {$i < 100} {incr i} { 
    ... 
    ... 
    ... 
} 
$ns run 

現在運行的99倍。我不知道爲什麼,雖然:P

謝謝你們:)反正

+1

問:爲什麼你需要一個單獨的(bash?)腳本?爲什麼不在TCL中完成整個事情(這本身就是一個非常好的腳本語言)? – paulsm4

+0

我試圖在tcl文件中寫入循環,但只運行一次(當$ i == 1時),並且它沒有運行$ i == 2〜99。 – DartKouth

+1

99次問題是一個典型的「fencepost錯誤」;如果你從0進行100次迭代,使用'for {set i 0} {$ i <100} {incr i} ...',如果你從1開始,使用'for {set i 1} {$我<= 100} {incr i} ...'。 **注意不同的比較運算符!** –

回答

0

嗯,你確定你寫的Tcl?這不是Tcl的語法。你可能要找的是:

for {set i 1} {$i < 100} {incr i} { 
    set ns [new Simulator] 
    .... 
    ....(my NS code) 
    .... 
    $ns run 
} 

你在任何地方都使用大括號。我可以考慮使用括號的唯一方法是用於數組,但我不認爲我知道Tcl的深度足以確定這一點,並且您的啓動條件,測試和下一個命令都在自己的大括號中,並且incr i相當於i++

現在,new不是Tcl中的內置函數。你有沒有名爲new的地方?如果你不這樣做,那麼你會得到錯誤。

0

A Tcl script非常簡單,它由許多命令組成,每個命令都包含一個命令名,後跟一些參數。即使是控制結構也是命令。 for命令需要4個參數:啓動腳本,測試表達式,下一個腳本和正文腳本。像所有其他命令參數(和命令名稱)一樣,您可以以任何您想要的方式引用for的參數,甚至可以爲其中一些參數使用變量和其他替換,但通常在發送到命令,讓你用括號:

for {set i 1} {$i < 100} {incr i} { 
    # ... 
} 
0

我注意到的第一件事是表達

for(i=1;i<100;i++){ 

這個循環只運行99次,你想要什麼,除了錯誤的語法這可能不是。其他人建議正確for循環,所以請繼續。如果你仍然認爲Tcl的for圈太複雜了,我可以建議的替代:

package require Tclx 

loop i 0 100 { 
    # i will run from 0 to 99 
} 

這種方法唯一的缺點是你必須在Tclx包拉,但如果你的腳本已經使用Tclx,爲什麼不?

相關問題