.sh Dosyası Nedir? Shell Script, Bash ve Linux Rehberi
- 4 Kasım 2025
- 22:51
- Eğitimler

Giriş
Shell betikleri Linux ve Unix sistem yönetiminin temelidir; üretkenliği ve sistem yönetiminin verimliliğini ciddi şekilde artıran güçlü otomasyon yetenekleri sunar. Bir .sh dosyası, komutları yorumlamak ve tekrar eden sistem görevlerini otomatikleştirmek için tasarlanmış özel bir programlama dili olan shell dilinde yazılmış bir betiktir.
Yüzlerce sunucuyu yöneten bir sistem yöneticisi, dağıtım pipeline'larını otomatikleştiren bir geliştirici veya teknik becerilerini geliştirmek isteyen bir Linux meraklısı olun, shell betiklerini anlamak vazgeçilmezdir. Bu kapsamlı rehber; .sh dosyalarının ne olduğunu, nasıl çalıştığını, farklı shell uygulamalarını ve gerçek dünyadan betikleme örneklerini açıklar.
.sh dosyası nedir?
Tanım
A .sh file is a plain text file containing a series of shell commands executed sequentially by a shell interpreter. The .sh extension indicates the file is a shell script, though many shell scripts omit this extension in practice.
Shell betikleri, etkileşimli komut satırı kullanımı ile tam programlama arasındaki köprüyü temsil eder. Şunları yapmanıza olanak tanır:
-
Tekrarlanan görevleri otomatikleştirme
-
Birden çok komutu karmaşık iş akışlarında birleştirme
-
Yeniden kullanılabilir yönetim araçları oluşturma
-
Otomatik bakım işlemlerini planlama
-
Uygulamaları programatik olarak dağıtma
Özellikler
Plain Text Format: Unlike compiled programs requiring compilation, shell scripts are human-readable text interpreted directly by the shell.
Interpreter-Based: Execution depends on the specified shell interpreter (Bash, Ksh, etc.), not the underlying system architecture.
Shebang Satırı: Çoğu kabuk komut dosyası, hangi kabuk yorumlayıcısının kullanılacağını belirten bir shebang (#!/bin/bash) ile başlar.
Çapraz Platform: Kabuk komut dosyaları farklı Unix/Linux sistemlerinde tutarlı şekilde çalışır (uygun kabukların kurulu olduğu varsayılarak).
Gerçek Dünya Uygulamaları
-
Sistem başlatma ve kapatma betikleri
-
Yedekleme ve geri yükleme otomasyonu
-
Sunucu izleme ve uyarı
-
Uygulama dağıtım hatları
-
Günlük dosyalarının işlenmesi ve analizi
-
Kullanıcı hesabı sağlama
-
Ağ yapılandırma otomasyonu
-
Veritabanı bakım görevleri
Shell scripting temelleri
Shell Nedir?
Shell, kullanıcılar ile işletim sistemi çekirdeği arasında bir arayüz sağlayan komut yorumlayıcısıdır. Kullanıcı komutlarını alır, yorumlar ve karşılık gelen programları yürütür.
Shell İşlevleri:
-
Kullanıcı komutlarını okuma ve ayrıştırma
-
Çalıştırılabilir programları arama
-
Programları uygun argümanlarla yürütme
-
Giriş/çıkış yönlendirmesini yönetme
-
İşlem kontrolünü yönetme
-
Programlama yapılarını uygulama (döngüler, koşullar)
Neden Shell Betikleri Kullanmalı?
Automation: Execute complex sequences automatically without manual intervention.
Efficiency: Complete in seconds what might take hours manually.
Tutarlılık: Birden çok sistemde aynı işlemleri sağlayın.
Belgeleme: Komut dosyası yorumları, gelecekteki referans için prosedürleri belgeler.
Scalability: Scale operations from one server to hundreds without additional effort.
Recovery: Rebuild systems quickly using existing scripts.
Popüler shell uygulamaları
Bash (Bourne-Again Shell)
Market Share: ~95% of Linux systems
Creator: Brian Fox (GNU Project)
Features: Kapsamlı feature set, scripting capabilities
Sözdizimi: Orijinal Bourne kabuğuyla uyumlu
Kullanım Senaryosu: Çoğu Linux dağıtımında varsayılan
Bash, Linux shell betikleri için fiili standarttır. Orijinal shell'lerle uyumluluğu modern özelliklerle dengeler.
Ksh (Korn Shell)
Creator: David Korn (AT&T Bell Labs)
Features: Gelişmiş programming capabilities, faster execution
Syntax: Superset of Bourne shell
Use Case: Preferred on Unix systems (Solaris, AIX)
Advantages: Daha iyi performance for compute-intensive operations
Ksh, kurumsal Unix ortamlarında, özellikle ticari Unix sistemlerinde yaygın olmaya devam ediyor.
Sh (Bourne Shell)
Original POSIX Standard Shell
Creator: Stephen Bourne (AT&T Bell Labs)
Features: Minimum, standardized functionality
Modern Status: Largely historical; contemporary shells provide compatibility
Sh, tüm Unix benzeri sistemlerde temel uyumluluğu sağlayan POSIX standardını temsil eder.
Zsh (Z Shell)
Creator: Paul Falstad
Features: Interactive features, scripting capabilities
Modern Focus: Enhanced user experience over pure scripting
Use Case: Growing in popularity among developers
Zsh, betikleme gücünü kullanıcı dostu etkileşimli özelliklerle dengeleyen modern shell evrimini temsil eder.
Tcsh/Csh
Csh Creator: Bill Joy (Berkeley)
Modern Version: Tcsh (enhanced csh)
Features: C-like syntax
Status: Declining usage, maintained primarily for compatibility
Csh türevleri bazı sistemlerde varlığını sürdürse de Bash/Ksh'a kıyasla giderek azalan avantajlar sunar.
Bash, Ksh ve diğer kabuklar
Karşılaştırma Tablosu
| Feature | Bash | Ksh | Zsh | Sh |
|---|---|---|---|---|
| Komut Geçmişi | Yes | Yes | Yes | No |
| Komut Tamamlama | Basic | Basic | Gelişmiş | No |
| Diziler | İndekslenmiş | İndekslenmiş + İlişkisel | Yes | No |
| Desen Eşleştirme | Glob desenleri | Gelişmiş | Gelişmiş | Sınırlı |
| Fonksiyonlar | Yes | Yes | Yes | Yes |
| Aritmetik | $(()) |
(()) |
$(()) |
Sınırlı |
| POSIX Uyumluluğu | ~95% | 100% | ~90% | 100% |
| Performans | Good | Daha iyi | Good | En hızlı |
| Komut Dosyası Özellikleri | Kapsamlı | Daha gelişmiş | En gelişmiş | Minimum |
| Uyumluluk | Mükemmel | Mükemmel | Good | Evrensel |
| Öğrenme Eğrisi | Orta | Orta | Daha dik | En kolay |
| Tipik Kullanım | Varsayılan Linux | Kurumsal Unix | Geliştirici tercihi | Compatibility |
When to Choose Each Shell
Bash'i Şu Durumlarda Seçin:
-
Linux sistemleriyle maksimum uyumluluk
-
Bash sözdizimi bekleyen araçlarla çalışma
-
Ekibin Bash'e aşinalığı
-
Linux odaklı ortamlar
Ksh'yi Şu Durumlarda Seçin:
-
Performans kritik işlemler
-
Kurumsal Unix environments
-
Gelişmiş programlama özellikleri gerektiren
-
Eski Unix sistemlerini destekleme
Zsh'yi Şu Durumlarda Seçin:
-
Etkileşimli kabuk kullanımı önceliklendirildi
-
Gelişmiş user experience desired
-
Geliştirici odaklı ortamlar
-
Modern Linux dağıtımları
Sh'yi Şu Durumlarda Seçin:
-
Maksimum POSIX taşınabilirliği gereklidir
-
Çeşitli Unix platformlarını destekleme
-
Bağımlılıkları en aza indirme
-
Hafif yürütme gerekli
Shell betikleri oluşturma ve çalıştırma
Creating a Basic Shell Script
Step 1: Create Filetouch myscript.sh
Step 2: Edit Filenano myscript.sh
Step 3: Add Shebang and Commands#!/bin/bash
echo "Hello, World!"
date
Step 4: Make Executablechmod +x myscript.sh
Step 5: Execute./myscript.sh
Execution Methods
Direct Execution (requires executable permissions)./myscript.sh
Explicit Interpreterbash myscript.sh
Source Command (executes in current shell)source myscript.sh
or
. myscript.sh
Understanding the Shebang
The shebang (#!) specifies which interpreter executes the script:#!/bin/bash # Use Bash
#!/bin/ksh # Use Ksh
#!/usr/bin/env bash # Use Bash via environment (more portable)
#!/usr/bin/python # Use Python interpreter
Temel shell betiği söz dizimi
Variables
# Variable assignment (no spaces around =)
name="John"
age=30
# Using variables
echo "Name: $name"
echo "Age: $age"
# Command substitution
current_date=$(date)
file_count=$(ls -1 | wc -l)
# Arrays (Bash)
fruits=("Apple" "Banana" "Cherry")
echo ${fruits} # Access first element
Conditional Statements
# If-else
if [ $age -gt 18 ]; then
echo "Adult"else
echo "Minor"
fi
# Case statement
case $day in
Monday)
echo "Start of week"
;;
Friday) echo "End of week"
;;
*)
echo "Midweek"
;;esac
Loops
# For loopfor i in 1 2 3 4 5; do echo "Number: $i"done# While loop
count=0
while [ $count -lt 5 ]; do echo "Count: $count" ((count++))
done
# Until loop
until [ $count -eq 10 ]; do
echo "Count: $count" ((count++))
done
Functions
# Function definitiongreet() {echo "Hello, $1!"}# Function with return valueadd() {return $(($1 + $2))}# Function calls
greet "Alice"add 5 3echo "Sum: $?" # $? holds return valueİleri düzey betikleme kavramları
Error Handling
#!/bin/bashset -e # Exit on error# Check command successif ! command_name; then echo "Command failed" exit 1fi# Trap errorstrap 'echo "Error on line $LINENO"' ERR
File Operations
# File existence checkingif [ -f "/path/to/file" ]; then echo "File exists"fi# Directory operationsif [ -d "/path/to/dir" ]; thenecho "Directory exists"fi# Read file line-by-linewhile IFS= read -r line; doecho "Line: $line"done < filename.txt
User Input
# Read from userread -p "Enter your name: " name
# Read multiple valuesread -p "Enter values: " val1 val2 val3
# Read into arrayread -a array_namePratik örnekler
System Backup Script
#!/bin/bash# Backup important directoriesBACKUP_DIR="/backup"TIMESTAMP=$(date +%Y%m%d_%H%M%S)echo "Starting backup..."# Create backup directorymkdir -p "$BACKUP_DIR"# Backup home directorytar -czf "$BACKUP_DIR/home_$TIMESTAMP.tar.gz" /home
# Backup system configurationtar -czf "$BACKUP_DIR/etc_$TIMESTAMP.tar.gz" /etc
echo "Backup complete: $BACKUP_DIR/home_$TIMESTAMP.tar.gz"
Disk Space Monitor
#!/bin/bashTHRESHOLD=80ALERT_EMAIL="[email protected]"# Check disk usagedisk_usage=$(df / | awk 'NR==2 {print $5}' | cut -d'%' -f1)if [ $disk_usage -gt $THRESHOLD ]; thenecho "Disk usage critical: $disk_usage%" | mail -s "Alert" $ALERT_EMAILecho "Alert sent to $ALERT_EMAIL"fi
User Account Provisioning
#!/bin/bashread -p "Enter username: " usernameread -p "Enter email: " email
# Create useruseradd -m -s /bin/bash "$username"# Set password (prompt method recommended)echo "Set password for $username:"passwd "$username"# Add to groupsusermod -aG sudo "$username"echo "User $username created successfully"Uzak sunucu yönetimi neden shell betiklerine dayanır
RDP veya SSH bağlantıları aracılığıyla uzak sunucuları yöneten sistem yöneticileri, sıklıkla kabuk komut dosyaları çalıştırır:
-
Otomatik Dağıtımlar: Uygulamaları birden çok sunucuda eşzamanlı olarak dağıtın
-
Sistem Bakımı: Rutin bakım görevlerini planlayın ve yürütün
-
Monitoring: Continuously monitor system health and log anomalies
-
Backup Operations: Automate critical data backup procedures
-
Güvenlik Güncellemeleri: Güvenlik yamalarını altyapı genelinde dağıtın
Professional remote desktop management platforms like RDP.Monster enable shell script execution across enterprise infrastructure:
RDP.Monster ile Linux Altyapısı Yönetimi
Kurumsal Linux Yönetimi
-
Uzaktan kabuk komut dosyası yürütme için SSH erişimi
-
Otomatik dağıtım yetenekleri
-
Birden çok sunucuda toplu işlemler
-
Gerçek zamanlı izleme ve uyarı
Komut Dosyası Altyapısı için VPS Çözümleri
-
Hesaplama yoğun komut dosyaları için adanmış kaynaklar
-
Kalıcı cron iş zamanlaması
-
Planlanmış işlemler için güvenilir çalışma süresi
-
Artan komut dosyası karmaşıklığı için ölçeklenebilir altyapı
Deploy enterprise Linux infrastructure for sophisticated shell script operations with RDP.Monster
Sonuç
Shell scripts represent a powerful automation tool essential for Linux system administration and development. Understanding .sh files, shell implementations, and scripting techniques enables IT professionals to dramatically increase productivity, ensure consistency, and manage complex infrastructure efficiently.
Linux'ta Bash, kurumsal Unix'te Ksh veya etkileşimli geliştirme için Zsh kullansanız da, kabuk komut dosyası yazmada ustalaşmak yetenekli yöneticileri yalnızca yetkin olanlardan ayırır. Sağlam komut dosyası becerileri geliştirme yatırımı, on yıllarca Linux sistem yönetimi için getiri sağlar.
Managing complex Linux infrastructure requiring sophisticated automation? RDP.Monster provides SSH access and VPS infrastructure optimized for running mission-critical shell scripts at scale. Explore Linux-friendly VPS solutions today.
Güçlü Linux VPS barındırma
Linux VPS'lerimizle tam kontrolün ve şimşek hızında performansın tadını çıkarın. Uygulama barındırmak, sunucu yönetmek ve iş akışınızı optimize etmek için mükemmeldir.
Yüksek performanslı dedicated sunucular
Maksimum kontrol ve güç mü gerekiyor? Dedicated sunucularımız zorlu görevler için eşsiz performans sunar.
Sıkça sorulan sorular
.sh ile bash betikleri arasındaki fark nedir?
Bir bash betiği .sh olarak çalışır ama her .sh betiği bash değildir.
#!/bin/bash mi yoksa #!/usr/bin/env bash mı kullanmalıyım?
Cron'dan çalıştırınca betiklerim neden hata veriyor?
Mutlak yollar kullanın, ortam değişkenlerini açıkça tanımlayın ve shebang'da yorumlayıcının tam yolunu belirtin.
Bir betiği nasıl çalıştırılabilir hale getirebilirim?
Shell betiklerini Windows üzerinde çalıştırabilir miyim?
Yerel Windows otomasyon için PowerShell'i tercih eder.
. ile source komutları arasındaki fark nedir?
source daha açıktır; . ise eski kabuklarla uyumludur.
Bir shell betiğini nasıl hata ayıklarım?
Satır satır yürütme izlemesi için bash -x scriptname.sh kullanın veya betiğe set -x ekleyin.
Shell betiklerine argüman geçebilir miyim?
Konumsal parametreler kullanın: $1 (ilk argüman), $2 (ikincisi) vb. $@ tüm argümanları içerir.
İlgili yazılar




