Linux Bash Script Rehberi: Otomasyon ve Scripting

Bash scripting, Linux'ta tekrarlayan görevleri otomatikleştirmenin en etkili yoludur. Yedekleme, log temizleme, sistem izleme gibi işleri manuel yapmak...

Linux
Linux Bash Script Rehberi: Otomasyon ve Scripting

Bash scripting, Linux'ta tekrarlayan görevleri otomatikleştirmenin en etkili yoludur. Yedekleme, log temizleme, sistem izleme gibi işleri manuel yapmak yerine script yazarak otomatik hale getirebilirsiniz. İlk Script

Basit bir script oluşturalım:

nano merhaba.sh

İçeriği:

#!/bin/bash echo "Merhaba Dünya!"

İlk satırdaki #!/bin/bash "shebang" olarak adlandırılır. Scriptin Bash ile çalıştırılacağını belirtir.

Çalıştırma izni verin ve çalıştırın:

chmod +x merhaba.sh ./merhaba.sh

Değişkenler

Değişkenler veri saklamak için kullanılır.

Tanımlama ve Kullanma

#!/bin/bash isim="Ahmet" yas=25

echo "Merhaba $isim" echo "Yaşınız: $yas"

Dikkat: Eşittir işaretinin etrafında boşluk olmaz.

Özel Değişkenler

$0: Script adı $1, $2...: Argümanlar $#: Argüman sayısı $@: Tüm argümanlar $?: Son komutun çıkış kodu $$: Script'in PID'si

Örnek:

#!/bin/bash echo "Script adı: $0" echo "İlk argüman: $1" echo "Argüman sayısı: $#"

Kullanıcı Girdisi

read komutu ile kullanıcıdan veri alın:

#!/bin/bash echo "Adınızı girin:" read isim echo "Merhaba $isim!"

Tek satırda:

read -p "Adınızı girin: " isim

Gizli girdi (parola için):

read -sp "Parola: " parola

Aritmetik İşlemler

Bash'te hesaplama yapmanın birkaç yolu var:

$(( )) ile:

#!/bin/bash a=10 b=3

toplam=$((a + b)) fark=$((a - b)) carpim=$((a * b)) bolum=$((a / b)) mod=$((a % b))

echo "Toplam: $toplam" echo "Fark: $fark"

let ile:

let "sonuc = 5 * 4" echo $sonuc

Koşullu İfadeler (if-else)

Temel Yapı

#!/bin/bash sayi=10

if [ $sayi -gt 5 ]; then echo "Sayı 5'ten büyük" elif [ $sayi -eq 5 ]; then echo "Sayı 5'e eşit" else echo "Sayı 5'ten küçük" fi

Karşılaştırma Operatörleri

Sayısal: -eq: Eşit -ne: Eşit değil -gt: Büyük -lt: Küçük -ge: Büyük veya eşit -le: Küçük veya eşit

String: =: Eşit !=: Farklı -z: Boş -n: Dolu

Dosya Testleri

Dosya testleri çok kullanışlıdır:

#!/bin/bash dosya="/etc/passwd"

if [ -f "$dosya" ]; then echo "Dosya mevcut" fi

if [ -d "/home" ]; then echo "Dizin mevcut" fi

if [ -r "$dosya" ]; then echo "Dosya okunabilir" fi

Test operatörleri: -f: Dosya mı -d: Dizin mi -e: Var mı -r: Okunabilir mi -w: Yazılabilir mi -x: Çalıştırılabilir mi -s: Boş değil mi

case Yapısı

Çoklu seçenek için:

#!/bin/bash read -p "Seçiminizi girin (1-3): " secim

case $secim in 1) echo "Bir seçtiniz" ;; 2) echo "İki seçtiniz" ;; 3) echo "Üç seçtiniz" ;; *) echo "Geçersiz seçim" ;; esac

Döngüler

for Döngüsü

Liste üzerinde:

#!/bin/bash for isim in Ahmet Mehmet Ayşe; do echo "Merhaba $isim" done

Sayı aralığı:

for i in {1..5}; do echo "Sayı: $i" done

C stili:

for ((i=0; i<5; i++)); do echo "İndeks: $i" done

Dosyalar üzerinde:

for dosya in *.txt; do echo "İşleniyor: $dosya" done

while Döngüsü

#!/bin/bash sayac=1

while [ $sayac -le 5 ]; do echo "Sayaç: $sayac" ((sayac++)) done

Sonsuz döngü:

while true; do echo "Çalışıyor..." sleep 5 done

until Döngüsü

Koşul doğru olana kadar çalışır:

#!/bin/bash sayac=1

until [ $sayac -gt 5 ]; do echo "Sayaç: $sayac" ((sayac++)) done

break ve continue

for i in {1..10}; do if [ $i -eq 5 ]; then continue # 5'i atla fi if [ $i -eq 8 ]; then break # 8'de dur fi echo $i done

Fonksiyonlar

Kod tekrarını önlemek ve düzeni sağlamak için:

#!/bin/bash

# Fonksiyon tanımı selamla() { echo "Merhaba $1!" }

# Fonksiyon çağrısı selamla "Ahmet" selamla "Mehmet"

Dönüş Değeri

toplam() { local sonuc=$(($1 + $2)) echo $sonuc }

# Sonucu yakala cevap=$(toplam 5 3) echo "Toplam: $cevap"

Diziler

#!/bin/bash # Dizi tanımı meyveler=("Elma" "Armut" "Muz")

# Elemana erişim echo ${meyveler[0]}

# Tüm elemanlar echo ${meyveler[@]}

# Eleman sayısı echo ${#meyveler[@]}

# Döngü ile for meyve in "${meyveler[@]}"; do echo $meyve done

Hata Yönetimi

Çıkış Kodları

Başarılı komutlar 0, başarısız komutlar 0 dışı değer döner.

#!/bin/bash grep "hata" /var/log/syslog

if [ $? -eq 0 ]; then echo "Hata bulundu" else echo "Hata yok" fi

set Seçenekleri

#!/bin/bash set -e # Hata olursa dur set -u # Tanımsız değişkende hata ver set -o pipefail # Pipe'da hata yakala

# Veya tek satırda set -euo pipefail

Pratik Örnekler

Yedekleme Scripti

#!/bin/bash set -euo pipefail

KAYNAK="/home/kullanici/belgeler" HEDEF="/backup" TARIH=$(date +%Y%m%d_%H%M%S) DOSYA="backup_$TARIH.tar.gz"

echo "Yedekleme başlıyor..." tar -czf "$HEDEF/$DOSYA" "$KAYNAK" echo "Yedekleme tamamlandı: $DOSYA"

# Eski yedekleri temizle (30 günden eski) find "$HEDEF" -name "backup_*.tar.gz" -mtime +30 -delete

Log Temizleme

#!/bin/bash LOG_DIR="/var/log" LIMIT=100 # MB

for log in "$LOG_DIR"/*.log; do boyut=$(du -m "$log" | cut -f1) if [ $boyut -gt $LIMIT ]; then echo "Temizleniyor: $log ($boyut MB)" > "$log" fi done

Sistem Sağlık Kontrolü

#!/bin/bash

echo "=== Sistem Durumu ===" echo ""

# Disk kullanımı echo "Disk Kullanımı:" df -h | grep -E '^/dev/'

echo ""

# Bellek echo "Bellek Kullanımı:" free -h

echo ""

# Yük echo "Sistem Yükü:" uptime

echo ""

# Çalışan servisler echo "Kritik Servisler:" for servis in nginx mysql ssh; do if systemctl is-active --quiet $servis 2>/dev/null; then echo " $servis: Çalışıyor" else echo " $servis: Çalışmıyor" fi done

Cron ile Zamanlama

Scriptleri otomatik çalıştırmak için cron kullanın:

crontab -e

Her gün gece 2'de:

0 2   * /home/kullanici/backup.sh >> /var/log/backup.log 2>&1

Her saat başı:

0     /home/kullanici/health-check.sh

İpuçları

Hata ayıklama: bash -x script.sh ile adım adım izleyin.

Değişkenleri tırnak içine alın: "$degisken" boşluk sorunlarını önler.

Yorumlar ekleyin: # ile açıklama yazın.

ShellCheck kullanın: Script hatalarını tespit eden araç.

Celil Uyanikoglu

Yazan Celil Uyanikoglu

25 yıldır bilgi işlem piyasasında farklı dallarda uzmanlaşan bir Bilgisayar Mühendisi

Yorum

Henüz yorum yok.

Sohbete katıl. Yorumlar yayınlanmadan önce moderasyondan geçer.

Yorum yap

E-posta adresin yayınlanmaz. Yorumlar moderasyondan sonra yayınlanır.

Sırada

İlgili notlar