Başlangıç 45 dakika 10.01.2024

Bash Scripting: Başlangıç Rehberi

Bash scripting'e sıfırdan başlayanlara yönelik kapsamlı rehber. Değişkenler, koşullu ifadeler, döngüler ve fonksiyonları öğrenin.

bash scripting başlangıç shell script linux eğitimi

Bash Scripting Nedir?

Bash (Bourne Again Shell), Linux ve Unix sistemlerde komut satırı arayüzü ve script dili olarak kullanılan güçlü bir araçtır. Bash scripting, sistem yöneticileri, DevOps mühendisleri ve geliştiriciler için vazgeçilmez bir beceridir.

Neden Bash Scripting Öğrenmelisiniz?

  • Otomasyon: Tekrarlayan görevleri otomatikleştirir
  • Zaman Tasarrufu: Kompleks işlemleri tek komutla yapabilirsiniz
  • Güçlü Araç: Sistem yönetimi için güçlü bir araçtır
  • Taşınabilirlik: Tüm Linux/Unix sistemlerde çalışır
  • Kariyer: IT sektöründe çok değerli bir beceridir

İlk Bash Scriptiniz

Basit bir "Merhaba Dünya" scripti ile başlayalım. Bu, bash scripting dünyasına ilk adımınızdır:

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

Açıklama:

  • #!/bin/bash - Shebang satırı, scriptin bash ile çalıştırılacağını belirtir
  • echo - Metni ekrana yazdıran komut

Çalıştırma:

chmod +x script.sh
./script.sh

Değişkenler

Bash'te değişken tanımlama ve kullanma:

#!/bin/bash
AD="Ahmet"
YAS=25

echo "Merhaba, benim adım $AD"
echo "Yaşım: $YAS"

Kullanıcıdan Giriş Alma

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

Koşullu İfadeler (if-else)

#!/bin/bash
read -p "Bir sayı girin: " SAYI

if [ $SAYI -gt 10 ]; then
    echo "Sayı 10'dan büyük"
elif [ $SAYI -eq 10 ]; then
    echo "Sayı 10'a eşit"
else
    echo "Sayı 10'dan küçük"
fi

Döngüler

For Döngüsü:

#!/bin/bash
for i in {1..5}; do
    echo "Sayı: $i"
done

While Döngüsü:

#!/bin/bash
SAYAC=1
while [ $SAYAC -le 5 ]; do
    echo "Sayaç: $SAYAC"
    ((SAYAC++))
done

Fonksiyonlar

#!/bin/bash

selamla() {
    echo "Merhaba $1!"
}

# Fonksiyonu çağır
selamla "Dünya"
selamla "Linux"

Komut Satırı Argümanları

#!/bin/bash
echo "Script adı: $0"
echo "İlk argüman: $1"
echo "İkinci argüman: $2"
echo "Tüm argümanlar: $@"
echo "Argüman sayısı: $#"

Dosya İşlemleri

#!/bin/bash

# Dosya var mı kontrol et
if [ -f "dosya.txt" ]; then
    echo "Dosya mevcut"
else
    echo "Dosya bulunamadı"
fi

# Dizin var mı kontrol et
if [ -d "/home/user" ]; then
    echo "Dizin mevcut"
fi

# Dosya okunabilir mi
if [ -r "dosya.txt" ]; then
    echo "Dosya okunabilir"
fi

Pratik Örnekler

Sistem Yedekleme Scripti:

#!/bin/bash
KAYNAK="/home/user/belgeler"
HEDEF="/backup/$(date +%Y%m%d)"

mkdir -p "$HEDEF"
cp -r "$KAYNAK" "$HEDEF"

echo "Yedekleme tamamlandı: $HEDEF"

Gelişmiş Konular

Dizi (Array) Kullanımı

#!/bin/bash
# Dizi tanımlama
MEYVELER=("elma" "armut" "muz" "çilek")

# Dizi elemanlarına erişim
echo "İlk meyve: ${MEYVELER[0]}"
echo "Tüm meyveler: ${MEYVELER[@]}"
echo "Meyve sayısı: ${#MEYVELER[@]}"

# Dizi üzerinde döngü
for meyve in "${MEYVELER[@]}"; do
    echo "Meyve: $meyve"
done

Hata Yönetimi

#!/bin/bash
# Hata durumunda scripti durdur
set -e

# Veya manuel hata kontrolü
if ! command -v git &> /dev/null; then
    echo "Git kurulu değil!"
    exit 1
fi

# Hata yakalama
set +e
komut_hatali_olabilir
if [ $? -ne 0 ]; then
    echo "Komut başarısız oldu"
fi
set -e

Fonksiyon Parametreleri ve Return Değerleri

#!/bin/bash

# Parametreli fonksiyon
topla() {
    local sonuc=$(($1 + $2))
    echo $sonuc
}

# Return değeri kullanımı
SONUC=$(topla 5 3)
echo "Toplam: $SONUC"

# Global değişken kullanımı
global_sonuc=0
topla_global() {
    global_sonuc=$(($1 + $2))
}

topla_global 10 20
echo "Global sonuç: $global_sonuc"

Dosya Okuma ve Yazma

#!/bin/bash

# Dosyaya yazma
echo "Satır 1" > dosya.txt
echo "Satır 2" >> dosya.txt

# Dosyadan okuma
while IFS= read -r satir; do
    echo "Okunan: $satir"
done < dosya.txt

# Dosya içeriğini değişkene atama
ICERIK=$(cat dosya.txt)
echo "$ICERIK"

Pratik Projeler

Proje 1: Sistem Bilgisi Scripti

#!/bin/bash
echo "=== Sistem Bilgileri ==="
echo "Hostname: $(hostname)"
echo "Kullanıcı: $USER"
echo "Tarih: $(date)"
echo "Disk Kullanımı:"
df -h | grep -E "^/dev/"

Proje 2: Dosya Yedekleme Scripti

#!/bin/bash
KAYNAK="$1"
HEDEF="/backup/$(date +%Y%m%d_%H%M%S)"

if [ -z "$KAYNAK" ]; then
    echo "Kullanım: $0 "
    exit 1
fi

if [ ! -d "$KAYNAK" ]; then
    echo "Hata: $KAYNAK dizini bulunamadı"
    exit 1
fi

mkdir -p "$HEDEF"
cp -r "$KAYNAK" "$HEDEF"
echo "Yedekleme tamamlandı: $HEDEF"

Proje 3: Log Analiz Scripti

#!/bin/bash
LOG_DOSYASI="$1"

if [ -z "$LOG_DOSYASI" ]; then
    echo "Kullanım: $0 "
    exit 1
fi

echo "=== Log Analizi ==="
echo "Toplam satır sayısı: $(wc -l < "$LOG_DOSYASI")"
echo "Hata satırları:"
grep -i error "$LOG_DOSYASI" | wc -l
echo "En çok geçen IP adresleri:"
grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" "$LOG_DOSYASI" | sort | uniq -c | sort -rn | head -5

Alıştırmalar ve Ödevler

  1. Basit Hesap Makinesi: Kullanıcıdan iki sayı ve işlem türü (+, -, *, /) alan bir script yazın
  2. Çift Sayılar: 1'den 100'e kadar olan çift sayıları yazdıran script
  3. Dosya Filtreleme: Bir dizindeki tüm .txt dosyalarını bulup listeleyen script
  4. Kullanıcı Kontrolü: Belirli bir kullanıcının sistemde olup olmadığını kontrol eden script
  5. Disk Uyarı Sistemi: Disk kullanımı %90'ı geçerse uyarı veren script
  6. Otomatik Yedekleme: Belirli bir dizini günlük olarak yedekleyen script (cron ile)
  7. Log Temizleme: 30 günden eski log dosyalarını silen script
  8. Network Ping Testi: Bir IP adresinin erişilebilir olup olmadığını kontrol eden script

İpuçları ve Best Practices

  • Her zaman shebang kullanın: #!/bin/bash
  • Değişkenleri tırnak içinde kullanın: "$degisken"
  • Hata kontrolü yapın: set -e veya manuel kontrol
  • Yorum satırları ekleyin: Kodunuzu açıklayın
  • Fonksiyon kullanın: Tekrar eden kodları fonksiyona çevirin
  • Dosya yollarını kontrol edin: Dosya/dizin varlığını kontrol edin
  • Güvenli şifre kullanımı: Şifreleri script içinde saklamayın