15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın
29.10.2024
1 +1

Linux Bash’te Script Yazımı: Yeni Başlayanlar ve Sistem Yöneticileri için Eksiksiz Bir Kılavuz

Bash betik yazımı, bir Linux kullanıcısının, geliştiricinin veya sistem yöneticisinin geliştirebileceği en güçlü becerilerden biridir. İster tek bir sunucu yönetiyor olun, ister tüm bir altyapı genelinde karmaşık otomatik iş akışlarını düzenliyor olun, Bash betik yazımında uzmanlaşmak manuel çabayı önemli ölçüde azaltır, insan hatalarını en aza indirir ve Linux ortamınızın tam potansiyelini ortaya çıkarır.

Bu kapsamlı kılavuzda, Bash betikleri yazma hakkında bilmeniz gereken her şeyi ele alacağız — ilk dosyanızı oluşturmaktan değişkenler, koşullar, döngüler, fonksiyonlar, argümanlar ve hata ayıklama teknikleriyle çalışmaya kadar. Boyunca pratik, kopyalayıp yapıştırmaya hazır örnekler yer almaktadır.

Bash Betiği Nedir?

Bir Bash betiği, Bash kabuğu (Bourne Again SHell) tarafından yorumlanan ve yürütülen sıralı komutlar içeren düz metin dosyasıdır. Bash, Linux dağıtımlarının büyük çoğunluğunda varsayılan etkileşimli kabuktur; bu da onu evrensel olarak erişilebilir ve hemen pratik kılar.

Terminalde aynı komut dizisini tekrar tekrar yazmak yerine, bunları bir kez bir betik dosyasına yazarsınız ve isteğe bağlı olarak çalıştırırsınız — ya da otomatik olarak çalışacak şekilde zamanlarsınız.

Bash Betiklerinin Yaygın Kullanım Alanları

  • Dosya yönetimi — dosyaları toplu olarak kopyalama, taşıma, yeniden adlandırma, arşivleme ve silme
  • Sistem yönetimi — süreçleri izleme, kullanıcıları yönetme, disk kullanımını kontrol etme
  • Yazılım otomasyonu — paket kurma, servisleri yapılandırma, uygulama dağıtma
  • Yedekleme ve kurtarma — zamanlanmış, artımlı veya tam sistem yedekleri oluşturma
  • Log ayrıştırma ve raporlama — analiz için log verilerini filtreleme ve özetleme
  • Sunucu sağlama — yeni bir VPS Hosting veya özel sunucu ortamının ilk kurulumunu otomatikleştirme

Ön Koşullar

Bu kılavuzu takip etmek için şunlara ihtiyacınız var:

  • Bir Linux sistemi (yerel makine, VM veya uzak sunucu)
  • Bir kullanıcı hesabıyla terminal erişimi (bazı işlemler için root veya sudo ayrıcalıkları)
  • Linux komut satırına temel düzeyde aşinalık

Uzak bir sunucuda çalışıyorsanız, AlexHost’un VPS Hosting planları size tam root SSH erişimi sağlar; bu da onları gerçek dünya ortamında Bash betiklerini pratik yapmak ve dağıtmak için ideal kılar.

Adım 1: Bash Betik Dosyası Oluşturma

Terminalinizi açın ve .sh uzantısıyla yeni bir dosya oluşturmak için herhangi bir metin düzenleyici kullanın. .sh uzantısı, dosyanın bir kabuk betiği olduğunu belirten yaygın bir kuraldır; ancak yorumlayıcı tarafından teknik olarak zorunlu değildir.

nano myscript.sh
nano yerine vim, gedit, micro veya tercih ettiğiniz herhangi bir düzenleyiciyi kullanabilirsiniz.
Adım 2: Shebang Satırını Ekleme (#!)
Her Bash betiğinin ilk satırı shebang olmalıdır — işletim sistemine dosyayı çalıştırırken hangi yorumlayıcının kullanılacağını söyleyen özel bir yönerge.
#!/bin/bash
Bu satır, çekirdeğe betiği yürütmek için /bin/bash‘a iletmesini söyler; mevcut kullanıcının varsayılan olarak hangi kabuğu ayarladığından bağımsız olarak. Her zaman dahil edin — shebang’ı atlamak, betiklerin farklı ortamlarda öngörülemeyen şekilde davranmasına neden olabilir.
> İpucu: Bazı modern sistemlerde, Bash ikili dosyasını PATH aracılığıyla dinamik olarak bulan daha taşınabilir bir alternatif olan #!/usr/bin/env bash‘ı da görebilirsiniz.
Adım 3: Komutlarınızı Yazma
Shebang’dan sonra, betiğin çalıştırmasını istediğiniz komutları ekleyin. İşte mevcut kullanıcıyı selamlayan ve yararlı sistem bilgilerini görüntüleyen basit bir örnek:
#!/bin/bash

# A simple script to greet the user and display system info
echo "Hello, $USER! Welcome back."
echo "Today's date and time: $(date)"
echo "Your current working directory: $(pwd)"
echo "System hostname: $(hostname)"
Temel Öğelerin Açıklaması




Öğe
Açıklama




echo
Terminale (standart çıktıya) metin veya değişken değerleri yazdırır


$USER
Mevcut kullanıcı adını tutan yerleşik bir ortam değişkeni


$(date)
Komut değiştirme — date‘ı çalıştırır ve çıktısını satır içine ekler


$(pwd)
Mevcut çalışma dizini yolunu ekler


$(hostname)
Sistemin ana bilgisayar adını ekler


#
Bir yorum başlatır — yorumlayıcı tarafından yok sayılır, belgeleme için kullanılır




Adım 4: Betiği Çalıştırılabilir Yapma
Betiği doğrudan çalıştırabilmek için, chmod komutunu kullanarak ona çalıştırma izni vermeniz gerekir:
chmod +x myscript.sh
Bu, dosya sahibi için çalıştırma bitini ayarlar. İzinlerin doğru uygulandığını doğrulamak için şunu çalıştırın:
ls -l myscript.sh
-rwxr-xr-x gibi bir şey görmelisiniz; burada x karakterleri çalıştırma iznini onaylar.
Adım 5: Betiği Çalıştırma
Betiği aynı dizinden aşağıdaki sözdizimini kullanarak çalıştırın:
./myscript.sh
./ öneki, kabuğa sistem PATH‘ini aramak yerine dosyayı mevcut dizinde aramasını söyler. Çıktının doğrudan terminalinizde yazdırıldığını görmelisiniz.
Alternatif olarak, yorumlayıcıyla açıkça çağırabilirsiniz:
bash myscript.sh
Bash Betiklerinde Değişkenler
Değişkenler, betiğiniz boyunca verileri depolamanıza ve yeniden kullanmanıza olanak tanır. Dizeler, tam sayılar, dosya yolları veya komutların çıktısını tutabilirler.
Değişkenleri Tanımlama ve Kullanma
#!/bin/bash

# Define variables
server_name="web-server-01"
max_connections=500
backup_dir="/var/backups"

# Use variables
echo "Server: $server_name"
echo "Max connections allowed: $max_connections"
echo "Backup directory: $backup_dir"
Değişkenler İçin Önemli Kurallar

Bir değer atarken = işaretinin etrafında boşluk olmamalıdır (name="value" doğrudur; name = "value" değildir)
Değerini okurken değişken adının önüne $ ekleyin: $variable_name
Karmaşık dizelerde netlik için süslü parantez kullanın: ${variable_name}
Değişken adları büyük/küçük harfe duyarlıdır: $Name ve $name farklı değişkenlerdir

Komut Çıktısını Bir Değişkende Yakalama
#!/bin/bash

current_date=$(date +"%Y-%m-%d")
disk_usage=$(df -h / | awk 'NR==2 {print $5}')

echo "Date: $current_date"
echo "Root partition usage: $disk_usage"
Bash’te Koşullu İfadeler
Koşullu mantık, betiğinizin kararlar almasına ve değerlendirilen koşullara göre farklı kod yollarını çalıştırmasına olanak tanır.
Temel if / elif / else Yapısı
#!/bin/bash

echo "Enter a number between 1 and 100:"
read user_input

if [ "$user_input" -ge 1 ] && [ "$user_input" -le 50 ]; then
    echo "Your number is in the lower half (1–50)."
elif [ "$user_input" -ge 51 ] && [ "$user_input" -le 100 ]; then
    echo "Your number is in the upper half (51–100)."
else
    echo "Your number is outside the valid range."
fi
Yaygın Karşılaştırma Operatörleri




Operatör
Anlam




-eq
Eşit


-ne
Eşit değil


-gt
Büyüktür


-lt
Küçüktür


-ge
Büyük veya eşit


-le
Küçük veya eşit


-z
Dize boş


-n
Dize boş değil


-f
Dosya mevcut ve normal bir dosya


-d
Dizin mevcut




Bir Dosyanın Var Olup Olmadığını Kontrol Etme
#!/bin/bash

config_file="/etc/nginx/nginx.conf"

if [ -f "$config_file" ]; then
    echo "Configuration file found: $config_file"
else
    echo "ERROR: Configuration file not found at $config_file"
    exit 1
fi
Bash Betiklerinde Döngüler
Döngüler, bir komut bloğunu birden çok kez tekrarlamanıza olanak tanır; belirli bir aralık üzerinde, bir öğe listesi üzerinde veya bir koşul değişene kadar.
for Döngüsü — Bir Aralık Üzerinde Yineleme
#!/bin/bash

echo "Counting from 1 to 5:"
for i in {1..5}; do
    echo "  Iteration: $i"
done
for Döngüsü — Bir Öğe Listesi Üzerinde Yineleme
#!/bin/bash

servers=("web-01" "web-02" "db-01" "cache-01")

for server in "${servers[@]}"; do
    echo "Pinging server: $server"
    ping -c 1 "$server" &>/dev/null && echo "  ✔ $server is reachable" || echo "  ✘ $server is unreachable"
done
while Döngüsü — Bir Koşul Yanlış Olana Kadar Çalıştırma
#!/bin/bash

counter=1

while [ $counter -le 5 ]; do
    echo "Counter value: $counter"
    counter=$((counter + 1))
done

echo "Loop complete."
until Döngüsü — Bir Koşul Doğru Olana Kadar Çalıştırma
#!/bin/bash

attempts=0

until [ $attempts -ge 3 ]; do
    echo "Attempt $((attempts + 1))..."
    attempts=$((attempts + 1))
done

echo "Maximum attempts reached."
Bash Betiklerinde Fonksiyonlar
Fonksiyonlar, yeniden kullanılabilir mantık bloklarını kapsüllemenize olanak tanır; betiklerinizi daha temiz, daha modüler ve bakımı daha kolay hale getirir — özellikle karmaşıklıkları arttıkça.
Bir Fonksiyon Tanımlama ve Çağırma
#!/bin/bash

# Define the function
greet_user() {
    local username="$1"
    echo "Hello, $username! Your session started at $(date +"%H:%M:%S")."
}

# Call the function with arguments
greet_user "Alice"
greet_user "Bob"
Pratik Bir Fonksiyon: Servis Durumunu Kontrol Etme
#!/bin/bash

check_service() {
    local service_name="$1"
    if systemctl is-active --quiet "$service_name"; then
        echo "✔ $service_name is running."
    else
        echo "✘ $service_name is NOT running. Attempting to start..."
        systemctl start "$service_name" && echo "  Started successfully." || echo "  Failed to start $service_name."
    fi
}

check_service "nginx"
check_service "mysql"
check_service "ssh"
> Not: local anahtar sözcüğü, bir değişkenin kapsamını fonksiyon içiyle sınırlar; böylece daha büyük betiklerde istenmeyen yan etkiler önlenir.
Komut Satırı Argümanlarıyla Çalışma
Bash betikleri, çağrıldıklarında doğrudan komut satırından girdi kabul edebilir; bu da sağlanan parametrelere göre farklı davranan esnek, yeniden kullanılabilir betikler oluşturmayı mümkün kılar.
Özel Argüman Değişkenleri




Değişken
Açıklama




$0
Betiğin kendisinin adı


$1, $2, $3
Birinci, ikinci ve üçüncü konumsal argümanlar


$#
Geçirilen toplam argüman sayısı


$@
Liste olarak tüm argümanlar


$*
Tek dize olarak tüm argümanlar


$?
Son çalıştırılan komutun çıkış durumu




Örnek: Argüman Kabul Eden Bir Betik
#!/bin/bash

# Validate that exactly two arguments were provided
if [ $# -ne 2 ]; then
    echo "Usage: $0 <source_directory> <destination_directory>"
    exit 1
fi

source_dir="$1"
dest_dir="$2"

# Check that the source directory exists
if [ ! -d "$source_dir" ]; then
    echo "ERROR: Source directory '$source_dir' does not exist."
    exit 1
fi

echo "Copying files from '$source_dir' to '$dest_dir'..."
cp -r "$source_dir" "$dest_dir" && echo "Copy completed successfully." || echo "Copy failed."
Şu şekilde çalıştırın:
./myscript.sh /var/www/html /var/backups/html_backup
Çıkış Kodları ve Hata Yönetimi
Sağlam Bash betikleri her zaman hataları zarif bir şekilde yönetir. Linux’taki her komut bir çıkış kodu döndürür: 0 başarıyı gösterir ve sıfır dışındaki herhangi bir değer bir hatayı gösterir.
exit ve $? Kullanımı
#!/bin/bash

# Attempt to create a directory
mkdir /tmp/test_directory

if [ $? -eq 0 ]; then
    echo "Directory created successfully."
else
    echo "Failed to create directory."
    exit 1
fi
Otomatik Hata Yönetimi İçin set -e Kullanımı
Betiğinizin başına set -e eklemek, herhangi bir komut sıfır dışında bir çıkış kodu döndürürse betiğin hemen çıkmasına neden olur — bu, üretim betikleri için en iyi uygulamadır:
#!/bin/bash
set -e          # Exit on any error
set -u          # Treat unset variables as errors
set -o pipefail # Catch errors in pipelines

echo "Starting deployment..."
cd /var/www/html
git pull origin main
systemctl reload nginx
echo "Deployment complete."
Bash Betiklerinde Hata Ayıklama
Deneyimli geliştiriciler bile hatalı betikler yazar. Bash, sorunları verimli bir şekilde izlemenize ve düzeltmenize yardımcı olmak için yerleşik araçlar sağlar.
Yöntem 1: -x Bayrağıyla Çalıştırma (İzleme Modu)
bash -x myscript.sh
Bu, çalıştırıldığında her komutu terminale + önekiyle birlikte, genişletilmiş değişkenlerin değerleriyle birlikte yazdırır. En yaygın kullanılan hata ayıklama tekniğidir.
Yöntem 2: Betiğin İçine set -x Ekleme
Betiğinizin belirli bölümleri için izlemeyi etkinleştirebilir ve devre dışı bırakabilirsiniz:
#!/bin/bash

echo "Normal execution..."

set -x  # Enable tracing
cp /source/file /destination/
chmod 644 /destination/file
set +x  # Disable tracing

echo "Tracing disabled again."
Yöntem 3: Kontrol Noktaları İçin echo İfadeleri Kullanma
Stratejik olarak yerleştirilmiş echo ifadeleri, değişken değerlerini doğrulamanıza ve çalıştırmanın betikteki belirli bir noktaya ulaştığını onaylamanıza yardımcı olur:
echo "DEBUG: backup_dir = $backup_dir"
echo "DEBUG: Reached checkpoint before rsync"
Pratik Gerçek Dünya Örneği: Otomatik Yedekleme Betiği
İşte bu kılavuzda ele alınan kavramların çoğunu gösteren eksiksiz, üretime hazır bir Bash betiği:
#!/bin/bash
set -euo pipefail

# ============================================================
# Automated Backup Script
# Description: Backs up a specified directory with a timestamp
# ============================================================

# Configuration
SOURCE_DIR="/var/www/html"
BACKUP_ROOT="/var/backups/web"
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BACKUP_NAME="backup_${TIMESTAMP}.tar.gz"
BACKUP_PATH="${BACKUP_ROOT}/${BACKUP_NAME}"
RETENTION_DAYS=7
LOG_FILE="/var/log/backup.log"

# Logging function
log() {
    echo "[$(date +"%Y-%m-%d %H:%M:%S")] $1" | tee -a "$LOG_FILE"
}

# Validate source directory
if [ ! -d "$SOURCE_DIR" ]; then
    log "ERROR: Source directory '$SOURCE_DIR' not found. Aborting."
    exit 1
fi

# Create backup root if it doesn't exist
mkdir -p "$BACKUP_ROOT"

log "Starting backup of '$SOURCE_DIR'..."

# Create compressed archive
tar -czf "$BACKUP_PATH" -C "$(dirname "$SOURCE_DIR")" "$(basename "$SOURCE_DIR")"

log "Backup created: $BACKUP_PATH ($(du -sh "$BACKUP_PATH" | cut -f1))"

# Remove backups older than retention period
log "Removing backups older than ${RETENTION_DAYS} days..."
find "$BACKUP_ROOT" -name "backup_*.tar.gz" -mtime +"$RETENTION_DAYS" -delete

log "Backup process completed successfully."
Bu tür bir betik, herhangi bir üretim sunucusunda paha biçilmezdir. Dedicated Servers veya VPS üzerinde bir web sitesi veya uygulama çalıştırıyorsanız, yedeklemelerinizi böyle bir betikle — bir cron işiyle birleştirerek — otomatikleştirmek, verilerinizin manuel müdahale olmadan her zaman korunmasını sağlar.
Bash Betiklerini Cron ile Zamanlama
Bash betiklerinizi bir programa göre otomatik olarak çalıştırmak için Linux görev zamanlayıcısı olan cron‘u kullanın. Crontab’ınızı şununla düzenleyin:
crontab -e
Aşağıdaki biçimde bir satır ekleyin:
# Run backup script every day at 2:00 AM
0 2 * * * /path/to/backup.sh >> /var/log/backup_cron.log 2>&1
Cron sözdizimi: minute hour day-of-month month day-of-week command

Bash Betikleri Yazmak İçin En İyi Uygulamalar

Bu kurallara uymak betiklerinizi daha güvenilir, okunabilir ve bakımı kolay hale getirecektir:

  1. Her zaman shebang’ı dahil edin (#!/bin/bash) ilk satırda
  2. Hataları erken yakalamak için üretim betiklerinde set -euo pipefail kullanın
  3. Sözcük bölme ve globbing sorunlarını önlemek için değişkenlerinizi tırnak içine alın ("$variable")
  4. Anlamlı değişken adları kullanınbackup_directory, bd‘dan daha açıktır
  5. Kodunuzu yorumlayın — *ne* yaptığını değil, *neden* yaptığını açıklayın
  6. Girdileri doğrulayın — devam etmeden önce gerekli argümanların ve dosyaların var olduğunu kontrol edin
  7. Karmaşık mantığı yeniden kullanılabilir, adlandırılmış bloklara düzenlemek için fonksiyonlar kullanın
  8. Üretim sistemlerinde betikleri çalıştırmadan önce güvenli bir ortamda test edin
  9. Global kapsamı kirletmekten kaçınmak için fonksiyonların içinde local değişkenleri kullanın
  10. Betik davranışını daha sonra denetleyebilmek için önemli eylemleri bir dosyaya kaydedin

Bash Becerilerinizi İlerletme

Temel konularda rahat hissettikten sonra bu ileri düzey konuları keşfetmeyi düşünün:

  • Güçlü metin işleme için grep, sed ve awk ile düzenli ifadeler
  • Betiklere çok satırlı dizeler gömmek için here belgeleri (heredoc)
  • Karmaşık veri ardışık düzenleri için süreç değiştirme ve adlandırılmış kanallar
  • Zarif betik sonlandırma için trap ile sinyal yönetimi
  • Anahtar-değer veri yapıları için ilişkisel diziler (Bash 4+)
  • Betik kütüphanelerisource ile paylaşılan bir dosyadan ortak fonksiyonları kaynak alma

Web uygulamaları, veritabanları veya e-posta altyapısı yönetiyorsanız, Bash betik yazımı küçük projeler için Shared Web Hosting gibi hizmetlerle veya grafik arayüzü kabuk erişimiyle birlikte istediğiniz ortamlar için tam yönetilen bir VPS with cPanel ile doğal olarak eşleşir.

Veri yoğun iş yükleri veya makine öğrenimi ardışık düzenleri çalıştıran ekipler için Bash betikleri, GPU Hosting altyapısındaki işleri düzenlemede — model eğitim çalıştırmalarını otomatikleştirme, veri kümelerini yönetme ve ortam kurulumunu yönetme konularında — eşit derecede değerlidir.

Sonuç

Bash betik yazımı, Linux ile çalışan herkes için vazgeçilmez bir beceridir — ister ilk tekrarlayan görevini otomatikleştiren bir başlangıç seviyesi kullanıcısı olun, ister karmaşık sunucu altyapısını yöneten kıdemli bir sistem yöneticisi. Bu kılavuzda ele alınan kavramlar — dosya oluşturma, değişkenler, koşullar, döngüler, fonksiyonlar, argüman yönetimi, hata yönetimi ve hata ayıklama — güvenilir, üretim kalitesinde betikler yazmanız için ihtiyaç duyduğunuz tam temeli oluşturur.

Küçük başlayın: her gün manuel olarak gerçekleştirdiğiniz bir görevi otomatikleştirin. Güveniniz arttıkça, bu yapı taşlarını saatlerce çalışmayı tasarruf eden, insan hatası riskini azaltan ve sistemleriniz üzerinde size kesin, tekrarlanabilir kontrol sağlayan giderek daha sofistike araçlara dönüştürün.

Bash betiklerinizi pratik yapmak ve dağıtmak için en iyi ortam için AlexHost’un Linux tabanlı VPS Hosting planları yelpazesini keşfedin — geliştiriciler ve sistem yöneticileri için tasarlanmış tam root erişimi, SSD depolama ve esnek yapılandırmalar sunar.

15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın