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 mengg

Apa itu Shell Script?

Shell script adalah file yang berisi kumpulan perintah terminal yang dijalankan secara berurutan. Ini seperti "program" yang ditulis menggunakan perintah-perintah terminal.

Membuat Shell Script Pertama

# 1. Buat file
touch hello.sh

# 2. Tambahkan shebang dan perintah
cat > hello.sh << 'SCRIPT'
#!/bin/bash
echo "Halo, dunia!"
echo "Sekarang tanggal: $(date)"
echo "Kamu login sebagai: $USER"
SCRIPT

# 3. Buat executable
chmod +x hello.sh

# 4. Jalankan
./hello.sh

Baris pertama #!/bin/bash disebut shebang — memberitahu sistem shell mana yang digunakan.

Variabel

#!/bin/bash

# Deklarasi variabel (TANPA spasi di sekitar =)
nama="Budi"
umur=25

# Gunakan dengan $
echo "Nama: $nama"
echo "Umur: $umur tahun"

# Command substitution
tanggal=$(date +%Y-%m-%d)
file_count=$(ls | wc -l)
echo "Tanggal: $tanggal"
echo "Jumlah file: $file_count"

# Variabel dari argumen
# ./script.sh arg1 arg2
echo "Argumen 1: $1"
echo "Argumen 2: $2"
echo "Semua argumen: $@"
echo "Jumlah argumen: $#"

Kondisional (if/else)

#!/bin/bash

# Cek apakah file ada
if [ -f "package.json" ]; then
    echo "Ini adalah project Node.js"
elif [ -f "composer.json" ]; then
    echo "Ini adalah project PHP"
else
    echo "Project tidak dikenali"
fi

# Cek apakah folder ada
if [ -d "node_modules" ]; then
    echo "Dependencies sudah terinstall"
else
    echo "Menjalankan npm install..."
    npm install
fi

# Perbandingan string
if [ "$NODE_ENV" = "production" ]; then
    echo "Mode production!"
fi

# Perbandingan angka
if [ $# -lt 1 ]; then
    echo "Usage: $0 <nama-project>"
    exit 1
fi

Operator perbandingan:

Operator Arti (angka) Operator Arti (string)
-eq Sama dengan = Sama dengan
-ne Tidak sama != Tidak sama
-lt Kurang dari -z String kosong
-gt Lebih dari -n String tidak kosong
-le Kurang atau sama
-ge Lebih atau sama

Looping

#!/bin/bash

# For loop — iterasi list
for file in *.js; do
    echo "Processing: $file"
done

# For loop — range angka
for i in {1..5}; do
    echo "Iterasi ke-$i"
done

# While loop
count=0
while [ $count -lt 5 ]; do
    echo "Count: $count"
    count=$((count + 1))
done

# Loop file dari find
find . -name "*.log" | while read -r file; do
    echo "Log file: $file"
    wc -l "$file"
done

Function

#!/bin/bash

# Definisi function
deploy() {
    local env=$1  # local variable
    echo "Deploying to $env..."
    npm run build
    echo "Deploy ke $env selesai!"
}

# Panggil function
deploy "production"
deploy "staging"

# Function dengan return value
check_node() {
    if command -v node &> /dev/null; then
        return 0  # success
    else
        return 1  # failure
    fi
}

if check_node; then
    echo "Node.js terinstall: $(node --version)"
else
    echo "Node.js belum terinstall!"
fi

Contoh Script Praktis

#!/bin/bash
# setup-project.sh — Setup project baru

PROJECT_NAME=${1:-"my-project"}

echo "=== Membuat project: $PROJECT_NAME ==="

mkdir -p "$PROJECT_NAME"/{src,tests,docs}
cd "$PROJECT_NAME" || exit 1

# Init git
git init

# Buat file dasar
echo "# $PROJECT_NAME" > README.md
echo "node_modules/" > .gitignore
echo ".env" >> .gitignore

# Init npm
npm init -y

echo "=== Project $PROJECT_NAME siap! ==="
echo "cd $PROJECT_NAME && code ."

Tips

  1. Selalu gunakan shebang (#!/bin/bash) di baris pertama
  2. Quote variabel ("$var") untuk menghindari masalah spasi
  3. Pasang preamble defensif — biasakan menambahkan set -euo pipefail di baris kedua setelah shebang. Ini menggabungkan tiga safety: berhenti saat error (-e), gagal saat variable undefined (-u), dan tangkap kegagalan di pipe (-o pipefail). Lanjutan lengkap ada di pelajaran Defensive Scripting & trap.
  4. Test di terminal dulu sebelum masukkan ke script
  5. Gunakan shellcheck untuk lint shell script — tool ini menangkap bug umum seperti quoting salah, variabel tidak di-quote, dan typo sebelum script dijalankan. Install: brew install shellcheck.