Bash scripting merupakan keterampilan fundamental yang wajib dikuasai setiap pengguna Linux. Dengan bash script, Anda dapat mengotomatisasi task berulang, meningkatkan produktivitas, dan menghemat waktu berjam-jam setiap minggu. Artikel ini akan membahas dari dasar hingga teknik advanced bash scripting.
1. Pengenalan Bash Script dan Struktur Dasar
Bash (Bourne Again Shell) adalah shell default di sebagian besar distribusi Linux. Script bash adalah file teks yang berisi kumpulan command yang dapat dieksekusi.
Membuat Script Pertama Anda
#!/bin/bash
# Ini adalah komentar
echo "Hello, World!"
echo "Tanggal hari ini: $(date)"
Save file sebagai hello.sh dan jalankan:
chmod +x hello.sh
./hello.sh
Shebang (#!/bin/bash) adalah baris pertama yang memberitahu sistem interpreter mana yang akan digunakan.
Best Practices Struktur Script
#!/bin/bashAuthor: Nama Anda
Created: 2026-02-03
Description: Script untuk backup otomatis
Version: 1.0
set -euo pipefail # Exit on error, undefined vars, pipe failures
Variabel
BACKUP_DIR="/backup" LOG_FILE="/var/log/backup.log"
Fungsi
log_message() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE" }
Main script
main() { log_message "Memulai proses backup..."
Logic utama di sini
log_message "Backup selesai!"}
Jalankan main function
main "$@"
2. Variabel dan Tipe Data dalam Bash
Bash mendukung beberapa tipe variabel yang penting untuk dipahami.
Deklarasi dan Penggunaan Variabel
#!/bin/bashVariabel string
NAMA="Linux User" EMAIL="[email protected]"
Variabel angka
USIA=25 PI=3.14
Mengakses variabel dengan $
echo "Nama: $NAMA" echo "Email: ${EMAIL}"
Variabel environment
export DATABASE_URL="mysql://localhost:3306/mydb"
Command substitution
CURRENT_DIR=$(pwd) DATE_NOW=
dateecho "Direktori saat ini: $CURRENT_DIR" echo "Waktu sekarang: $DATE_NOW"Array dalam Bash
#!/bin/bashArray satu dimensi
FRUITS=("Apel" "Jeruk" "Mangga" "Pisang") echo "Buah pertama: ${FRUITS[0]}" echo "Semua buah: ${FRUITS[@]}" echo "Jumlah buah: ${#FRUITS[@]}"
Looping array
for fruit in "${FRUITS[@]}"; do echo "Buah: $fruit" done
Array asosiatif (Bash 4.0+)
declare -A USER_INFO USER_INFO[name]="Budi" USER_INFO[email]="[email protected]" USER_INFO[age]=30
echo "Nama: ${USER_INFO[name]}"
3. Struktur Kontrol: Kondisi dan Looping
Kontrol alur program sangat penting untuk scripting yang kompleks.
Kondisional dengan if-else
#!/bin/bashFILE="/etc/passwd"
Cek file exists
if [ -f "$FILE" ]; then echo "File $FILE ditemukan" else echo "File $FILE tidak ditemukan" fi
Multiple conditions
USER_COUNT=$(who | wc -l) if [ "$USER_COUNT" -eq 0 ]; then echo "Tidak ada user login" elif [ "$USER_COUNT" -eq 1 ]; then echo "1 user sedang login" else echo "$USER_COUNT user sedang login" fi
Test conditions dengan [[ ]] (modern syntax)
if [[ "$USER_COUNT" -gt 0 && "$USER_COUNT" -lt 10 ]]; then echo "User count dalam range normal" fi
Operator Perbandingan
# String comparison if [ "$A" = "$B" ] # Equal if [ "$A" != "$B" ] # Not equal if [ -z "$A" ] # String kosong if [ -n "$A" ] # String tidak kosongNumeric comparison
if [ "$A" -eq "$B" ] # Equal if [ "$A" -ne "$B" ] # Not equal if [ "$A" -gt "$B" ] # Greater than if [ "$A" -lt "$B" ] # Less than if [ "$A" -ge "$B" ] # Greater or equal if [ "$A" -le "$B" ] # Less or equal
File tests
if [ -e "$FILE" ] # File exists if [ -f "$FILE" ] # Regular file if [ -d "$FILE" ] # Directory if [ -r "$FILE" ] # Readable if [ -w "$FILE" ] # Writable if [ -x "$FILE" ] # Executable if [ -s "$FILE" ] # File not empty
Looping dengan for
#!/bin/bashFor loop dengan range
for i in {1..5}; do echo "Iterasi ke-$i" done
For loop dengan step
for i in {0..10..2}; do echo "Nomor genap: $i" done
For loop files
for file in *.txt; do echo "Processing: $file" wc -l "$file" done
C-style for loop
for ((i=0; i<10; i++)); do echo "Counter: $i" done
While dan Until Loops
#!/bin/bashWhile loop
COUNTER=0 while [ $COUNTER -lt 5 ]; do echo "Counter: $COUNTER" ((COUNTER++)) done
Read file line by line
while IFS= read -r line; do echo "Line: $line" done < "input.txt"
Until loop (berjalan sampai kondisi true)
COUNT=10 until [ $COUNT -eq 0 ]; do echo "Countdown: $COUNT" ((COUNT--)) done
4. Fungsi dan Modularisasi Script
Membuat fungsi memungkinkan reuse code dan struktur yang lebih baik.
Membuat Fungsi
#!/bin/bashFungsi sederhana
say_hello() { echo "Hello, $1!" }
Fungsi dengan return value
get_disk_usage() { local path="${1:-/}" local usage=$(df -h "$path" | tail -1 | awk '{print $5}' | tr -d '%') echo "$usage" }
Fungsi dengan multiple parameters
backup_directory() { local src="$1" local dest="$2" local compression="${3:-gzip}"
if [ ! -d "$src" ]; then echo "Error: Source directory tidak ditemukan" >&2 return 1 fi local timestamp=$(date +%Y%m%d_%H%M%S) local backup_name="backup_${timestamp}.tar.${compression}" tar -czf "${dest}/${backup_name}" -C "$src" . echo "Backup tersimpan: ${dest}/${backup_name}"}
Penggunaan
say_hello "Budi"
USAGE=$(get_disk_usage "/home")
echo "Disk usage: ${USAGE}%"
backup_directory "/var/www" "/backup" "gz"Source File Eksternal
#!/bin/bashLoad konfigurasi dari file eksternal
source "config.sh"
atau
. "config.sh"
Load library fungsi
source "lib/utils.sh"
Gunakan fungsi dari library
check_root log_info "Script dimulai"
Kesimpulan
Bash scripting adalah skill yang sangat powerful untuk automasi task di Linux. Dengan menguasai variabel, kondisi, looping, dan fungsi, Anda dapat membuat script yang robust dan maintainable.
Tips untuk Pemula:
1. Selalu gunakanset -euo pipefailuntuk error handling
2. Gunakan double quotes untuk variabel:"$VAR"
3. Tambahkan komentar yang jelas
4. Test script secara bertahap sebelum production
5. Gunakanshellcheckuntuk static analysisMulailah dengan task sederhana seperti backup file atau monitoring system, kemudian tingkatkan kompleksitas seiring dengan pengalaman Anda.
Ditulis oleh
Hendra Wijaya