Belli bir öğe dizisi için bir özelliği belli koşullara göre ayarlamamız gerekiyorsa bunu winbox üzerinden defalarca tıklayarak yapmak bir çözüm olabileceği gibi aynı işi bir betik aracılığı ile de yapmak mümkün olacaktır.

Kabuk üzerinde koşul dizilimi şu şekildedir.

[sourcecode language="bash"]
[admin@Mikrotik] > :global deger1 “degerli”
[admin@Mikrotik] > :global deger2 “degersiz”
[admin@Mikrotik] > :if ($deger1 = $deger2) do={:put “Eslesiyor”}\
[admin@Mikrotik] > else={:put “Eslesmiyor”}
[/sourcecode]

Bu şekilde şartlara göre seçimimizi yapabilir ve işlemlerimizi gerçekleştirebiliriz.

Döngüler; belirtmiş olduğumuz durum sağlanıncaya kadar işlem tekrarıdır.
Kabuk içerisindeki söz dizimi ise şu şekildedir;

[sourcecode language="bash"]
[admin@Mikrotik] > :for i from=1 to=10 do={:put $i}
[/sourcecode]

ile 1′den 10′a kadar sayıları ekrana bastırabiliriz.

Daha reel bir uygulama yapacak olursak kuyruk listemizde ekli olan tüm kuralların maksimum download ve upload’ını 1Mb ile limitlendirelim;

[sourcecode language="bash"]
[admin@Mikrotik] > :local queueLen [ :len [ /queue simple find ]]; \
:for i from=0 to=$queueLen do={ /queue simple set $i max-limit=1000000/1000000}
[/sourcecode]

Bu örnekte öncelikle :len ile tüm kuyrukta yer alan kuralların sayısı aldık. Bu değeri daha sonra kullanabilmek için lokal bir değişken olan queueLen’e atadık. Bir sonraki komut dizesinde ise tüm kuyruk boyunca max-limit değerini 1Mb olarak atamış olduk.

Yine diğer programlama dillerinden aşina olduğumuz diziler üzerinde çalışabilmeyi mümkün kılan foreach döngüsünü de kabuk üzerinde kullanabilmekteyiz.

[sourcecode language="bash"]

[admin@Mikrotik] > :local toplamIP [/ip address find interface="ether1"];\
:foreach idIP in=$toplamIP do={\
:local durum [/ip address get $idIP disabled];\
:local IPadresi [/ip address get $idIP address];\
:if ($durum=”false”) do={:put ($IPadresi . ” Kapali\n”)}\
else={:put ($IPadresi . ” Acik\n”)}}
[/sourcecode]

Burdaki örnekle beraber ether1 üzerindeki IP adreslerinin Kapalı ya da Açık olması durumuna dair bir listesi alınabilir.

Sadece belli sayıdaki işlemler için değil belirli bir koşula göre işleyebilecek bir döngümüz de var. Bu döngümüz do..while ya da while…do döngüsü. Bu döngüye ait söz dizilimi de şu şekildedir.

[sourcecode language="bash"]

[admin@Mikrotik] > :global ethernetCount [:len [/interface find type=ether]]; :global $i 0;
[admin@Mikrotik] > :while ($i < $ethernetCount) do={\
:put [/interface ethernet $i name]; :set i ($i+1);}
[/sourcecode]

[sourcecode language="bash"]
[admin@Mikrotik] > :global i 11;
[admin@Mikrotik] > :do {:put $i; :set i ($i – 1);} while=($i > 0)
[admin@Mikrotik] > :unset i;
[/sourcecode]

Leave a Reply