Shell Scripts Dasar — Terminal

Apa itu Shell Script? Shell script adalah file yang berisi kumpulan perintah terminal yang dijalankan secara berurutan. Ini seperti "program" yang ditulis…

Shell script adalah file teks berisi perintah terminal yang dijalankan berurutan dari atas ke bawah. Mirip resep masakan: langkahnya ditulis sekali, lalu tiap kali mau masak kamu tinggal ikuti, dengan bahan yang boleh beda (hari ini 2 porsi, besok 4). Di script, "bahan" itu namanya argumen: teks yang kamu ketik setelah nama script waktu menjalankannya.

🧪 Tebakan cepat: di script kamu menulis nama = $1, pakai spasi di sekitar =. Apa yang terjadi waktu script-nya jalan? Tebak dulu, jawabannya ada di bagian "Variabel dan argumen".

Script pertamamu: sapa.sh

#!/bin/bash
# sapa.sh: menyapa nama dari argumen pertama
nama=$1

if [ -z "$nama" ]; then
  echo "Nama belum diisi. Pakai: ./sapa.sh NAMA"
  exit 1
fi

for i in 1 2 3; do
  echo "Sapaan ke-$i untuk $nama"
done

Simpan sebagai sapa.sh, beri izin eksekusi, lalu jalankan:

$ chmod +x sapa.sh
$ ./sapa.sh Budi
Sapaan ke-1 untuk Budi
Sapaan ke-2 untuk Budi
Sapaan ke-3 untuk Budi

Variabel dan argumen

Argumen dipisah spasi. Mau nama dua kata jadi satu argumen? Bungkus dengan tanda kutip:

$ ./sapa.sh "Budi Santoso"
Sapaan ke-1 untuk Budi Santoso
Sapaan ke-2 untuk Budi Santoso
Sapaan ke-3 untuk Budi Santoso
$ ./sapa.sh Budi Santoso
Sapaan ke-1 untuk Budi
Sapaan ke-2 untuk Budi
Sapaan ke-3 untuk Budi

Tanpa kutip, Budi jadi $1 dan Santoso jadi $2, yang gak dipakai script ini.

Sekarang tulis nama = $1. Bash membacanya sebagai perintah bernama nama dengan argumen = dan Budi, padahal perintah itu gak ada:

$ ./sapa.sh Budi
./sapa.sh: line 3: nama: command not found
Nama belum diisi. Pakai: ./sapa.sh NAMA

Variabel nama gak pernah terisi, jadi if di bawahnya mengira namanya kosong. Itu jawaban tebakannya.

if: cek dulu sebelum jalan

Tes lain yang sering dipakai:

Tes Benar kalau
-z "$a" / -n "$a" teksnya kosong / gak kosong
"$a" = "$b" / "$a" != "$b" dua teks sama / beda
$x -eq 3, -ne, -lt, -gt, -le, -ge angka sama, beda, kurang dari, lebih dari, kurang atau sama, lebih atau sama
-f file.txt / -d folder file / folder itu ada

for: ulangi untuk tiap item

for i in 1 2 3; do ... done mengambil daftar setelah in, lalu menjalankan bagian antara do dan done sekali untuk tiap item. Tiap putaran, i berisi item itu: 1, lalu 2, lalu 3. Tiga item, tiga putaran, jadi echo di dalamnya mencetak tiga baris. Tambah item 4, keluar empat baris. Daftarnya bisa apa saja: for f in *.txt mengulang untuk tiap file .txt.

$?: berhasil atau gagal

Tiap perintah selesai dengan exit code, angka yang bilang dia berhasil atau gagal. $? menyimpan exit code perintah terakhir:

$ ./sapa.sh
Nama belum diisi. Pakai: ./sapa.sh NAMA
$ echo $?
1
Exit code Artinya
0 berhasil
1 gagal, misalnya exit 1 di script kita
126 file-nya ada tapi gak boleh dijalankan (lupa chmod +x)
127 perintahnya gak ketemu

Script yang selesai tanpa exit memakai exit code perintah terakhirnya, di sini echo, jadi 0. Baca $? langsung setelah perintahnya, karena perintah berikutnya menimpanya.

⚠️ Jebakan yang sering ketemu

TL;DR: Shell script adalah file berisi perintah yang jalan dari atas ke bawah. Baris pertama #!/bin/bash (shebang) memberi tahu sistem interpreter mana yang menjalankannya. Beri izin dengan chmod +x sapa.sh, jalankan dengan ./sapa.sh Budi (atau bash sapa.sh Budi). Variabel ditulis tanpa spasi (nama=$1), dibaca dengan "$nama", dan $1 adalah argumen pertama. if [ -z "$nama" ]; then ... fi mengecek dulu, exit 1 berhenti dengan kode gagal. for i in 1 2 3; do ... done berjalan sekali per item, jadi tiga item = tiga baris. $? berisi exit code perintah terakhir: 0 berhasil, selain 0 gagal.

Yang akan kamu pelajari