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