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
- Selalu gunakan shebang (
#!/bin/bash) di baris pertama - Quote variabel (
"$var") untuk menghindari masalah spasi - Pasang preamble defensif — biasakan menambahkan
set -euo pipefaildi 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. - Test di terminal dulu sebelum masukkan ke script
- Gunakan
shellcheckuntuk lint shell script — tool ini menangkap bug umum seperti quoting salah, variabel tidak di-quote, dan typo sebelum script dijalankan. Install:brew install shellcheck.