2014-01-29 31 views
-1

我想在GNS3的Cisco路由器上運行tcl腳本;tcl在GNS3腳本....錯誤#參數:應該是「foreach varList list?varList list ...?command」

SanJose1(tcl)#foreach address { 
+>192.168.1.1 
+>192.168.1.2 
+>172.16.224.5 
+>172.16.224.6 
+>192.168.72.1 
+>172.16.224.2 
+>172.16.224.1 
+>10.2.1.1 
+>10.2.2.1 
+>} { ping $address } 

當我這樣做,沒有任何反應,沒有ping,沒有錯誤,它只是返回到路由器提示。 我是否錯誤地運行代碼?如果這是正確的,那麼我可以看看問題與GNS3

謝謝!

回答

0

foreach,正如你在你的問題中寫的那樣,看起來是正確的。 (如果還有一個參數,你會從問題標題中得到消息,但是你的代碼樣本不應該生成這個消息。)你調用的ping更有可能不寫任何可見的東西,而是隻產生結果作爲一個字符串。這在Tcl代碼中很常見。我希望這樣的事情工作,假設我的診斷是正確的:

foreach address { 
    192.168.1.1 
    192.168.1.2 
    172.16.224.5 
    172.16.224.6 
    192.168.72.1 
    172.16.224.2 
    172.16.224.1 
    10.2.1.1 
    10.2.2.1 
} { 
    puts [ping $address] 
} 

我省略了提示,並添加縮進和清晰度幾個換行符。如果ping確實是一個外部命令,則改爲使用exec ping $address(對於依賴未知命令處理將外部命令帶入代碼的情況,特別是在腳本模式下禁用它時,這被認爲是不正確的形式)。使用外部命令,您可能還需要傳遞-c選項與一些以限制用於將相當少的請求的數量,或許:

puts [exec ping -c 5 $address] 

請注意,組由Tcl解釋器所支持的命令可以改變完全 (按設計),並且文檔中列出的命令實際上只是預先提供的標準庫。當Tcl嵌入到像路由器這樣的環境中時,很可能事情已經發生了一些變化。 (這並不像路由器供應商很難這麼做)。這意味着命令中出人意料的差異肯定會發生,並且您應該檢查您擁有的文檔,並繼續進行一點思考,而不是盲目地信任我寫了。

+0

唐納,謝謝!看起來你是對的,添加'puts'命令使ping結果顯示出來。我對編碼非常陌生(非常),所以我不完全理解爲什麼,或者你提到的一切,但我會盡力去做。現在,你肯定幫助我的網絡研究。對此,我真的非常感激!搶 – bordeltabernacle