Recraftory

Pengenalan Shell

Dasar-dasar shell dan environment di sistem Unix-like

Apa itu Shell

  • Program yang menerjemahkan perintah pengguna ke instruksi sistem
  • Antarmuka antara user dan kernel sistem operasi
  • Shell populer: Bash, Zsh, Fish, sh

Shebang

  • Baris pertama script yang menentukan interpreter
  • Wajib ada di setiap executable script
#!/bin/bash
#!/bin/sh
#!/usr/bin/env bash

Membuat Script Executable

# Buat file script
cat > hello.sh << 'EOF'
#!/bin/bash
echo "Hello, World!"
EOF

# Beri izin execute
chmod +x hello.sh

# Jalankan
./hello.sh

Menjalankan Script

# Cara 1: execute langsung (memerlukan shebang dan permission)
./script.sh

# Cara 2: lewat interpreter
bash script.sh
sh script.sh

# Cara 3: source (berjalan di shell saat ini, membagikan environment)
source script.sh
. script.sh

Environment Variable Penting

$HOME       # Direktori home user
$PATH       # Daftar direktori untuk mencari executable
$SHELL      # Path shell yang sedang digunakan
$PWD        # Current working directory
$USER       # Nama user
$HOSTNAME   # Nama host

Special Variables

$0          # Nama script
$1, $2, ... # Argumen posisi
$#          # Jumlah argumen
$@          # Semua argumen (array)
$*          # Semua argumen (string)
$?          # Exit code perintah terakhir
$$          # PID dari shell saat ini

Exit Code

  • 0: Sukses
  • 1-255: Error (non-zero = error)
  • Gunakan exit untuk mengakhiri script dengan code tertentu
#!/bin/bash

if [ -f "$1" ]; then
  echo "File ditemukan"
  exit 0
else
  echo "File tidak ditemukan"
  exit 1
fi

Debugging Script

# Debug mode: tampilkan setiap perintah sebelum dijalankan
bash -x script.sh

# Atau tambahkan di script
set -x    # Aktifkan debug
set +x    # Matikan debug

# Fail fast: berhenti jika ada error
set -e
set -u    # Error jika variable undefined
set -o pipefail  # Pipe yang gagal mengembalikan error

Shell Option Lengkap

#!/bin/bash
set -euo pipefail
IFS=$'\n\t'
  • set -e: Exit jika perintah gagal
  • set -u: Error jika variabel tidak terdefinisi
  • set -o pipefail: Pipeline gagal jika salah satu perintah gagal
  • IFS: Internal field separator

Man Page dan Help

man bash          # Manual lengkap bash
help [            # Bantuan built-in command [
bash --help       # Ringkasan opsi bash