Bash Scripting İpuçları ve Şablonlar

1. Güvenli Script Başlangıcı
set -euo pipefail

📌Hatalarda, tanımsız değişkenlerde ve pipe kopmalarında scripti anında durdurur.

2. Debug Modunu Aktif Etme
set -x

📌Komutların çalıştırılmadan önce terminale yazdırılmasını sağlar (Kapatmak için set +x).

3. Değişken Tanımlama
HEDEF="/var/www/html"

📌Eşittir (=) etrafında boşluk bırakmadan değişkene değer atar.

4. Varsayılan Değer Atama
KULLANICI=${1:-"Misafir"}

📌Dışarıdan parametre girilmezse değişkene varsayılan olarak "Misafir" değerini atar.

5. Dizin Kontrolü Yapma
if [ -d "/etc/nginx" ]; then echo "Dizin mevcut"; fi

📌Belirtilen yolun klasör olup olmadığını ve var olup olmadığını kontrol eder.

6. Dosya Kontrolü Yapma
if [ -f "ayar.conf" ]; then echo "Dosya mevcut"; fi

📌Belirtilen yolun bir dosya olup olmadığını kontrol eder.

7. Root Yetkisi Kontrolü
if [ "$EUID" -ne 0 ]; then exit 1; fi

📌Scriptin sadece yetkili kullanıcı (root/sudo) tarafından çalıştırılmasını zorunlu kılar.

8. For Döngüsü ile Dosya İşleme
for dosya in *.log; do echo "$dosya"; done

📌Belirli bir uzantıya sahip dosyaları döngüye alarak topluca işlem yapar.

9. Dosyayı Satır Satır Okuma (While Döngüsü)
while IFS= read -r satir; do echo "$satir"; done < "liste.txt"

📌Metin dosyasını boşlukları yutmadan ve karakterleri bozmadan güvenli şekilde okur.

10. Fonksiyon Tanımlama ve Loglama
logla() { echo "[$(date +'%F %T')] INFO: $1" >> islem.log; }

📌Tekrarlayan işlemleri modüler hale getirir ve zaman damgalı log çıktısı üretir.

11. Kullanıcıdan Onay Alma (Girdi Bekleme)
read -p "Devam edilsin mi? (y/n) " CEVAP

📌Script çalışırken duraklayıp kullanıcıdan interaktif olarak bilgi veya onay alır.

12. Regex ile Girdi Doğrulama
if [[ "$CEVAP" =~ ^[Yy]$ ]]; then echo "Onaylandı"; fi

📌Kullanıcının girdiği cevabın büyük/küçük "Y" harfi olup olmadığını doğrular.

13. Arka Plan İşlemini Bekleme (Wait)
komut & wait $!

📌Arka plana atılan son sürecin (PID) bitmesini bekler, ardından scripti devam ettirir.

14. Komut Çıktısını Değişkene Atama
TARIH=$(date +%Y-%m-%d)

📌Bir komutun ürettiği sonucu daha sonra kullanmak üzere değişkene kaydeder.

15. Matematiksel İşlem Yapma
SONUC=$(( 10 + 5 ))

📌Script içerisinde temel aritmetik hesaplamaları gerçekleştirir.

16. Komutun Başarısını Kontrol Etme
if [ $? -eq 0 ]; then echo "Başarılı"; fi

📌Bir önceki komutun hatasız (0) çalışıp çalışmadığını kontrol eder.

17. Null (Boş) Değişken Kontrolü
if [ -z "$DEGISKEN" ]; then echo "Boş"; fi

📌Değişkenin içinin boş olup olmadığını denetler.

18. Dolu Değişken Kontrolü
if [ -n "$DEGISKEN" ]; then echo "Dolu"; fi

📌Değişkenin içerisinde bir değer olup olmadığını denetler.

19. İki String'i Karşılaştırma
if [ "$STR1" == "$STR2" ]; then echo "Eşit"; fi

📌İki metin değerinin birebir aynı olup olmadığını kontrol eder.

20. Sayısal Büyüklük Kontrolü
if [ "$SAYI" -gt 10 ]; then echo "10'dan büyük"; fi

📌Değerin belirtilen sayıdan büyük (greater than) olup olmadığını denetler.

21. Sayısal Küçüklük Kontrolü
if [ "$SAYI" -lt 10 ]; then echo "10'dan küçük"; fi

📌Değerin belirtilen sayıdan küçük (less than) olup olmadığını denetler.

22. Case-Switch Yapısı
case "$1" in start) echo "Başlıyor";; stop) echo "Duruyor";; esac

📌Birden fazla koşulu kontrol etmek için if-else yerine kullanılır.

23. Çıktıyı Hem Ekrana Hem Dosyaya Yazma
echo "Mesaj" | tee cikti.log

📌Komut sonucunu terminalde gösterirken aynı anda dosyaya kaydeder.

24. Sadece Hataları Loglama
komut 2> hata.log

📌Sadece stderr (hata) çıktılarını dosyaya yönlendirir.

25. Hem Çıktıyı Hem Hatayı Loglama
komut &> tam_cikti.log

📌Stdout ve stderr çıktılarını aynı dosyada birleştirir.

26. Çıktıyı Yok Sayma (Dev Null)
komut > /dev/null 2>&1

📌Komutun ekrana hiçbir şey basmamasını sağlar.

27. Dizi (Array) Tanımlama
DIZI=("Elma" "Armut" "Muz")

📌Birden fazla değeri aynı değişkende saklar.

28. Dizinin Tüm Elemanlarını Ekrana Basma
echo "${DIZI[@]}"

📌Bir dizideki tüm değerleri boşlukla ayırarak yazdırır.

29. Dizi Uzunluğunu Bulma
echo "${#DIZI[@]}"

📌Dizinin içerisinde kaç adet eleman olduğunu verir.

30. Diziye Yeni Eleman Ekleme
DIZI+=("Kiraz")

📌Mevcut dizinin sonuna yeni bir eleman ekler.

31. String Kesme (Substring)
echo "${METIN:0:5}"

📌Metnin sadece ilk 5 karakterini alır.

32. String Değiştirme (Replace)
echo "${METIN/Eski/Yeni}"

📌Metin içindeki ilk eşleşen "Eski" kelimesini "Yeni" ile değiştirir.

33. Tüm Stringleri Değiştirme (Replace All)
echo "${METIN//Eski/Yeni}"

📌Metin içindeki tüm eşleşen kelimeleri değiştirir.

34. Baştaki veya Sondaki Boşlukları Silme (Trim)
METIN=$(echo "$METIN" | xargs)

📌Metnin başındaki ve sonundaki gereksiz boşlukları temizler.

35. Rastgele Sayı Üretme
echo $RANDOM

📌0 ile 32767 arasında rastgele bir sayı üretir.

36. Belirli Bir Aralıkta Rastgele Sayı
echo $(( RANDOM % 100 + 1 ))

📌1 ile 100 arasında rastgele bir sayı verir.

37. Trap ile Sinyal Yakalama (Ctrl+C)
trap "echo 'Kapatılamaz!'; exit" SIGINT

📌Kullanıcı Ctrl+C yaptığında belirli bir komutu çalıştırır veya iptal eder.

38. Geçici Dosya Oluşturma
TEMP=$(mktemp)

📌Sistemde benzersiz ve güvenli bir geçici dosya (temp file) oluşturur.

39. Geçici Klasör Oluşturma
TEMP_DIR=$(mktemp -d)

📌Benzersiz bir geçici klasör oluşturur.

40. Script Kapanırken Temizlik Yapma
trap "rm -f $TEMP" EXIT

📌Script normal veya hatalı kapandığında geçici dosyaları temizler.

41. Sonsuz Döngü
while true; do echo "Çalışıyor"; sleep 1; done

📌Belirli aralıklarla sürekli çalışan işlemler için kullanılır.

42. Argüman Sayısını Kontrol Etme
if [ "$#" -ne 2 ]; then echo "2 parametre girilmeli!"; exit 1; fi

📌Scripte gönderilen dış argüman sayısını ($#) kontrol eder.

43. Tüm Parametreleri İşleme
for arg in "$@"; do echo "$arg"; done

📌Scripte gönderilen tüm argümanları sırayla işler.

44. Komut Var Mı Kontrolü
if ! command -v curl &> /dev/null; then echo "curl yok"; fi

📌Bir komutun sistemde kurulu olup olmadığını güvenli şekilde denetler.

45. Tarih Farkı Hesaplama
FARK=$(( $(date -d "2024-01-01" +%s) - $(date +%s) ))

📌İki tarih arasındaki farkı saniye cinsinden hesaplar.

46. UUID Üretme
uuidgen

📌Benzersiz bir UUID kimliği oluşturur.

47. Dosyadaki Boş Satırları Silme
sed -i '/^$/d' dosya.txt

📌Metin dosyasındaki tüm boş satırları temizler.

48. Sadece Belirli Satırı Yazdırma
sed -n '5p' dosya.txt

📌Dosyanın sadece 5. satırını ekrana basar.

49. Metin Dosyasının İlk Satırını Silme
sed -i '1d' dosya.txt

📌Dosyanın başlığından (ilk satırından) kurtulmak için kullanılır.

50. Satır Sonuna Metin Ekleme
sed -i 's/$/ YENIMETIN/' dosya.txt

📌Tüm satırların sonuna belirli bir metin ekler.

51. İstenen Sütunu Yazdırma (awk)
awk '{print $2}' dosya.txt

📌Boşluklarla ayrılmış dosyanın sadece 2. sütununu alır.

52. Ayırıcı (Delimiter) Belirterek Sütun Alma
awk -F':' '{print $1}' /etc/passwd

📌İki nokta üst üste (:) ile ayrılmış verilerin ilk kısmını çeker.

53. JSON Ayrıştırma (jq)
cat veri.json | jq '.isim'

📌JSON çıktısındaki belirli bir anahtarı kolayca okur.

54. Büyük Harfe Çevirme
echo "$METIN" | tr '[:lower:]' '[:upper:]'

📌Metindeki tüm küçük harfleri büyük harfe dönüştürür.

55. Küçük Harfe Çevirme
echo "$METIN" | tr '[:upper:]' '[:lower:]'

📌Metindeki tüm büyük harfleri küçük harfe dönüştürür.

56. İstenmeyen Karakterleri Silme
echo "$METIN" | tr -d 'a-z'

📌Metindeki tüm küçük harfleri tamamen siler.

57. Dosyanın Son Değiştirilme Zamanını Alma
stat -c %y dosya.txt

📌Dosyanın en son ne zaman düzenlendiğini gösterir.

58. Saniye Cinsinden Bekleme (Sleep)
sleep 5

📌Scripti 5 saniye boyunca duraklatır.

59. Çok Satırlı Yorum Ekleme
: <<'END' yorumlar END

📌Bash'te uzun yorum blokları oluşturmak için kullanılır.

60. Çok Satırlı Dosya Oluşturma (HereDoc)
cat <<EOF > dosya.txt
Satır 1
Satır 2
EOF

📌Script içerisinden dosyanın içine çok satırlı veri yazar.

61. Satır Numarası Vererek Yazdırma
cat -n dosya.txt

📌Dosyayı satır numaralarıyla birlikte ekrana basar.

62. Yalnızca Benzersiz Satırları Bulma
sort dosya.txt | uniq

📌Dosyadaki tekrarlayan satırları teke düşürür.

63. Tekrarlayan Satırların Sayısını Bulma
sort dosya.txt | uniq -c

📌Hangi satırın kaç kez tekrar ettiğini sayarak gösterir.

64. İç İçe Dizin Oluşturma
mkdir -p /klasor1/klasor2/klasor3

📌Gerekli tüm üst klasörlerle birlikte iç içe dizinler yaratır.

65. Dosyanın Hash (MD5) Değerini Alma
md5sum dosya.txt

📌Dosyanın bütünlüğünü kontrol etmek için MD5 özetini çıkarır.

66. Komut Çıktısını Diziye Atama
DIZI=( $(ls) )

📌Bir komutun sonucundaki her kelimeyi bir dizi elemanı yapar.

67. Cron İçin Script Dizini Bulma
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

📌Script cron veya başka bir klasörden çalışsa bile kendi dizinini bulur.

68. Belirli Boyuttan Büyük Dosyaları Bulma
find / -type f -size +100M

📌Sistemde 100MB'dan büyük dosyaları arar.

69. Son 7 Günde Değişen Dosyaları Bulma
find . -type f -mtime -7

📌Son 1 hafta içinde güncellenmiş dosyaları listeler.

70. Boş Klasörleri Silme
find . -type d -empty -delete

📌Sistemdeki veya dizindeki tüm boş klasörleri temizler.

71. Bir Klasördeki Dosyaları Arşivleme
tar -czvf yedek.tar.gz /klasor

📌Belirtilen klasörü sıkıştırarak tar.gz arşivi yapar.

72. Arşiv İçeriğini Görüntüleme
tar -tf yedek.tar.gz

📌Sıkıştırılmış dosyanın içini çıkartmadan listeler.

73. SSH Üzerinden Komut Çalıştırma
ssh user@host "df -h"

📌Uzak bir sunucuya bağlanıp komut çalıştırır ve çıkar.

74. Şifresiz SSH Girişi İçin Key Kopyalama
ssh-copy-id user@host

📌SSH anahtarınızı karşı sunucuya kopyalayarak parolasız girişi sağlar.

75. Dosya Boyutu Kontrolü
BOYUT=$(stat -c%s "dosya.txt")

📌Dosyanın boyutunu byte cinsinden hesaplar.

76. Arka Plandaki İşlemleri Listeleme
jobs -l

📌O anki terminal oturumunda arka plana atılan işlemleri gösterir.

77. Log Dosyasını Anlık Temizleme (Truncate)
> /var/log/syslog

📌Dosyayı silmeden içeriğini anında boşaltır (boyutunu 0 yapar).

78. Menü Oluşturma (Select)
select SECIM in "Baslat" "Durdur" "Cikis"; do echo "$SECIM secildi"; break; done

📌Kullanıcıya interaktif, numaralı bir seçim menüsü sunar.

79. Ağ Bağlantısı Kontrolü Yapma
if ping -c 1 8.8.8.8 &> /dev/null; then echo "İnternet var"; fi

📌Dış ağa erişim olup olmadığını test eder.

80. Port Açık Mı Kontrolü (Netcat)
nc -z -v -w5 127.0.0.1 80

📌Belirtilen portun yanıt verip vermediğini test eder.

81. Sembolik Link Oluşturma
ln -s /gercek/yol /link/yolu

📌Bir dosyaya veya klasöre kısayol oluşturur.

82. Mevcut Sembolik Linkin Hedefini Öğrenme
readlink -f /link/yolu

📌Kısayolun asıl olarak nereyi işaret ettiğini gösterir.

83. Parola Üretici
openssl rand -base64 14

📌Rastgele ve güvenli bir parola/token stringi üretir.

84. Tüm Dosya İsimlerini Küçük Harf Yapma
for f in *; do mv "$f" "${f,,}"; done

📌Klasördeki tüm dosyaların adını küçük harfe çevirir.

85. İşletim Sistemi Türünü Öğrenme
OS=$(uname -s)

📌Sistemin Linux mu, Darwin (Mac) mi olduğunu gösterir.

86. Komut Çalışma Süresini Ölçme
time komut_ismi

📌Komutun bitmesinin ne kadar süre (real, user, sys) aldığını ölçer.

87. Komutu Belirli Süre Çalıştırıp Kapatma (Timeout)
timeout 10s komut

📌Komut 10 saniye içinde bitmezse süreci zorla öldürür.

88. Watch İle Komutu Tekrarlama
watch -n 2 ls -l

📌Belirtilen komutu her 2 saniyede bir çalıştırarak çıktıyı günceller.

89. Dizindeki En Büyük Dosyaları Bulma
du -sh * | sort -hr | head -10

📌Klasördeki en büyük 10 dosyayı/klasörü sıralar.

90. Metin Dosyalarını Birleştirme
cat dosya1.txt dosya2.txt > birlesik.txt

📌İki veya daha fazla dosyanın içeriğini tek bir dosyada toplar.

91. Kendi Kendini Yok Eden Script
rm -f "$0"

📌Scriptin çalışmasını bitirdikten sonra kendi dosyasını silmesini sağlar.

92. Satır Satır Veri Birleştirme (Paste)
paste dosya1.txt dosya2.txt

📌İki dosyanın satırlarını yan yana getirerek birleştirir.

93. Hex Çıktısı Alma
hexdump -C dosya.bin

📌Binary dosyaları okunabilir hex formatında gösterir.

94. Terminali Kapatınca Kapanmayan Süreç (Nohup)
nohup komut &

📌Siz terminalden çıksanız bile işlemin arka planda çalışmasını sürdürür.

95. Hangi Dağıtım Olduğunu Bulma
cat /etc/os-release

📌Ubuntu, CentOS, Debian gibi işletim sistemi detaylarını gösterir.

96. Base64 Şifreleme
echo "Metin" | base64

📌String ifadeyi base64 formatında kodlar.

97. Base64 Çözme
echo "TWV0aW4K" | base64 -d

📌Base64 ile kodlanmış ifadeyi normal metne çevirir.

98. Açık Olan Dosyaları Görme (lsof)
lsof -i :80

📌80 portunu dinleyen süreç ve dosyaları listeler.

99. Scripti Belirli CPU Core'unda Çalıştırma
taskset -c 0 ./script.sh

📌Scriptin sadece 0. CPU çekirdeğini kullanmasını zorlar.

100. Terminal Ekranını Renklendirme
echo -e "\e[31mKırmızı Metin\e[0m"

📌Çıktıya renk (Red) ekleyerek dikkat çekici loglar oluşturur.