İçerik
Shell script, yazarken Bash fonksiyonları hayat kurtarıcı oluyor. Bu yazıda paylaşacağım 10 Bash fonksiyonu sayesinde daha temiz, güvenli ve yeniden kullanılabilir script’ler oluşturabilirsiniz. Script’lerinizi geliştirmek ve iş yükünüzü hafifletmek için aşağıdaki pratik fonksiyonları kullanmaya başlamanızı şiddetle tavsiye ederim. Temiz Shell script yazmanın yollarına gelin beraber bakalım.
Shell Script Nedir?
Shell Script, Unix/Linux sistemlerinde kullanılan ve komut satırından çalıştırılan küçük program parçalarıdır. Genellikle rutin görevleri otomatikleştirmek, sistem yönetimi yapmak ve hızlı işlemler gerçekleştirmek için tercih edilir.
Daha fazla bilgi için: Shell Scripting Nedir?
log(): Basit Bir Logger ile Zaman Damgası Kullanın
log() {
local level="$1"; shift
local timestamp
timestamp=$(date "+%Y-%m-%d %H:%M:%S")
echo "[$timestamp] [$level] $*" >&2
}
log()
fonksiyonu, script içinde standart formatta log tutmayı sağlar. Her log mesajında tarih, saat ve log seviyesi (error, info, warning) bulunur. Özellikle debugging ve production ortamları için idealdir.
Kullanım Örneği
log "INFO" "Deployment started"
log "ERROR" "Failed to connect to the database"
Örnek Çıktı

retry(): Komutları Otomatik Tekrarlama
retry() {
local retries="$1"; shift
local count=0 exit_code=0
until "$@"; do
exit_code=$?
((count++))
if ((count >= retries)); then
log "ERROR" "Command failed after $retries attempts: $*"
return "$exit_code"
fi
log "WARN" "Retrying ($count/$retries)..."
sleep $((count * 2))
done
}
retry()
fonksiyonu, komutların başarısız olması halinde belirtilen sayıda tekrar çalıştırır. HTTP API gibi kararsız servislerle çalışırken çok faydalıdır.
Kullanım Örneği
retry 5 curl -sf http://localhost:8080/healthz
Örnek Çıktı

check_required_env(): Çevresel Değişkenleri Kontrol Etme
check_required_env() {
for var in "$@"; do
if [[ -z "${!var:-}" ]]; then
log "ERROR" "Missing required environment variable: $var"
exit 1
fi
done
}
check_required_env()
fonksiyonu, script çalışmadan önce gerekli olan çevresel değişkenleri kontrol eder. Eksik bir değişken varsa script çalışmayı durdurur ve hata mesajı verir.
Kullanım Örneği
check_required_env AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY
Örnek Çıktı

load_config(): .env Dosyalarını Yükleme
load_config() {
local config_file="$1"
[[ -f "$config_file" ]] || { log "ERROR" "Config file not found: $config_file"; return 1; }
while IFS='=' read -r key value || [[ -n "$key" ]]; do
[[ "$key" =~ ^\s*# ]] || [[ -z "$key" ]] && continue
key=$(echo "$key" | xargs)
value=$(echo "$value" | sed 's/^"\(.*\)"$/\1/' | xargs)
export "$key=$value"
done < "$config_file"
}
load_config()
fonksiyonu, çevresel ayarları ayrı bir dosyadan yükleyerek scriptleri daha temiz tutmayı sağlar. Bu yöntem, 12-factor uygulama prensiplerine uygundur ve yapılandırma yönetimini kolaylaştırır.
Kullanım Örneği
load_config "./myapp.env"
Örnek Çıktı

safe_rm(): Güvenli Silme İşlemi
safe_rm() {
local file="$1"
[[ -e "$file" ]] || { log "WARN" "File not found: $file"; return 1; }
local trash_dir="$HOME/.trash"
mkdir -p "$trash_dir"
local base
base=$(basename "$file")
local timestamp
timestamp=$(date +%s)
mv "$file" "$trash_dir/${base}_${timestamp}_$$" && \
log "INFO" "Moved $file to trash instead of deleting"
}
safem_rm()
fonksiyonu, dosyaları silmek yerine bir çöp klasörüne (trash) taşır. Bu yöntem yanlışlıkla yapılan dosya silme işlemlerinde büyük bir güvenlik sağlar.
Kullanım Örneği
safe_rm "config.yml"
Örnek Çıktı

confirm(): İşlem Onayı İsteme
confirm() {
local prompt="${1:-Are you sure?} (y/n): "
while true; do
read -rn 1 -p "$prompt" response
echo
case "${response,,}" in
y) return 0 ;;
n) return 1 ;;
*) echo "Please enter y or n." ;;
esac
done
}
confirm()
fonksiyonu, kritik işlemleri gerçekleştirmeden önce kullanıcıdan onay ister. Yanlışlıkla önemli verileri silmenizi önleyerek daha güvenli işlem yapmanızı sağlar.
Kullanım Örneği
if confirm "Are you sure you want to delete production DB?"; then
delete_database
fi
Örnek Çıktı

monitor_usage(): CPU ve Bellek Kullanımı İzleme
monitor_usage() {
if [[ "$(uname)" == "Darwin" ]]; then
echo "CPU: $(top -l 1 | awk '/CPU usage/ {gsub(/%/, ""); print $3+$5}')%"
echo "Memory: $(top -l 1 | awk '/PhysMem/ {
gsub(/M/,""); used=$2; free=$(NF-1);
printf("%.2f", used/(used+free)*100)}')%"
else
echo "CPU: $(top -bn1 | awk -F'[, ]+' '/^%?Cpu/ {print $2+$4}')%"
echo "Memory: $(free -m | awk '/^Mem:/ {printf("%.2f", $3/$2*100)}')%"
fi
}
monitor_usage()
fonksiyonu ile sistemin CPU ve bellek kullanımını hızlıca kontrol edebilirsiniz. Sistem sağlığını izlemeniz gerektiğinde hızlı sonuçlar sunar.
Kullanım Örneği
monitor_usage
Örnek Çıktı

require_command(): Komut Bağımlılıklarını Kontrol Etme
require_command() {
[[ $# -eq 0 ]] && { echo "require_command: no args" >&2; return 1; }
for cmd; do
command -v "$cmd" >/dev/null 2>&1 || {
echo "ERROR: missing required command: $cmd" >&2
exit 1
}
done
}
require_command()
fonksiyonu, scriptin çalışması için gereken komutların varlığını kontrol eder. Eksik komut varsa script hemen hata verir ve böylece ileride oluşabilecek sorunlar engellenmiş olur.
Örnek Çıktı

Kullanım Örneği
require_command jq docker aws
wrap_with_timer(): Çalıştırma Süresini Ölçme
wrap_with_timer() {
local start end elapsed
start=$(date +%s)
"$@"
local exit_code=$?
end=$(date +%s)
elapsed=$((end - start))
log "INFO" "Command '$*' completed in ${elapsed}s"
return $exit_code
}
wrap_with_timer()
fonksiyonu, çalıştırılan komutun ne kadar sürede tamamlandığını ölçer. Performans optimizasyonları için önemli bilgiler sağlar.
Kullanım Örneği
wrap_with_timer run_long_script
Örnek Çıktı

cleanup(): Geçici Dosyaları Temizleme
cleanup() {
log "INFO" "Cleaning up..."
rm -f /tmp/my-temp-file
}
trap cleanup EXIT
cleanup()
fonksiyonu, script’in beklenmedik şekilde durması ya da tamamlanması durumunda geçici dosyaların temizlenmesini sağlar. Böylece sistemin temiz kalmasına yardımcı olur.
Kullanım Örneği
cleanup
Örnek Çıktı

Temiz Shell Script Yazmanın Yolları ile Hangi Hataları Önleyebilirsiniz?
- Yanlışlıkla önemli dosyaların silinmesi veya kaybolması
- Eksik veya hatalı çevresel değişkenlerin kullanılmasından kaynaklı hata ve çökmeler
- Gerekli komut veya bağımlılıkların bulunmaması sebebiyle scriptlerin çalışmaması
- Uzun süren işlemlerde performans ve zaman yönetimi eksiklikleri
- Kullanıcı onayı olmadan kritik ve geri döndürülemeyen işlemlerin gerçekleşmesi
- Sistem kaynaklarının etkin bir şekilde izlenmemesi ve yönetilmemesi
- Geçici dosya ve kalıntıların sistemde gereksiz yere yer kaplaması
Bu maddeleri dikkate alarak scriptlerinizi daha temiz, daha güvenli ve yönetilebilir hale getirebilirsiniz.
Sonuç
Bu 10 Bash fonksiyonu sayesinde scriptlerinizi daha güvenilir, temiz ve bakımı kolay hale getirebilirsiniz. Shell script yazarken bu fonksiyonları sıkça kullanarak zaman ve enerji tasarrufu sağlayabilirsiniz.
İlginizi çekerse En İyi 17 Adet Linux Ağ ve Sorun Giderme Komutları yazıma da göz gezdirebilirsiniz.