2017-02-27 10 views
0

TCLを初めて使用し、動的値をとるTCLプロシージャを作成しようとしました。 私はn個のインターフェイスとVLANペアをprocに渡したいのですが。動的変数を使用したTCLプロシージャの作成

proc proc_data {device, intf_in, intf_out, args} { 
foreach vlan $args { 
    set inter_vlan [$device exec "show interface $intf_in $vlan"] 
    set inter_vlan [$device exec "show interface $intf_out $vlan"] 
    .... 
     } 
} 

は私が渡すことができますどのような方法があります:

{ device [interface vlan] <<<<< dynamic no of pair 
+0

値のリストを渡すだけですか?また、変数を区切るためにTclにカンマを使用しないでください。 – Jerry

答えて

1

それはあなたの引数をマップする方法によって異なりますが、キーコマンドはforeachlassignである可能性が高いです。

foreachコマンドは、ループのたびに複数の値を消費する可能性があります。ここでは簡単な例です:

proc foreachmultidemo {args} { 
    foreach {a b} $args { 
     puts "a=$a, b=$b, a+b=[expr {$a+$b}]" 
    } 
} 
foreachmultidemo 1 2 3 4 5 6 

ます。また、一度に2つのリストを反復処理することができます(あなたがしたい場合は、はい、これは多変数の形でミックス):

proc foreachdoubledemo {list1 list2} { 
    foreach a $list1 b $list2 { 
     puts "a=$a, b=$b, a+b=[expr {$a+$b}]" 
    } 
} 
foreachdoubledemo {1 2 3} {4 5 6} 

lassignコマンドを取ることができますリストを作成し、変数に分割します。ここでは簡単な例です:

proc lassigndemo {mylist} { 
    foreach pair $mylist { 
     lassign $pair a b 
     puts "a=$a, b=$b, a+b=[expr {$a+$b}]" 
    } 
} 
lassigndemo {{1 2} {3 4} {5 6}} 

私は、これらはあなたが後にしている何を作るのか、非常にわからないんだけど、おそらくミックスの中で、どちらか一方であることをバインドされています。私が探していたコードを投稿

0

おかげ@Donalフェローズ

proc data_proc {device intr vlan} { 
puts "Logged in device is: $device" 
foreach a $intr { 
    set interface [$device "show interface $a" 
    foreach b $vlan { 
    set inter_vlan [$device "show interface $a vlan $b" 
    } 
    } 
} 
data_proc device {interface1 interface2 ...} {vlan1 vlan2 ...} 
0

あなたが投稿した答えは非常に効率的ではありません。あなたが使ったロジックは、すべてのインターフェースを1つずつチェックし、各インターフェースのすべてのVLANをチェックします。

いくつかのインターフェイスですべてのVLANの代わりに特定のVLANセットをチェックする必要がある場合はどうなりますか?

関連する問題