Recraftory

Variabel dan Kontrol Alur

Variabel, kondisi, dan perulangan di Bash

Variabel

Deklarasi dan Assignment

nama="Alice"
umur=25

# Tanpa spasi di sekitar =
# Salah: nama = "Alice"

Mengakses Variabel

echo $nama
echo ${nama}     # Lebih aman, mendukung interpolation
echo "${nama}us"  # Interpolation dengan suffix

Variabel Readonly dan Local

readonly PI=3.14      # Tidak bisa diubah
local var="lokal"     # Hanya dalam fungsi

Input dari User

read -p "Masukkan nama: " nama
echo "Halo, $nama"

read -s -p "Masukkan password: " pass  # -s: silent (tidak tampil)
echo

Arithmetic

a=5
b=3

# Cara 1: let
let hasil=a+b
echo $hasil

# Cara 2: $(( ))
echo $((a + b))
echo $((a * b))
echo $((a / b))     # Integer division
echo $((a % b))     # Modulo

Kondisi (if/else)

Test Command

# Cara 1: [ ] (test built-in)
if [ "$nama" = "Alice" ]; then
  echo "Alice"
fi

# Cara 2: [[ ]] (lebih powerful, Bash-specific)
if [[ "$nama" == "Alice" ]]; then
  echo "Alice"
fi

String Comparison

[ "$a" = "$b" ]      # Sama
[ "$a" != "$b" ]     # Tidak sama
[ -z "$a" ]          # Kosong (zero length)
[ -n "$a" ]          # Tidak kosong
[ "$a" ]             # Sama dengan -n

File Test

[ -e file.txt ]      # File ada (exists)
[ -f file.txt ]      # File regular
[ -d dir ]           # Direktori
[ -r file.txt ]      # Readable
[ -w file.txt ]      # Writable
[ -x file.txt ]      # Executable
[ -s file.txt ]      # Non-zero size
[ file1 -nt file2 ]  # file1 lebih baru dari file2

Numerik Comparison

[ $a -eq $b ]        # Equal
[ $a -ne $b ]        # Not equal
[ $a -lt $b ]        # Less than
[ $a -le $b ]        # Less than or equal
[ $a -gt $b ]        # Greater than
[ $a -ge $b ]        # Greater than or equal

Contoh If-Else

#!/bin/bash

if [ -f "$1" ]; then
  echo "File $1 ditemukan"
  echo "Ukuran: $(stat -f%z "$1" 2>/dev/null || stat -c%s "$1") bytes"
elif [ -d "$1" ]; then
  echo "$1 adalah direktori"
else
  echo "$1 tidak ditemukan"
fi

Case Statement

#!/bin/bash

case $1 in
  start)
    echo "Starting service..."
    ;;
  stop)
    echo "Stopping service..."
    ;;
  restart)
    echo "Restarting service..."
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
    ;;
esac

Perulangan

For Loop

# Iterasi list
for file in *.txt; do
  echo "Processing: $file"
done

# Iterasi range
for i in {1..5}; do
  echo "Iterasi $i"
done

# C-style for
for ((i=0; i<5; i++)); do
  echo "Index $i"
done

# Iterasi array
fruits=("apple" "banana" "cherry")
for fruit in "${fruits[@]}"; do
  echo "$fruit"
done

While Loop

#!/bin/bash

counter=0
while [ $counter -lt 5 ]; do
  echo "Counter: $counter"
  ((counter++))
done

# Membaca file baris per baris
while IFS= read -r line; do
  echo "$line"
done < file.txt

Until Loop

counter=0
until [ $counter -ge 5 ]; do
  echo "Counter: $counter"
  ((counter++))
done

Break dan Continue

for i in {1..10}; do
  [ $i -eq 3 ] && continue   # Skip iterasi 3
  [ $i -eq 7 ] && break      # Berhenti saat i = 7
  echo "$i"
done

Best Practice

  • Selalu quote variabel: "$var" bukan $var
  • Gunakan [[ ]] untuk string comparison di Bash
  • Gunakan $(( )) untuk arithmetic
  • Hindari backticks `cmd`, gunakan $(cmd)