Bahasa Scripting Di RouterOS Mikrotik

Bahasa scripting di RouterOS mikrotik biasanya digunakan untuk melakukan remote ataupun mengkonfigurasi perangkat mikrotik. Fungsinya hampir sama saat kita memilih menu yang ada di winbox. Namun bahasa scripting di RouterOS mikrotik dilakukan dengan menulis kode program untuk memberikan beberapa perintah menggunakan terminal GUI (Winbox, Webfig) ataupun CLI (SSH, Telnet dll).

Pada dasarnya, bahasa scripting di RouterOS mikrotik tidak jauh berbeda dengan scripting pada bahasa lainnya. Pada artikel ini, saya akan membahas dasar-dasar scripting di mikrotik. Namun hal yang perlu anda ketahui bahwa bahasa scripting bukanlah bahasa pemrograman. Perbedaan yang paling mendasar adalah kalau mikroTik scripting menjalankan kodenya secara baris perbaris (Interpreter), sedangkan bahasa pemrograman dijalankan secara keseluruhan langsung melalui compiler.

Baca juga : Compiler dan Interpreter : Pengertian, Fungsi, Perbedaan

Sebagai contoh, jika anda memiliki kode program sebanyak 100 baris, namun terjadi  eror di baris ke 50, maka bahasa scripting hanya akan error pada baris 50-terakhir, tetapi baris sebelumnya yaitu 1–49 tetap berjalan. Lain halnya dengan bahasa pemrograman ketika terjadi error di salah satu baris, maka akan langsung menyebabkan program tersebut tidak dapat dijalankan.

Struktur Bahasa Scripting Mikrotik

Bahasa scripting di RouterOS mikrotik bisa dilakukan dalam beberapa baris, dan nantinya script akan diekseskusi satu demi satu. Struktur scripting pada command line RouterOS seperti berikut :

[prefix] [path] command [uparam] [param=[value]] .. [param=[value]]

Keterangan :

  • [prefix] = “:” atau “/” karakter yang mengindikasikan bahwa command merupakan ICE (karakter yg mengindikasikan global command) atau path. Karakter ini, .bisa dibutuhkan, bisa juga tidak
  • [path] = Path yang bersifat relatif untuk menentukan menu level. Bisa dibutuhkan, bisa juga tidak
  • command = Prrintah yang tersedia pada level menu tertentu.
  • [uparam] = parameter tanpa nama, harus dispesifikasikan terlebih dahulu jika command membutuhkannya.
  • [params] = Urutan parameter yang sudah dikenal yang memiliki nilai tertentu.

Setiap akhir dari command akan diakhiri dengan tanda “;” atau dengan baris baru, dan terkadang akhir command tidak butuh keduanya.

Single command yang berada di dalam (), [] or {}  tidak membutuhkan karakter tanda akhir command. Akhir dari command ditentukan dari seluruh script

contoh :

:if ( true ) do={ :put "123" }

Jika ada command kedua di dalam sebuah command, maka harus diampit tanda “[]”.

Contoh :

:put [/ip route get [find gateway=8.8.8.8]];

Anda bisa lihat rule diatas memiliki 3 perintah :

 :put = menampilkan nilai di terminal

/ip route get  = mencari rule route

find gateway=1.1.1.1 = menentukan rule route yang memiliki parameter gateway=8.8.8.8

Membuat Komentar

Untuk membuat komentar pada bahasa scripting di RouterOS mikrotik diawali dengan tanda hashtag atau tanda“#” lalu diikuti karekter komentar. Jika tanda “#” berada didalam variabel string, maka dianggap sebagai string dan bukan sebagai komentar,

Contoh penguunaan :

# Ini adalah komentar
:global a; # Ini juga komentar
:global myStr "Di-reject # ini bukan komentar, tapi string"

Spasi (Daerah Kosong)

Sama seperti bahasa pemrograman pada umumnya, penggunaan spasi ini kadang dibutuhkan ataupun tidak boleh digunakan. Hal ini tergantung seperti apa syntax spasi ini di impementasikan.

Adapun spasi tidak boleh digunakan pada syntax ‘<parameter>=’,  ‘from=’ ,’to=’ , ‘step=’,  ‘in=’,  ‘do=’ , ‘else=’.

Contoh penguunaan :

#contoh yang salah :
:for i from = 100 to = 200 do = { :put $i }
#contoh yang benar :
:for i from=100 to=200 do={ :put $i }
:for i from= 100 to= 200 do={ :put $i }
#contoh yang salah
/ip route add gateway = 1.1.1.1
#contoh yang benar
/ip route add gateway=1.1.1.1

Membuat Script Beda Baris

Script beda Baris perintah bisa digabungkan dengan menambahkan karakter backslash “/” di ujung. Hal ini digunakan jika scriptnya terlalu panjang sehingga ingin dibuat beberapa baris. Namun pada bahasa scripting di RouterOS mikrotik ini tanda backflash ini tidak dapat digunakan pada komentar.

Contoh penguunaan :

:if ($a = true \
 and $b=false) do={ :put “$a $b”; }
:if ($a = true \ # bad comment
 and $b=false) do={ :put “$a $b”; }
# comment \
 continued – invalid (syntax error)

Variabel

Berdasarkan cakupan nya, variabel pada bahasa scripting di RouterOS mikrotik ini terbagi menjadi 2 jenis yaitu:local dan :global.

Globar mencakup seluruh script dan dapat dikenali dalam beberapa baris perintah, sedangkan local, hanya akan dikenali dalam satu struktur perintah. Selain itu, variabel global tidak bisa didefinisaikan didalam local scope.

Contoh penguunaan :

[admin@MikroTik] > :local myVar a;
[admin@MikroTik] > :put $myVar
syntax error (line 1 column 7)

Perintah Kondisi

Merupakan perintah yang dijalankan pada kondisi tertentu yang dapat dibuat dengan peintah “If” dengan struktur perintah :

:if(<condition>) do={<commands>} else={<commands>} <expression>

Contoh Penggunaan :

{
 :local myBool true;
 :if ($myBool = false) do={ :put "value is false" } else={ :put "value is true" }
}

Perintah Perulangan

CommandSyntaxKeterangan
do..while:do { <commands> } while=( <conditions> ); :while ( <conditions> ) do={ <commands> };Menjalankan perintah hingga menemukan kondisi tertentu
for:for <var> from=<int> to=<int> step=<int> do={ <commands> }Menjalankan perintah sesuai jumlah perulangan yang ditentukan.
foreach:foreach <var> in=<array> do={ <commands> };Menjalankan perintah pada setiap element yang ada didalam daftar perintah.

Contoh Penggunaan:

Do While :

{:global i 10; :do {:put $i; :set i ($i - 1);} while (($i < 11) && ($i > 0))};

For :

:for i from=1 to=100 step=37 &nbsp;do={:put ($i)}

Foreach :

:foreach i in=[/interface find type=ether ] do={:put ("+--" . [/interface get $i name])};

Perintah Lainnya

Selain perintah kondisi dan perulangan, ada banyak perintah lainnya yang sering terlihat di bahasa scripting di RouterOS mikrotik, diantaranya :

CommandSyntaxKeteranganContoh
/ Kembali ke root menu. 
.. Kembali ke satu menu level. 
? Menampilkan perintah yang tersedia. 
global:global <var> [<value>]Mendefinisikan variable global.:global myVar “something”; :put $myVar;
local:local <var> [<value>]Mendefinisikan variable local.{ :local myLocalVar “I am local”; :put $myVar; }
beep:beep <freq> <length>Membuat bunyi beep. 
delay:delay <time>Berhenti selama waktu yang ditentukan.:delay 5s;
put:put <expression>Menampilkan argumen pada console.:put “ini  objek”;
len:len <expression>Menampilkan panjang string atau jumlah elemen array.:put [:len “length=8”];
typeof:typeof <var>Menampilkan tipe data variable.:put [:typeof 4];
pick:pick <var> <start>[<end>]Mengambil nilai substring atau elemen array, jika tidak ada informasi berapa panjang range yang akan diambil, maka hanya akan diambil 1 saja.:put [:pick “abcde” 1 3]
log:log <topic> <message>Menulis pesan ke dalam log, dengan topics yang tersedia adalah “debug, error, info and warning”.:log info “Hello from script”;
time:time <expression>Menentukan interval waktu dalam menjalankan perintah.:put [:time {:for i from=1 to=10 do={ :delay 100ms }}];
set:set <var> [<value>]Memberikan nilai pada suatu variable.:global a; :set a true;
find:find <arg> <arg> <start>Menemukan nilai berdasarkan kriteria string atau array.:put [:find “abc” “a” -1];
environment:environment print <start>Mencetak informasi variable yang diketahui.:global myVar true; :environment print;
terminal Perintah terminal. 
error:error <output>Menampilkan error pada console dan berhenti menjalankan script. 
parse:parse <expression>Menyimpan perintah pada sebuah variable, bisa dijadikan sebagai fungsi.:global myFunc [:parse “:put hello!”];$myFunc;
resolve:resolve <arg>Menampilkan ip address dari sebuah DNS:put [:resolve “www.mikrotik.com”];
toarray:toarray <var>Mengubah variable ke array:global list [:toarray “data1, data2”]; :put $list;
tobool:tobool <var>Mengubah variable ke boolean 
toid:toid <var>Mengubah variable ke internal ID 
toip:toip <var>Mengubah variable ke IP address:put [:toip “192.1”];
toip6:toip6 <var>Mengubah variable ke IPv6 address 
tonum:tonum <var>Mengubah variable ke integer 
tostr:tostr <var>Mengubah variable ke string 
totime:totime <var>Mengubah variable ke time 

Penggunaan Operator Pada Scripting Mikrotik

Bahasa scripting di RouterOS mikrotik juga support untuk melakukan beberapa operator seperti :

  • Operator Aritmatika
  • Operator Pembanding
  • Operator Logika
  • Operator Penggabungan
  • Operator Lainnya

Mari kita bahas satu persatu …

Operator Aritmatika

Operator yang hanya dapat dilakukan dengan tipe data integer (bilangan bulat).

OperatorDeskripsiContoh
“+”Menjumlahkan masing-masing bilangan:put (3+5);  
“-“Mengurangi masing-masing bilangan:put (8-5);  
“*”Perkalian masing-masing bilangan:put (3*5);  
“/”Membagi nilai nilai kiri dengan nilai kanan:put (10/2);  
“/”Pembagian habis:put ((10)/2);  
“%”Sisa hasil pembagian:put (10%2);  

Pada tabel diatas terdapat simbol “/” yang berfungsi untuk “Pembagian habis”, maksudnya adalah ketika nilai operan kiri setelah dibagi terdapat koma (float) lalu nilai dibelakang koma tersebut akan dihilangkan. Misalnya ((10)/2) adalah 5.5 akan menjadi 5.

Contoh pengunaan :

bahasa scripting di RouterOS mikrotik

Seperti yang terlihat pada gmabar diatas, Bahasa scripting di RouterOS mikrotik tidak dapat menghasilkan angka float sehingga tidak akan menghasilkan nilai output apapun di terminal.

Operator Pembanding

Merupakan operator yang merupakan tipe data boolean bernilai “true” dan “false”. Tipe data boolean biasanya digunakan untuk percabangan kode program,  karena nilai yang digunakan pada tipe ini digunakan dalam mengambil keputusan saat ada suatu kejadian tertentu.

OperatorDeskripsiContoh
“<“Bernilai True: Nilai kiri lebih kecil dari nilai kanan:put (2 < 3);
 Bernilai False: Nilai kiri tidak lebih kecil dari nilai kanan:put (4 < 3);
“>”Bernilai True: Nilai kiri lebih besar dari nilai kanan:put (4 > 3);
 Bernilai False: Nilai kiri tidak lebih besar dari nilai kanan:put (2 > 3);
“=”Bernilai True: Antara nilai kanan dan kiri sama:put (1 = 1);
 Bernilai False: Antara nilai kanan dan kiri tidak sama:put (1 = 2);
“<=”Bernilai True: Nilai kiri lebih kecil atau sama dengan nilai kanan:put (3 <= 3);
 Bernilai False: Nilai kiri tidak kecil besar atau sama dengan nilai kanan:put (4 <= 3);
“>=”Bernilai True: Nilai kiri lebih besar atau sama dengan nilai kanan:put (5 >= 4);
 Bernilai False: Nilai kiri tidak lebih besar atau sama dengan nilai kanan:put (2 >= 4);
“!=”Bernilai True: Antara nilai kanan dan kiri tidak sama:put (2 != 1);
 Bernilai False: Antara nilai kanan dan kiri sama:put (1 != 1);

Contoh Penggunaan :

Operator Logika

OperatorKeteranganContoh
“!” , “not”logical NOT:put (!true);
“&&” , “and”logical AND:put (true&&true)
“||” , “or”logical OR:put (true||false);
“in” :put (1.1.1.1/24 in 1.0.0.0/7);

Berikut penjelasan mengenai keempat operator pada tabel diatas:

  • ! atau not, akan membalikkan definisi dari nilai boolean, misalnya True menjadi False lalu False menjadi True.
  • && atau and, akan menghasilkan nilai True jika diantara kedua operand itu sama-sama bernilai True, namun jika pada salah satu saja nilai operand bernilai False pasti akan menghasilkan nilai False pula.
  • || atau or, akan menghasilkan nilai True jika diantara kedua operand itu ada yang bernilai True, namun jika keduanya bernilai False maka akan menghasilkan nilai False pula.
  • in, akan menghasilkan nilai True jika nilai operand kiri berada pada kumpulan nilai di kanan.

Operator Penggabungan

Merupakan operator yang biasanya digunakan ketika terjadinya penggabungan variabel.

OperatorDeskripsiContoh
“.”Menggabungkan beberapa tipe data yang sama ataupun beda:put (“Praktek” . “Otodidak”)
“,”Menggabungkan array dengan tipe data lain ataupun array dengan array:put ({1;2;3}, 4);

Contoh penggunaan :

bahasa scripting di RouterOS mikrotik

Operator Lainnya

Selain operator aritmatika, pembanding, logika, dan penggabungan, masih ada beberapa operator lainnya yang sering terlihat di bahasa scripting di RouterOS mikrotik, diantaranya :

OperatorDeskripsiPerintah
“[]”Penggabungan perintah hanya dapat berisi 1 perintah didalamnya:put [ :len “my test string”; ];
“()”Pengelompokkan operator:put ( “Hasilnya adalah ” . (1+2));
“$”Memanggil objek, fungsi dan sejenisnya:global a 3; :put $a;
“~”Karakter awalan sebelum melakukan regular expression/ip route print where gateway~”^[0-5 \\.]*105\$”
“->”Mengambil elemen dari array berdasarkan key atau index:global aaa {a=1;b=2}
:put ($aaa->”a”)
:put ($aaa->”b”)

Berikut penjelasan singkat mengenai kelima operator pada tabel diatas:

  • [],merupakan operator yang dapat dibuat saat menaruh perintah mikrotik didalam perintah yang lain. Seperti contoh ditabel, perintah :len berada didalam [] setelah perintah :put.
  • (),Di perlukan saat ingin membuat kumpulan operasi logika, aritmatika, logika, bitwise dan penggabungan.
  • $, simbol yang digunsksn saat anda melakukan operasi dengan variabel. Contoh, kita membuat variabel dengan label ‘a’ dan nilainya 3, lalu terdapat perintah lagi setelahnya yaitu :put $a . Artinya kita memanggil variabel ‘a’ atau lebih tepatnya nilai 3 itu sendiri.
  • ~, sebelum memulai regexp, pastikan anda menambahkan simbol ini pada awal regexp tersebut.
  • ->, digunakan untuk memanggil elemen array dengan sintax var->“key”.

Contoh Penggunaan :

Begitulah pembahasan mengenai bahasa scripting di RouterOS mikrotik. Walaupun sebenarnya masih banyak hal yang belum dijelaskan, tapi saya rasa materi ini cukup bagi kita untuk pemula yang baru belajar mengenai pemrograman dan Mikrotik. Semoga tulisan ini bermanfaat bagi kita semua. Terima kasih ..

Tinggalkan Balasan

Scroll to Top