Leoman’s blog

bi blög

Archive for the ‘Programlama’ tag

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.

 Bash |   |? 
1
2
[admin@Mikrotik] > :global deger1 "degerli"
3
[admin@Mikrotik] > :global deger2 "degersiz"
4
[admin@Mikrotik] > :if ($deger1 = $deger2) do={:put "Eslesiyor"}\
5
[admin@Mikrotik] > else={:put "Eslesmiyor"}
6

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;

 Bash |   |? 
1
2
[admin@Mikrotik] > :for i from=1 to=10 do={:put $i}
3

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;

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

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.

 Bash |   |? 
1
2
 
3
[admin@Mikrotik] > :local toplamIP [/ip address find interface="ether1"];\
4
:foreach idIP in=$toplamIP do={\
5
:local durum [/ip address get $idIP disabled];\
6
:local IPadresi [/ip address get $idIP address];\
7
:if ($durum="false") do={:put ($IPadresi . " Kapali\n")}\
8
else={:put ($IPadresi . " Acik\n")}}
9

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.

 Bash |   |? 
1
2
 
3
[admin@Mikrotik] > :global ethernetCount [:len [/interface find type=ether]]; :global $i 0;
4
[admin@Mikrotik] > :while ($i < $ethernetCount) do={\
5
:put [/interface ethernet $i name]; :set i ($i+1);}
6

 Bash |   |? 
1
2
[admin@Mikrotik] > :global i 11; 
3
[admin@Mikrotik] > :do {:put $i; :set i ($i - 1);} while=($i > 0)
4
[admin@Mikrotik] > :unset i;
5

Written by leoman

January 20th, 2009 at 8:34 am

Mikrotik betik programcılığı – DeÄŸiÅŸkenler

leave a comment

Mikrotik betik dili üzerinde iki tip değişken bulunmaktadır.

  • global – Tüm aktif kullanıcılar ve betikler tarafından eriÅŸilebilen deÄŸiÅŸken tipidir. global deyimi ile tanımlanır.
  • local – Sadece tanımlandığı blok içerisinden eriÅŸilebilen deÄŸiÅŸken tipidir, yine local deyimi ile tanımlanır.

 Bash |   |? 
1
2
[admin@Mikrotik] > :local testDegiskeni; :set testDegiskeni "Test ediyoruz"; :put $testDegiskeni
3

Aynı kod bloğu içerisinde öncelikle local bir testDegiskeni adında bir değişken oluşturduk, değerini Test ediyoruz olarak atadık, daha sonrada değişkenimizin değerini ekrana bastırdık.

Peki bu değişkeni daha birden fazla satırı ve/veya kod bloğu olan bir betik içerisinde kullanma ihtiyacımız olsa idi?

 Bash |   |? 
1
2
[admin@Mikrotik] > :global testDegiskeni
3
[admin@Mikrotik] > :set testDegiskeni "Mikrotik dunyasina hosgeldin\n"
4
[admin@Mikrotik] > :for i from=1 to=3 do={:put $testDegiskeni}
5

Bu örnekte de görülebileceği gibi testDegiskeni adında bir global değişken tanımladık ve daha sonraki kod bloklarımızdan değişkenimize ulaşarak gerekli işlemleri yaptık.

Written by leoman

January 20th, 2009 at 6:08 am

Mikrotik üzerinde betik programcılığı

leave a comment

Mikrotik bildiğiniz üzre kolay kullanımı için güzel bir görsel kullanıcı arayüzüne sahiptir.  Bu arayüz sayesinde çok kolay ayarlanabilen, takip edilebilen, kullanıcı dostu bir işletim sistmidir.

Bu kadar kolaylık arasında ya kendimize/duruma özel işlemler yapmak istersek? Ya aynı işlemi defalarca yapmak zorunda isek? Ya da bir işlemi sayısız kere belirli aralıklarla yapmak zorunda isek?

Bu kadar esnek bir sistem tabi ki de buna da imkan tanıyacaktır. Mikrotik güçlü kabuğu sayesinde tüm işlerinizi otomatik hale getirmenize ya da durumlara özel çareler üretmenize yardımcı olacaktır.  Kabuk üzerinden (Telnet/SSH/Winbox/Serial) işinize uygun bir betik yazarak dilediğiniz gibi tüm işlemlerinizi gerçekleştirebilirsiniz.

Genel anlamda kullanacağımız kabuk *nix üzerinde yer alan kabuklardan pek te farklı deÄŸildir. Bash ya da sh’ta kullanmış olduÄŸumuz “\”, “;” ,”#”,”{}”,”[]“  sınırlayıcılar pek fark olmadan yine bu kabuk üzerinde kullanılabilir.

Veri tipleri

Betik yazımı sırasında sık sık kullanacağımız değişkenler için önceden belirlenmiş tipler mevcuttur. Bunlar;

  • number – 64 bitlik Integer tipi deÄŸiÅŸken türü (iÅŸaretli +/-), aynı zamanda hexadecimal veri giriÅŸi de mümkündür.
  • boolean – doÄŸru/yanlış veri tipi, true ya da false deÄŸerlerini alabilmektedir.
  • string – karakter dizisidir. “test verisi” gibi bir deÄŸer alabilir.
  • IP – IP adresi barındırabilen veri tipidir.
  • time – tarih ve zaman tutan veri tipidir.
  • array – dizi verileri tutabilen veri tipidir.
  • nil – öntanımlı veri tipidir, deÄŸiÅŸken deÄŸer verilmediÄŸi sürece deÄŸeri nil’dir.

Ayrımlama işaretleri

  • \”       -  çift tırnak
  • \\     – ters bölü
  • \n     – yeni satır
  • \r     – satır başı
  • \t     – yatay sekme
  • \$
  • \?
  • \_     – boÅŸluk
  • \a     – zil
  • \b     – gerisilme
  • \f     – sayfa ileri
  • \v     – yatay sekme
  • \xx     – onaltılık düzende deÄŸer

Operatörler

Aritmetiksel Operatörler

  • +  toplama
  • -   çıkarna
  • /  bölme
  • *  çarpma
  • -  negatif

Karşılaştırma Operatörleri

  • < küçükse
  • > büyükse
  • <= küçük ve eÅŸitse
  • >= büyük ve eÅŸitse
  • = eÅŸitse
  • != eÅŸit deÄŸilse

Mantıksal Operatörler

  • “!” / “not”  deÄŸilse
  • “&&” / “and” ve
  • “||” / “or” veya

Bitsel Operatörler

Bitsel operatörler yanlızca number ve IP veritiplerindeki değişkenler/değerler için kullanılabilmektedir.

  • “~”  deÄŸil, bitin tersini alma
  • “&” ve (1 ve iÅŸleminde etkisiz, 0 biti ise yutan elemandır)
  • “|” veya (0 ve iÅŸleminde etkisiz, 1 biti ise yutan elemandır)
  • “^” özel veya (aynı bitler için 0, farklı bitler için 1 elde eder)
  • “<<” sola kaydırma  (belirtilen deÄŸer kadar bitleri sola kaydırır)
  • “>>” saÄŸa kaydırma (belirtilen deÄŸer kadar bitleri saÄŸa kaydırır)

Birleştirme operatörleri

  • “.” İki karakter dizisini birbirine baÄŸlar.
  • “,” Dizi elemanlarını birbiri ardına sıralar/Diziye yeni deÄŸer ekler.

Written by leoman

January 20th, 2009 at 6:05 am