Pada artikel ini saya akan menjelaskan mengenai bagaimana cara melakukan macam-macam kondisional pada Bash scripting. Dan karena ini adalah seri khusus shell Bash, maka tentunya tidak POSIX-compliant.
Kondisional IF
Struktur dasar
Struktur dasar kondisional if dalam Bash scripting hampir sama dengan keumuman bahasa pemrograman, yaitu seperti dibawah ini:
|
|
Kondisi yang disebutkan diatas bisa berupa ekspresi perbandingan seperti contoh berikut:
|
|
Atau, bisa berupa command tertentu seperti:
|
|
Cara kerja
Kondisional if akan menjalankan command di dalam blok jika kondisi yang diujikan memiliki exit status nol. Kedua contoh diatas ( sintaks [[ ... ]]
atau test
dan grep -q
) sebenarnya sama saja. Dalam artian bahwa sintaks [[ ... ]]
sesungguhnya adalah command biasa yang bisa dijalankan diluar blok if. Bisa dicoba sendiri pada sesi shell seperti dibawah ini:
|
|
Maka, jika variabel $var
sama dengan string xyz
, maka terminal akan mengeluarkan output “true”
|
|
Ekspresi kondisional / Conditional expression
Salah satu contoh ekspresi kondisional adalah seperti yang sudah dijelaskan sebelumnya, yaitu [[ $var == "xyz" ]]
yang itu merupakan bentuk dari operator string.
Disini saya hanya akan menjelaskan beberapa contoh ekspresi yang sering digunakan. Untuk lebih lengkapnya, bisa dibaca sendiri via command help test
.
|
|
Operator file
Operator file berfungsi untuk mencari tahu status suatu file. Apakah file tersebut ada, apakah file tersebut adalah suatu direktori, dan lain-lain.
|
|
Operator string
Digunakan untuk melakukan perbandingan suatu variabel terhadap variabel lain atau string literal. Seperti yang sudah dijelaskan pada contoh awal misalnya.
|
|
Operator aritmatik
Sesuai dengan judulnya, maka operator ini berfungsi untuk melakukan perbandingan aritmatis.
|
|
Kondisi ganda (Operator AND dan OR)
Melakukan evaluasi lebih dari satu kondisi dapat dilakukan dengan operator &&
(AND) dan operator ||
(OR). Contoh penggunaannya adalah sebagai berikut:
|
|
Tidak terbatas hanya pada perbandingan variabel, namun operator AND dan OR juga bisa digunakan untuk mengevaluasi 2 command atau lebih.
Biasanya ini digunakan untuk melakukan perintah yang memerlukan prekondisi dari perintah lain. Seperti memastikan suatu file berhasil dibuat terlebih dahulu sebelum melakukan command setelahnya.
|
|
Negasi
Untuk melakukan evaluasi yang sebaliknya, maka cukup untuk menambahkan sintaks !
sebelum memulai ekspresi atau sebelum [[ ... ]]
. Contoh:
|
|
Beda penempatan operator negasi, juga berbeda pula dampaknya. Jika negasi ditaruh sebelum ekspresi, maka tiap-tiap ekspresi yang berada di konteks yang sama (berada pada satu kurung siku [[ ... ]]
) bisa diberlakukan negasi masing-masing. Namun, jika tanda negasi ditaruh diluar seperti ! [[ ... ]]
maka negasi diberlakukan setelah seluruh ekspresi yang ada didalamnya dievaluasi.
|
|
IF berlapis/nested
Kondisional if tentu saja bisa dilakukan secara berlapis alias nested.
|
|
Bentuk IF ELSE
Kondisional IF ELSE jika ekspresi yang dievaluasi tidak terpenuhi maka ELSE akan dijalankan
|
|
bentuk IF ELSE IF
Kondisional IF ELSE IF merupakan bentuk evaluasi ekspresi yang berkelanjutan tetapi perintah-perintah yang ada di dalam kondisi tersebut yang akan dijalankan, alias tidak akan menjalankan 2 kondisi secara bersamaan.
|
|
Pada skenario diatas, jika variabel yang dievaluasi adalah variabel yang sama dan hendak mengevaluasi atas nilai-nilai tertentu, maka kondisional CASE-lah yang lebih cocok untuk digunakan. Contohnya sebagai berikut:
|
|
Bisa dilihat pada contoh diatas bahwa akan banyak pengulangan yang sebetulnya tidak perlu jika menggunakan kondisional CASE.
Kondisional CASE
Kondisional CASE digunakan untuk melakukan evaluasi terhadap suatu variabel atau output command tertentu seperti pada contoh sebelumnya. Evaluasi yang dilakukan adalah ekspresi apakah variabel tersebut bernilai sekian atau sekian.
Struktur dasar
Kondisional CASE bisa memiliki beberapa bentuk/model dan merupakan preferensi masing-masing individu, tidak ada benar/salah.
Tetapi pada dasarnya, kondisional CASE diawali dengan case VARIABEL in
kemudian diikuti dengan kondisi-kondisi. Tiap kondisi dibuka dengan PATTERN)
(perhatikan tanda tutup kurung di akhir) dan ditutup dengan tanda ;;
. Dan diakhiri dengan esac
.
Bentuk yang umum adalah seperti ini:
|
|
Ada juga yang suka menulis blok CASE seperti ini, jika command untuk tiap kondisi tidaklah panjang.
|
|
Operator OR
Satu kondisi dalam CASE bisa diberi operator OR, contoh:
|
|
Operator Wildcard *
Operator wildcard * digunakan untuk mewakili satu atau lebih karakter. Contoh:
|
|
Perlu diperhatikan bahwa penempatan kondisi CASE sangat penting. Jika suatu kondisi/pattern yang bersifat lebih umum diletakkan lebih awal daripada yang lebih khusus, maka kondisi yang lebih khusus tersebut tidak akan pernah terevaluasi. Contoh:
|
|
Semoga bermanfaat, insyaAllah.