DIPERBARUI: 20 Oktober 2020

Pembahasan Mendasar MikroTik Scripting

Beberapa pengetahuan dasar mengenai MikroTik Scripting jika kita ingin melakukan otomasi dengan MikroTik RouterOS.

Do Exploit
10 min readOct 17, 2020
Background By Pixabay & Font is Montserrat

MikroTik Scripting sudah lama rilis, namun masih banyak yang belum memiliki kemauan untuk melakukan otomasi dengan bahasa scripting tersebut. Entah mungkin tidak relevan untuk melakukan otomasi dengannya pada masa sekarang karena ada bahasa lain yang lebih unggul darinya, atau kurangnya dokumentasi yang dapat memenuhi kebutuhan mereka.

Saya asumsikan yaitu kurangnya dokumentasi, sebenarnya sudah sangat banyak pembahasan MikroTik Scripting ini, sayangnya adalah berbahasa inggris sehingga mungkin saja menurunkan minat mereka untuk melakukan scripting dengan bahasa ini. Dengan hadirnya pembahasan mendasar ini saya harap dapat membantu kita semuanya.

Ingat! MikroTik Scripting adalah bahasa Scripting bukan bahasa pemrograman. Perbedaan mencoloknya adalah, kalau MikroTik Scripting menjalankan kodenya baris perbaris (Interpreter), tetapi bahasa pemrograman dijalankan secara keseluruhan langsung melalui compiler.

Lalu bedanya dimana?

Anggaplah kamu memiliki kodingan sebanyak 109 baris, dan ada error yang terjadi di baris ke 68, maka bahasa scripting hanya akan error pada baris 68-terakhir, tetapi baris sebelumnya yaitu 1–67 tetap berjalan dengan mulus. Berbeda dengan bahasa pemrograman ketika terjadi error di salah satu baris saja, langsung menyebabkan program tersebut tidak dapat dijalankan.

MikroTik Scripting bisa dijalankan berdasarkan event, maksudnya paan tuh? Jadi misalnya script berjalan otomatis ketika ada klien yang meminta DHCP, interface mati atau nyala, dan masih banyak lainnya. Seperti dibawah inilah contoh opsinya.

Bukan hanya itu, kita bisa mengintegrasikannya dengan fitur scheduler atau penjadwal, misalnya 1 menit sekali, 1 jam sekali bahkan pada jam-jam dan hari-hari tertentu.

Operator

Pada bagian ini jangan ambil pusing dulu, pahami pelan-pelan karena saya yakin di bagian ini mungkin kita akan sulit memahami apa yang saya coba sampaikan, tapi pelan-pelan pasti paham. Santui aja! 😄

A. Operator Aritmatika 👈
B. Operator Pembanding 👈
C. Operator Logika 👈
D. Operator Penggabungan 👈
E. Operator Lainnya 👈
F. Operator Bitwise (Belum mengerti)

A. Operator Aritmatika

MikroTik Arithmetic Operators Table
Tabel Operator Aritmatika

Operasi ini hanya bisa dilakukan dengan tipe data integer. Tipe data integer adalah tipe data yang terdiri dari angka bulat (tidak mengandung nilai pecahan atau nilai desimal). Nilai ini bisa berbentuk angka positif maupun negatif, contohnya 1, 2, 6, -44, 20000, atau 128730123.

Pasti kalian bingung simbol “/” yang kegunaannya untuk “Pembagian habis”, itu maksudnya adalah ketika nilai operan kiri setelah dibagi terdapat koma (float). Maka akan dihilangkan nilai dibelakang koma tersebut, misalnya (11)/5 adalah 5.5 menjadi 5. Cara menggunakannya pun ada perbedaan dengan biasanya, nilai operan kiri harus disertai dalam kurung (<nilai_kiri>).

Walaupun begitu sebenarnya MikroTik Scripting tidak bisa menghasilkan angka float, jadi ketika kita melakukan operasi aritmatika dan menghasilkan nilai koma (float), itu tidak akan menghasilkan output apapun pada terminal.

Silahkan buka terminal di winbox kalian untuk mencoba perintah-perintah operasi matematika pada tabel, kalian bisa menggabungkan setiap operator-operator tersebut. Contohnya:

B. Operator Pembanding

MikroTik Relational Operators Table
Tabel Operator Pembanding

Apa itu True (Benar) dan False (Salah)?

Teknisnya itu adalah tipe data boolean. Tipe data boolean banyak digunakan untuk percabangan kode program, atau untuk memutuskan apa yang mesti dijalankan ketika sebuah kondisi terjadi. Singkatnya, jika salah (False) kamu lakukan hal ini, jika benar(True) kamu lakukan hal ini.

Buka lagi terminal di winbox kalian, lihatlah contoh penggunaannya lihat pada gambar dibawah.

C. Operator Logika

MikroTik Logical Operators Table
Tabel Operator Logika

Perbandingan disini dilakukan antar tipe data boolean, pada paragraf sebelumnya telah dijelaskan apa itu tipe data boolean?. Berikut penjelasan singkat mengenai keempat operator 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.

Lihat lah pada baris perintah terakhir, terdapat gabungan operasi logika, aritmatika dan pembanding. Mari kita telaah!

  • 1 * 5 > 5 menghasilkan nilai False karena 5 (1 * 5) itu tidak lebih dari 5 melainkan nilai keduanya itu sama.
  • 1 + 10 = 10 menghasilkan nilai False pula karena 1 + 10 ini tidak memberikan hasil 10 melainkan nilainya 11.
  • 6 / 3 = 3 tetap sama juga yaitu False karena hasil dari 6 / 3 adalah 2 dan bukan 3.

Dari ketiga hasil boolean operasi diatas pasti kalian telah mengetahui hasilnya tanpa melihat gambar dibawah pun. False and False menghasilkan False, lalu hasil dari operasi pertama itu dilanjutkan dengan operasi OR, maka False or False hasilnya juga False. Selesai!

D. Operator Penggabungan

MikroTik Concatenation Operators Table
Tabel Operator Penggabungan

Ini biasanya digunakan ketika adanya penggabungan variabel. Silahkan coba perintah-perintah tersebut kedalam terminal winbox kalian.

E. Operator Lainnya

MikroTik Other Operators Table
Tabel Operator Lainnya

Ini merupakan bagian yang harus kita ketahui paling dasar, karena pasti saat Scripting nanti akan selalu ketemu dengan simbol-simbol diatas itu. Berikut penjelasannya:

  • [], itu merupakan operator yang bisa kita buat saat menaruh perintah mikrotik didalam perintah yang lain. Seperti contoh ditabel, perintah :len berada didalam [] setelah perintah :put.
  • (), ini akan dibutuhkan ketika kita membuat kumpulan operasi logika, aritmatika, logika, bitwise dan penggabungan. Misalnya setelah perintah :put kamu akan memulai beberapa operasi seperti :put ((4 ≤ 5) and (10 = 10)).
  • $, simbol ini sangat penting saat kita melakukan operasi dengan variabel. Seperti contoh ditabel, kita membuat variabel dengan label ‘a’ dan nilainya 5, lalu terdapat perintah lagi setelahnya yaitu :put $a . Artinya kita memanggil variabel ‘a’ atau tepatnya nilai 5 tersebut.
  • ~, sebelum memulai regexp, pastikan kalian menambahkan ~ pada awal regexp tersebut. Referensi tentang regexp MikroTik Scripting silahkan klik link dibawah.
  • ->, jika kalian pernah bermain dengan pemrograman python, itu sama saja saat kalian memanggil elemen dari array dengan cara var[key/id]. Namun di MikroTik Scripting cara pemanggilannya sedikit berbeda yaitu syntaxnya, var->“key”.

Variabel

A. Jenis-jenis variabel

Eiitts tenang! Pada bagian ini lumayan mudah kok, jangan pergi dulu yaa 😞. Variabel pada MikroTik Scripting dibagi menjadi 2 yaitu Global dan Local. Perbedaannya apa sih? Jangkauannya. Jadi variabel Global bisa diakses dari file script dimana saja, berbeda dengan variabel Local yang hanya bisa diakses oleh 1 file script itu sendiri. Sebentar lagi kalian akan paham, saya mau kasih tau dulu cara penggunaan kedua perintah tersebut. Berikut syntaxnya:

:local nama_variabel isinya
:global nama_variabel isinya

Simpan lah baris-baris perintah dibawah ini kedalam /system script. Lalu simpan dengan nama Script 1, coba jalankan menggunakan terminal winbox dengan perintah system script run “Script 1”.

:local kata "siapasih?";
:put $kata;

Sekarang mari kita coba langsung mengaksesnya dari terminal winbox apakah bisa? :put $kata; Tentu saja tidak bisa karena variabel tersebut hanya bisa diakses melalui file Script 1.

Selanjutnya buatlah lagi script dengan nama Script 2, lalu isi baris kodenya yang dibawah ini. Perintah untuk menjalankannya sama seperti “Script 1", namun kali ini namanya “Script 2”.

:global huruf "abcde";
:put $huruf;

Pasti hasil outputnya hampir serupa seperti dengan variabel lokal tadi, namun sekarang mari kita coba akses dari terminal winbox langsung apakah bisa?. Lihatlah gambar dibawah!

Berbeda dengan variabel $huruf yang dibuat dengan perintah :global, bisa langsung diakses terminal winbox tanpa melalui Script 2. Sedikit informasi untuk kalian, ada perintah yang perlu dicoba lagi dan ini penting!

:set nama_variabel_yang_ada isinya_yang_baru

Perintah :set bertujuan untuk mengubah nilai dari variabel yang sudah dibuat sebelumnya. Cobalah baris perintah dibawah ini, masukkan saja kedalam /system script.

:local qtyRumah 10
:local qtyRumahDia 5
:set $qtyRumah ($qtyRumah + $qtyRumahDia)
:put $qtyRumah

Pasti outputnya adalah 15 bukan 10, kenapa bisa begitu? Kita membuat perintah :set untuk mengubah isi nilai dari variabel $qtyRumah dengan operasi aritmatika yaitu ($qtyRumah + $qtyRumahDia), sama saja seperti (10 + 5).

B. Hal-hal yang harus diperhatikan saat membuat variabel

  1. Perintah :set tidak tepat
# Salah
:set $myVar "bisaga?"
:put $myVar
# Benar
:local $myVar
:set $myVar "bisakan?"
:put $myVar

Mari kita lihat mengapa baris perintah yang pertama itu bisa salah? Karena variabel myVar tidak dibuat terlebih dahulu. Seharusnya kita membuat dulu variabelnya dengan perintah :local atau :global, baru kita bisa gunakan perintah :set.

2. Nama variabel tidak sesuai ketentuan

# Benar
:local myVar;
# Salah
:local my-var;
# Benar
:global "my-var";
:put "$my-var";

Ketentuan pasti yang harus diingat adalah variabel yang valid yaitu hanya huruf dan digit angka. Namun kita tetap bisa menggunakan karakter lainnya seperti -~’)”( dan lain-lain, tetapi harus didalam tanda kutip 2 (“”). Seperti baris ketiga itu!

3. Nama variabel itu sensitif penulisan huruf (Case Sensitive)

:local myVar "hello"# Salah
:put $myVAr
# Benar
:put $myVar

Artinya MikroTik Scripting sangat memperhatikan huruf kecil dan huruf besar, maka dari itu kita harus hati-hati dalam penulisan variabel. Contohnya baris kedua itu yang salah, kenapa bisa salah? Karena perintah tersebut seolah-olah mencoba memanggil variabel $myVar tetapi dia salah melakukan penulisan menjadi $myVAr. Sehingga mengakibatkan error pada Script tersebut.

4. Tidak memberikan isi atau value pada perintah :set

# Salah
:global myVar "myValue"
:set myVar;
# Benar
:global myVar "myValue"
:set myVar "myApa?";

Selalu perhatikan ketentuan penulisan perintah yang telah diberikan, pastikan perintah :set tersebut harus ada valuenya. Jangan sampai lupa, karena itu bisa mengakibatkan error.

5. Nama variabel yang melanggar

# Salah
:local type "ether1";
/interface print where name=$type;
# Benar
:local customname "ether1";
/interface print where name=$customname;

Pastikan nama variabel yang dibuat tidak sama dengan parameter, perintah dan serupanya yang ada pada RouterOS MikroTik. Misalnya seperti diatas itu, kita mencoba membuat variabel dengan nama type, padahal variabel tersebut sudah menjadi salah satu perintah di RouterOS Mikrotik, tentu saja langsung mengakibatkan error.

Perintah

MikroTik RouterOS Commands Table
Tabel Perintah MikroTik RouterOS

Akhirnya tiba juga pada bagian perintah-perintah yang ada di RouterOS MikroTik, saya rasa informasi pada tabel diatas sudah cukup menjelaskan. Tapi tenang aja, saya tetap menyediakan penjelasan yang lebih lengkap berbasis programnya langsung, silahkan klik link disini.

Perintah Perulangan

MikroTik Looping Commands Table
Perintah Perulangan

Ayo kita bahas perbedaan 3 tipe perulangan diatas yang terdiri dari while..do, for..loop, foreach.

1. while..do

Ada 2 cara penggunaan perintah ini, yang warna oren itu parameter do nya berada pada bagian awal sebelum parameter while, kalau warna kuning parameter do nya berada setelah parameter while.

Jadi while..do akan melakukan perulangan berdasarkan kondisi yang terdapat pada parameter while.

:local i 0
while (i < 99) do {
:put $i
:set $i ($i + 1)
};
Output while..do

Mari kita bahas, jadi mengapa outputnya menampilkan angka 0 sampai 99, apa yang membuat dia melakukan itu? Bisa kalian lihat pada programnya, didalam parameter while ada kondisi operator pembanding yaitu i < 99.

Variabel i nilai awalnya adalah 0. Lalu didalam parameter do, variabel i tersebut ditambah +1 dengan perintah :set $i ($i + 1) . Jadi program tersebut akan melakukan perulangan sampai variabel i itu nilainya telah 99 atau lebih dari pada 99.

2. for..loop
3. foreach

Perintah Kondisi if

MikroTik If Condition Commands Table
Tabel Perintah Kondisi if

Saya menyediakan penjelasan tentang kondisi if ini berbasis programnya langsung, silahkan klik link disini.

Pesan dan Saran

Mempelajari MikroTik Scripting itu layaknya belajar bahasa pemrograman yang lain juga, tidak bisa langsung membuat program scripting yang besar tanpa pemahaman mendasar. Saya menyarankan kalian mengambil kelas pemrograman python dulu agar dapat lebih mudah ketika migrasi kedalam bahasa MikroTik Scripting.

Ingin mempelajari salah satu program scripting yang sedang? Kalian bisa cek artikel saya sebelumnya mengenai Prefix Dinamis DHCP dengan MikroTik. Itu adalah karya ilmiah yang tim saya lombakan pada Olimpiade Jaringan MikroTik 2020 dan berhasil mendapatkan gelar juara 4.

Referensi

--

--

Do Exploit

I share stories about what I've learned in the past and now. Let's connect to Instagram! @do.exploit