Script Yazım Standartları
Prodüksiyon ortamında çalışacak bir script, "çalışıp işini yapması" kadar "hata anında düzgün patlaması" ile de ölçülür.
1. Altın Kural: Bash Strict Mode
Her Bash scriptinizin ilk satırı (shebang'den sonra) mutlaka şu olmalı:
Bu ne işe yarar?
set -e(Exit on Error): Bir komut hata verirse (exit code != 0), script çalışmaya devam etmez, anında durur.- İstisna:
mkdir dosya || truegibi hatayı bilerek yönettiğiniz yerler. set -u(Unset Variables): Tanımlanmamış bir değişken kullanırsanız hata verir. (rm -rf /$BILINMEYEN_DEGISKENfaciasını önler).set -o pipefail: Boru hattında (cmd1 | cmd2) biri hata verirse tüm işlemi hatalı sayar. Varsayılan davranışta sadececmd2başarısız olursa hata dönerdi.
2. Değişken İsimlendirme
- BÜYÜK_HARF: Sadece
exportedilen ortam değişkenleri (Environment Variables) ve sabitler (Constants) için. - küçük_harf: Script içi yerel değişkenler için.
# Doğru
DATABASE_URL="postgres://..."
backup_dir="/tmp/backups"
# Yanlış
BACKUPDIR="/tmp" # Sistem değişkeni sanılabilir
3. Loglama ve Fonksiyonlar
Her şeyi echo ile yazdırmayın. Okunabilir log fonksiyonları kullanın:
log_info() { echo -e "[\033[34mINFO\033[0m] $1"; }
log_success() { echo -e "[\033[32mOK\033[0m] $1"; }
log_error() { echo -e "[\033[31mERROR\033[0m] $1" >&2; }
# Kullanım
log_info "Yedekleme başlıyor..."
4. Linting (Kod Denetimi)
Scriptlerinizi commit etmeden önce mutlaka ShellCheck ile tarayın. VS Code eklentisi mevcuttur.
5. Şablon (Boilerplate)
Yeni bir script yazarken bu şablonu kopyalayın:
#!/bin/bash
set -euo pipefail
# --- Konfigürasyon ---
readonly WORK_DIR="/opt/app"
readonly NOW=$(date +%Y%m%d_%H%M%S)
# --- Yardım ---
usage() {
echo "Kullanım: $0 [options]"
exit 1
}
# --- Ana Akış ---
main() {
if [[ $EUID -ne 0 ]]; then
echo "Bu script root olarak çalıştırılmalıdır."
exit 1
fi
echo "İşlem başladı: $NOW"
# Kodlar buraya...
}
main "$@"