MagmaNex LogoMagmaNex
Ana Sayfa/Blog/Bash Betiği ile Tekrarlayan İşleri Otomatikleştirme Rehberi
Bash Betiği ile Tekrarlayan İşleri Otomatikleştirme Rehberi
Sistem10 Haziran 2026· 8 dk okuma

Bash Betiği ile Tekrarlayan İşleri Otomatikleştirme Rehberi

Shebang'den değişkenlere, döngülerden cron ile zamanlamaya kadar Bash betikleriyle tekrarlayan işleri otomatikleştirmenin pratik, başlangıç dostu rehberi.

#bash#otomasyon#shell#cron#linux

Bash Betiği ile Tekrarlayan İşleri Otomatikleştirme Rehberi

Her gün aynı komutları elle yazıp duruyorsanız, bu işi bir kez yazıp sonsuza dek otomatikleştirebilirsiniz. Bash betikleri tam olarak bunun için var: birden fazla komutu tek bir dosyada toplar, mantık ekler ve istediğiniz zaman çalıştırırsınız. Bu rehber, sıfırdan başlayarak çalışan bir otomasyon betiği yazmanın tüm temel adımlarını pratik örneklerle anlatır.

Shebang: Betiğin İlk Satırı

Her Bash betiği, yorumlayıcıyı belirten bir shebang satırıyla başlar. Bu satır, dosyanın hangi programla çalıştırılacağını sisteme söyler.

#!/usr/bin/env bash

#!/usr/bin/env bash kullanmak, bash'in PATH üzerinde nerede olduğunu otomatik bulduğu için #!/bin/bash'ten daha taşınabilirdir. Bunun hemen ardından, betiğinizi daha güvenli hale getiren şu satırı eklemek iyi bir alışkanlıktır:

#!/usr/bin/env bash
set -euo pipefail
  • -e: Bir komut hata verirse betik durur.
  • -u: Tanımsız bir değişken kullanılırsa hata verir.
  • -o pipefail: Pipe içindeki herhangi bir komut başarısız olursa tüm pipe başarısız sayılır.

Değişkenler ve Komut Yer Değiştirme

Değişken tanımlarken eşittir işaretinin etrafında boşluk olmamalıdır. Değeri kullanırken başına $ koyarsınız.

isim="MagmaNex"
echo "Merhaba $isim"

Bir komutun çıktısını bir değişkene atamak için komut yer değiştirme (command substitution) kullanılır. $( ... ) biçimi tercih edilir:

bugun=$(date +%Y-%m-%d)
dosya_sayisi=$(ls -1 | wc -l)
echo "$bugun tarihinde $dosya_sayisi dosya var"

Değişkenleri her zaman çift tırnak içinde kullanın ("$dosya"). Bu, içinde boşluk bulunan yollarda yaşanan klasik hataları önler.

Koşullar ve Döngüler

Otomasyonun gücü, betiğin karar verebilmesinden gelir. if ile koşul kurarsınız:

if [[ -f "/etc/hosts" ]]; then
  echo "Dosya mevcut"
else
  echo "Dosya bulunamadı"
fi

Sık kullanılan test operatörleri:

  • -f dosya — normal bir dosya mı?
  • -d dizin — bir dizin mi?
  • -z "$str" — değişken boş mu?
  • "$a" == "$b" — iki dize eşit mi?

Çok sayıda öğe üzerinde aynı işlemi yapmak için for döngüsü kullanılır:

for log in /var/log/*.log; do
  echo "İşleniyor: $log"
  gzip "$log"
done

Bir koşul sağlandığı sürece tekrar etmek için while döngüsü uygundur:

sayac=1
while [[ $sayac -le 5 ]]; do
  echo "Deneme $sayac"
  sayac=$((sayac + 1))
done

Argümanlar: $1, $@ ve Arkadaşları

Betiğinizi esnek hale getirmenin yolu, çalıştırılırken argüman kabul etmesidir. Bash, bu argümanları özel değişkenlerle sunar:

  • $0 — betiğin kendi adı
  • $1, $2, ... — sırayla birinci, ikinci argüman
  • $@ — tüm argümanlar (her biri ayrı)
  • $# — argüman sayısı
#!/usr/bin/env bash
set -euo pipefail

if [[ $# -lt 1 ]]; then
  echo "Kullanım: $0 <dizin>"
  exit 1
fi

hedef="$1"
echo "$hedef dizinindeki dosyalar yedekleniyor..."

for dosya in "$hedef"/*; do
  cp "$dosya" "$dosya.bak"
done

Burada $# ile argüman sayısını kontrol edip eksikse kullanım mesajı gösteriyoruz. exit 1 betiği hata koduyla sonlandırır; bu, başka betiklerden çağrıldığında önemlidir.

İşinize Yarayacak Birkaç Tek Satırlık Komut

Otomasyon her zaman uzun betikler gerektirmez. İşte günlük hayatı kolaylaştıran bazı one-liner örnekleri:

# 7 günden eski .tmp dosyalarını sil
find . -name "*.tmp" -mtime +7 -delete

# En çok yer kaplayan 10 dizin
du -sh */ | sort -rh | head -n 10

# Bir metni tüm dosyalarda topluca değiştir
grep -rl "eski_metin" . | xargs sed -i 's/eski_metin/yeni_metin/g'

# Anlık olarak basit bir HTTP sunucusu başlat
python3 -m http.server 8000

Betiği Çalıştırılabilir Yapmak

Bir betiği ./betik.sh şeklinde çalıştırabilmek için ona çalıştırma izni vermeniz gerekir. Bunun için chmod kullanılır:

chmod +x betik.sh
./betik.sh

İzinleri sayısal (octal) biçimde de verebilirsiniz. Her hane okuma (4), yazma (2) ve çalıştırma (1) izinlerinin toplamıdır:

chmod 755 betik.sh   # sahip: rwx, grup: r-x, diğer: r-x
chmod 700 gizli.sh   # yalnızca sahip her şeyi yapabilir

755 ile 700 arasındaki farkı kafanızda canlandırmakta zorlanırsanız, chmod İzin Hesaplayıcı aracıyla hangi sayının hangi izinlere karşılık geldiğini anında görebilirsiniz.

Cron ile Zamanlama

Betiğiniz hazır; peki onu her gece otomatik çalıştırmak isterseniz? İşte burada cron devreye girer. crontab -e komutuyla zamanlanmış görevlerinizi düzenlersiniz. Bir cron satırı beş zaman alanı ve bir komuttan oluşur:

# dakika saat gün ay haftanın_günü  komut
0 3 * * *  /home/kullanici/yedek.sh

Yukarıdaki satır, betiği her gün saat 03:00'te çalıştırır. Birkaç yaygın örnek:

*/15 * * * *  /opt/scripts/kontrol.sh   # her 15 dakikada bir
0 0 * * 0     /opt/scripts/haftalik.sh  # her pazar gece yarısı
30 8 1 * *    /opt/scripts/aylik.sh     # her ayın 1'inde 08:30

Bu yıldız ve sayı dizilimleri ilk başta kafa karıştırıcı olabilir. Var olan bir ifadenin tam olarak ne anlama geldiğini çözmek için Crontab Açıklayıcı aracını, sıfırdan doğru ifadeyi üretmek içinse Cron İfadesi Oluşturucu aracını kullanabilirsiniz.

Toparlarken

Artık bir otomasyon betiğinin tüm parçalarına sahipsiniz: shebang ile başlatma, değişken ve komut yer değiştirme, koşullar ve döngülerle mantık, argümanlarla esneklik, chmod ile izin verme ve cron ile zamanlama. Bir sonraki adım, depolarınızda gereksiz dosyaların betiklerinizi kirletmesini önlemek olabilir; bunun için .gitignore Oluşturucu aracı işinizi kolaylaştırır.

Küçük başlayın: bugün elle yaptığınız tek bir tekrarlayan işi seçin ve onu bir betiğe dönüştürün. Zamanla bu betikler, sizin için sessizce çalışan küçük bir asistan ordusuna dönüşecek.

MagmaNex'teki tüm araçlar tamamen tarayıcınızda çalışır; hiçbir veriniz sunucuya gönderilmez.


🛠 İlgili Araçlar

📚 İlgili Yazılar

← Tüm Yazılar🛠 Araçları Keşfet