Leoman’s blog

bi blög

Mikrotik betiklerinde döngüler ve koşullar

leave a comment

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.


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

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;


[admin@Mikrotik] > :for i from=1 to=10 do={:put $i}

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;


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

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.

[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")}}

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.

[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);}


[admin@Mikrotik] > :global i 11;
[admin@Mikrotik] > :do {:put $i; :set i ($i - 1);} while=($i > 0)
[admin@Mikrotik] > :unset i;

Written by leoman

January 20th, 2009 at 8:34 am

Leave a Reply