Soal 1Apa yang diuji [ -f config.txt ]?
Shell Script - Percabangan Bersyarat
Periksa file, string, dan angka dengan [ -f config.txt ], [ -z "$name" ], dan [ "$count" -lt 5 ], buat percabangan dengan if / elif / else, dan arahkan banyak pola dengan case — tulis dan jalankan tiap script, divisualkan di terminal browser.
Bercabang dengan membandingkan nilai — perbandingan string dan angka
Di shell script kamu mengubah apa yang dijalankan dengan memeriksa apakah string cocok atau angka lebih besar.
Untuk pemeriksaan ini kamu memakai perintah test, atau [ ... ], yang melakukan hal yang sama.
[ dan ] butuh spasi tepat di dalamnya, jadi kamu menulis [ "$count" -lt 5 ].
Pemeriksaan yang benar mengembalikan exit code 0, dan yang salah mengembalikan 1.
Bandingkan string dengan = (sama) dan != (tidak sama), dan periksa kosong dengan -z (kosong) atau -n (tidak kosong).
Bandingkan angka dengan -eq (sama), -ne (tidak sama), -lt (lebih kecil), dan -gt (lebih besar), dan perhatikan bahwa string dan angka memakai operator yang berbeda.
Bungkus variabel dalam tanda kutip ganda seperti [ -z "$name" ] — dengan begitu sintaksnya tetap valid bahkan saat nilainya kosong.
count=3
mode="dev"
[ "$count" -lt 5 ] && echo small # 3 lebih kecil dari 5, jadi small
[ "$count" -gt 0 ] && echo positive # lebih besar dari 0, jadi positive
[ "$mode" = "prod" ] || echo other # bukan prod, jadi other
[ -z "$mode" ] || echo has-mode # tidak kosong, jadi has-mode
[ ... ] mengembalikan exit code 0 saat benar dan 1 saat salah; if menjalankan then saat benar dan else saat salah.| Syntax | Arti | Example |
|---|---|---|
[ "$a" = "$b" ] | benar jika string a dan b sama | [ "$mode" = "prod" ] |
[ "$a" != "$b" ] | benar jika string a dan b berbeda | [ "$mode" != "dev" ] |
[ -z "$v" ] | benar jika variabel v kosong | [ -z "$name" ] && echo empty |
[ -n "$v" ] | benar jika variabel v tidak kosong | [ -n "$name" ] && echo set |
[ "$a" -eq N ] | benar jika angka a sama dengan N | [ "$count" -eq 0 ] |
[ "$a" -ne N ] | benar jika angka a bukan N | [ "$count" -ne 0 ] |
[ "$a" -lt N ] | benar jika angka a lebih kecil dari N | [ "$count" -lt 10 ] |
[ "$a" -gt N ] | benar jika angka a lebih besar dari N | [ "$count" -gt 0 ] |
Memeriksa file dan folder — -f / -d
Di sebuah script kamu sering memeriksa apakah file konfigurasi ada atau folder output sudah siap sebelum melanjutkan.
Uji file dengan -f (file biasa ada) dan folder dengan -d (sebuah direktori ada).
Saat kamu hanya peduli bahwa sesuatu ada tanpa memandang jenisnya, pakai -e, dan untuk memeriksa bahwa isinya tidak kosong, pakai -s.
Kamu menulis pemeriksaan ini dengan [ ... ] yang sama seperti untuk string dan angka, memberikan path seperti [ -f config.txt ].
Mereka mengembalikan exit code 0 saat benar dan 1 saat salah, jadi dikombinasikan dengan if atau && / || kamu bisa menulis inisialisasi pakai jika ada, buat jika tidak ada.
touch report.txt # buat bahannya
[ -f report.txt ] && echo exists # filenya ada, jadi exists
[ -d report.txt ] || echo notdir # bukan direktori, jadi notdir
mkdir logs # buat foldernya
[ -d logs ] && echo hasdir # direktorinya ada, jadi hasdir
-f menguji file biasa, -d direktori, dan -e keberadaan jenis apa pun. Path yang sama bisa memberi hasil berbeda tergantung apa yang kamu tanyakan.| Syntax | Arti | Example |
|---|---|---|
[ -f f ] | benar jika f ada sebagai file biasa | [ -f config.txt ] && echo found |
[ -d d ] | benar jika d ada sebagai direktori | [ -d logs ] && echo dir |
[ -e p ] | benar jika p ada, jenis apa pun | [ -e data ] && echo there |
[ -s f ] | benar jika f ada dan tidak kosong | [ -s log.txt ] && echo nonempty |
Membagi alur — if / elif / else
if menjalankan blok then hanya saat kondisinya benar.
Untuk mencoba beberapa kondisi secara berurutan pakai elif, untuk kasus saat tak ada yang cocok tambahkan else, dan tutup dengan fi.
Pisahkan bagian-bagiannya dengan titik koma seperti if condition; then action; fi, atau bagi ke beberapa baris.
count=3
if [ "$count" -eq 0 ]; then
echo "none"
elif [ "$count" -lt 5 ]; then
echo "few ($count)"
else
echo "many ($count)"
fi # mencetak few (3)
if, ia mencoba tiap kondisi dan menjalankan hanya cabang pertama yang menjadi benar. Jika tak ada yang benar, ia menuju else.| Syntax | Arti | Example |
|---|---|---|
if cond; then … fi | jalankan saat kondisi benar | if [ -f f ]; then echo ok; fi |
then | mulai badan saat benar | if [ -f f ]; then echo ok; fi |
elif cond; then … | coba berikutnya saat yang sebelumnya salah | elif [ "$n" -lt 5 ]; then … |
else … | jalankan saat tak ada yang benar | else echo other; fi |
fi | tutup if | if …; then …; fi |
Mengarahkan banyak pola — case
Saat kamu mencocokkan satu nilai terhadap banyak kandidat, case lebih mudah dibaca.
Ia berbentuk case value in pattern) action ;; esac, di mana kamu mengakhiri tiap pola dengan ;; dan menangkap kasus tanpa kecocokan dengan *).
Ini membuat maksud percabangannya lebih jelas daripada menumpuk banyak tingkat if.
action="start"
case "$action" in
start) echo "starting service" ;;
stop) echo "stopping service" ;;
*) echo "unknown action: $action" ;;
esac # mencetak starting service
case mencocokkan nilai terhadap pola dari atas, menjalankan hanya cabang pertama yang cocok, dan menutup dengan esac. *) adalah kasus tanpa kecocokan.| Syntax | Arti | Example |
|---|---|---|
case x in pat) … ;; esac | arahkan sebuah nilai ke beberapa pola | case "$1" in start) … ;; esac |
pat) | sebuah pola yang dicocokkan dengan nilai | start) echo go ;; |
;; | akhir tiap aksi case | start) echo go ;; |
*) | kasus tanpa kecocokan | *) echo other ;; |
esac | tutup case | case x in …; esac |
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2Keyword mana yang mencoba kondisi lain saat yang sebelumnya salah?
Soal 3Simbol mana yang menandai akhir aksi tiap pola dalam case?