Panduan Menulis Bash Script untuk Pemula

 


Panduan Pemula Menulis Bash Script: Syntax Dasar dan Best Practices


Hai, pernah nggak kamu merasa kesal karena harus menjalankan urutan perintah yang sama berulang-ulang setiap hari? Atau mungkin kamu punya task rutin yang membutuhkan beberapa langkah dan sering lupa urutannya? Atau ingin melakukan backup otomatis tapi nggak tahu harus mulai dari mana?


Kalau iya, saatnya kamu belajar bash scripting. Ini adalah skill superpower yang akan mengubah kamu dari user biasa menjadi power user. Bayangkan bisa membuat "asisten virtual" yang melakukan tugas-tugas membosankan untuk kamu, tanpa salah dan tanpa keluhan!



Apa Itu Bash Script dan Kenapa Harus Belajar?


Bash script adalah file teks yang berisi serangkaian perintah bash yang dieksekusi secara berurutan. Ini seperti membuat resep memasak untuk komputer - kamu tulis langkah-langkahnya, komputer yang menjalankan.


Alasan belajar bash script:


· Automation: Otomatiskan tugas repetitif

· Consistency: Hasil yang konsisten setiap waktu

· Time Saving: Hemat waktu untuk task rutin

· Error Reduction: Minimalkan human error

· Productivity: Tingkatkan produktivitas secara signifikan


Membuat Bash Script Pertama: "Hello World"


Mari mulai dengan script sederhana. Buat file baru:


```bash

nano hello.sh

```


Isi dengan:


```bash

#!/bin/bash

# Ini adalah komentar

echo "Hello World!"

echo "Hari ini adalah: $(date)"

```


Penjelasan baris per baris:


· #!/bin/bash - Shebang, memberi tahu sistem interpreter mana yang digunakan

· # Ini adalah komentar - Komentar, tidak dieksekusi

· echo "Hello World!" - Print teks ke layar

· echo "Hari ini adalah: $(date)" - Print teks dengan command substitution


Membuat file executable:


```bash

chmod +x hello.sh

```


Menjalankan script:


```bash

./hello.sh

```


Struktur Dasar Bash Script


1. Variabel dan Data Types


Mendefinisikan variabel:


```bash

#!/bin/bash


# Variabel string

nama="Budi Santoso"

perusahaan="Tech Corp"


# Variabel number

umur=25

gaji=5000000


# Variabel dari command output

waktu_sekarang=$(date)

directory_sekarang=$(pwd)

```


Menggunakan variabel:


```bash

echo "Nama: $nama"

echo "Perusahaan: ${perusahaan}"  # Alternatif syntax

echo "Umur: $umur tahun"

echo "Waktu: $waktu_sekarang"

```


Variabel system (built-in):


```bash

echo "Script name: $0"           # Nama script

echo "First argument: $1"        # Argument pertama

echo "All arguments: $@"         # Semua argument

echo "Number of arguments: $#"   # Jumlah argument

echo "Process ID: $$"            # PID script

echo "Exit status: $?"           # Exit status terakhir

```


2. Input dari User


Menggunakan argument:


```bash

#!/bin/bash

echo "Hello, $1!"

echo "Your age is: $2"

```


Penggunaan: ./script.sh John 25


Input saat runtime:


```bash

#!/bin/bash

echo -n "Enter your name: "

read nama

echo -n "Enter your age: "

read umur


echo "Hello $nama, you are $umur years old!"

```


3. Conditional Statements (If-Else)


Bentuk dasar:


```bash

if [ condition ]; then

    # perintah jika true

else

    # perintah jika false

fi

```


Contoh perbandingan angka:


```bash

#!/bin/bash

echo -n "Enter a number: "

read angka


if [ $angka -gt 10 ]; then

    echo "Number is greater than 10"

elif [ $angka -eq 10 ]; then

    echo "Number is exactly 10"

else

    echo "Number is less than 10"

fi

```


Operator perbandingan:


· -eq : equal (sama dengan)

· -ne : not equal (tidak sama)

· -gt : greater than (lebih besar)

· -lt : less than (lebih kecil)

· -ge : greater or equal (lebih besar atau sama)

· -le : less or equal (lebih kecil atau sama)


Contoh perbandingan string:


```bash

#!/bin/bash

echo -n "Enter your choice (yes/no): "

read pilihan


if [ "$pilihan" = "yes" ]; then

    echo "You chose YES!"

elif [ "$pilihan" = "no" ]; then

    echo "You chose NO!"

else

    echo "Invalid choice!"

fi

```


4. Loops (Perulangan)


For loop:


```bash

#!/bin/bash

# Loop melalui list

for i in 1 2 3 4 5; do

    echo "Number: $i"

done


# Loop melalui range

for i in {1..5}; do

    echo "Count: $i"

done


# Loop melalui files

for file in *.txt; do

    echo "Processing: $file"

done

```


While loop:


```bash

#!/bin/bash

counter=1


while [ $counter -le 5 ]; do

    echo "Counter: $counter"

    ((counter++))

done

```


Until loop:


```bash

#!/bin/bash

counter=1


until [ $counter -gt 5 ]; do

    echo "Counter: $counter"

    ((counter++))

done

```


5. Functions


Mendefinisikan function:


```bash

#!/bin/bash


# Function sederhana

sapaan() {

    echo "Hello, $1!"

    echo "Selamat datang di $2"

}


# Function dengan return value

tambah() {

    local hasil=$(( $1 + $2 ))

    echo $hasil

}


# Memanggil function

sapaan "Budi" "Shell Scripting"


# Menangkap return value

result=$(tambah 5 3)

echo "Hasil penambahan: $result"

```


Script Practical untuk Sehari-hari


1. Script Backup Sederhana


```bash

#!/bin/bash

# backup-simple.sh


# Konfigurasi

BACKUP_DIR="/home/user/backups"

SOURCE_DIR="/home/user/documents"

BACKUP_NAME="backup-$(date +%Y%m%d-%H%M%S).tar.gz"


# Buat directory backup jika belum ada

mkdir -p "$BACKUP_DIR"


# Validasi source directory

if [ ! -d "$SOURCE_DIR" ]; then

    echo "ERROR: Source directory $SOURCE_DIR tidak ditemukan!"

    exit 1

fi


# Eksekusi backup

echo "Starting backup..."

tar -czf "$BACKUP_DIR/$BACKUP_NAME" "$SOURCE_DIR"


# Cek apakah backup sukses

if [ $? -eq 0 ]; then

    echo "Backup sukses: $BACKUP_NAME"

    echo "Size: $(du -h "$BACKUP_DIR/$BACKUP_NAME" | cut -f1)"

else

    echo "Backup gagal!"

    exit 1

fi

```


2. Script System Monitoring


```bash

#!/bin/bash

# system-check.sh


echo "=== SYSTEM STATUS CHECK ==="

echo "Waktu: $(date)"

echo


# Check disk space

echo "--- Disk Usage ---"

df -h | grep -v tmpfs


echo


# Check memory

echo "--- Memory Usage ---"

free -h


echo


# Check load average

echo "--- System Load ---"

uptime


echo


# Check logged in users

echo "--- Logged In Users ---"

who


echo


# Check services status

echo "--- Service Status ---"

services=("ssh" "nginx" "mysql")

for service in "${services[@]}"; do

    if systemctl is-active --quiet "$service"; then

        echo "✅ $service: RUNNING"

    else

        echo "❌ $service: STOPPED"

    fi

done

```


3. Script File Management


```bash

#!/bin/bash

# file-organizer.sh


TARGET_DIR="${1:-.}"  # Gunakan current directory jika tidak ada argument


if [ ! -d "$TARGET_DIR" ]; then

    echo "Directory $TARGET_DIR tidak ditemukan!"

    exit 1

fi


echo "Organizing files in: $TARGET_DIR"


# Buat directory kategori

mkdir -p "$TARGET_DIR/images" "$TARGET_DIR/documents" "$TARGET_DIR/archives"


# Pindahkan files berdasarkan ekstensi

for file in "$TARGET_DIR"/*; do

    if [ -f "$file" ]; then

        case "${file##*.}" in

            jpg|jpeg|png|gif)

                mv "$file" "$TARGET_DIR/images/"

                echo "Moved: $file → images/"

                ;;

            pdf|doc|docx|txt)

                mv "$file" "$TARGET_DIR/documents/"

                echo "Moved: $file → documents/"

                ;;

            zip|tar|gz)

                mv "$file" "$TARGET_DIR/archives/"

                echo "Moved: $file → archives/"

                ;;

        esac

    fi

done


echo "File organization completed!"

```


Best Practices untuk Script yang Robust


1. Gunakan Shellcheck

Install shellcheck untuk analisis kode:


```bash

# Ubuntu/Debian

sudo apt install shellcheck


# CentOS/RHEL

sudo yum install shellcheck

```


Penggunaan: shellcheck script.sh


2. Always Use Quotes untuk Variabel


```bash

# Good

echo "$nama"

cp "$file1" "$file2"


# Bad (bisa error jika ada spaces)

echo $nama

cp $file1 $file2

```


3. Error Handling dengan set -e


```bash

#!/bin/bash

set -e  # Exit immediately jika command gagal


# Script akan berhenti jika command ini gagal

rm important-file.txt


# Perintah ini tidak akan dijalankan jika di atas gagal

echo "Operation completed"

```


4. Gunakan Debug Mode saat Development


```bash

#!/bin/bash

set -x  # Print setiap command sebelum dieksekusi


# Your code here

echo "Debug mode"

ls -l

```


5. Validasi Input


```bash

#!/bin/bash

if [ $# -eq 0 ]; then

    echo "Usage: $0 <filename>"

    exit 1

fi


if [ ! -f "$1" ]; then

    echo "Error: File $1 tidak ditemukan!"

    exit 1

fi

```


6. Gunakan Logging


```bash

#!/bin/bash

LOG_FILE="script.log"


log() {

    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"

}


log "Script started"

# Your code here

log "Script completed"

```


Struktur Script yang Professional


```bash

#!/bin/bash

#

# Nama Script: system-backup.sh

# Description: Backup system files and databases

# Author: Your Name

# Version: 1.0

#


set -euo pipefail  # Strict mode


# Configuration

readonly BACKUP_DIR="/backup"

readonly LOG_FILE="/var/log/backup.log"

readonly RETENTION_DAYS=7


# Functions

init_backup() {

    local timestamp=$(date '+%Y%m%d_%H%M%S')

    local backup_path="$BACKUP_DIR/backup_$timestamp"

    mkdir -p "$backup_path"

    echo "$backup_path"

}


log_message() {

    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"

}


cleanup_old_backups() {

    log_message "Cleaning up backups older than $RETENTION_DAYS days"

    find "$BACKUP_DIR" -name "backup_*" -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \; || true

}


# Main execution

main() {

    log_message "=== Backup Started ==="

    

    local backup_path

    backup_path=$(init_backup)

    

    log_message "Backup location: $backup_path"

    

    # Backup commands here

    # ...

    

    cleanup_old_backups

    log_message "=== Backup Completed ==="

}


# Error handler

handle_error() {

    log_message "ERROR: Script failed at line $1"

    exit 1

}


trap 'handle_error $LINENO' ERR


# Script entry point

if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then

    main "$@"

fi

```


Debugging Tips


1. Gunakan set -x untuk tracing:


```bash

#!/bin/bash

set -x  # Debug mode

# your code

set +x  # Turn off debug

```


2. Check exit codes:


```bash

command

if [ $? -ne 0 ]; then

    echo "Command failed!"

fi

```


3. Use verbose mode:


```bash

#!/bin/bash

set -e  # Exit on error

set -u  # Exit on undefined variables

set -o pipefail  # Exit on pipe failures

```


Next Steps untuk Level Lanjutan


Setelah menguasai dasar, eksplorasi:


· Arrays: Untuk mengelola kumpulan data

· Associative arrays: Untuk key-value pairs

· Regular expressions: Untuk pattern matching

· Signal handling: Untuk menangani interrupts

· Parallel execution: Untuk mempercepat processing


Kesimpulan


Menulis bash script adalah skill yang akan mengubah cara kamu berinteraksi dengan Linux. Mulailah dengan script sederhana, practice regularly, dan secara bertahap bangun complexity.


Ingat principles penting:


· Start small: Buat script sederhana dulu

· Test thoroughly: Selalu test di environment aman

· Use best practices: Quotes, error handling, logging

· Document your code: Komentar yang jelas

· Keep learning: Terus eksplorasi features baru


Sekarang ambil task repetitif yang kamu lakukan hari ini, dan coba automasi dengan bash script. Happy scripting!


Panduan Menulis Bash Script untuk Pemula Panduan Menulis Bash Script untuk Pemula Reviewed by Sabila on 19.49 Rating: 5

Tidak ada komentar: