🚀 BAŞTAN SONA BASH SCRIPTING BÖLÜM-5: Fonksiyonlar ve İnteraktif `select` Menüleri 🛠️

Konu Özeti

Bash scripting serisinin 5. bölümünde fonksiyon tanımlama yöntemleri, parametre geçirme, return kullanımı ve değişken kapsamı (local vs global) ele alınıyor. Ayrıca select yapısıyla interaktif konsol menüleri oluşturma örnekleniyor. Kod modülerliği ve güvenliği için local değişken kullanımının önemi vurgulanıyor.

🚀 BAŞTAN SONA BASH SCRIPTING BÖLÜM-5: Fonksiyonlar ve İnteraktif `select` Menüleri 🛠️

Selamlar! Serimizin 5. bölümüne hoş geldiniz.

Önceki bölümde `for`, `while` ve `until` döngülerini ve dosya okuma tekniklerini öğrenmiştik. Bu bölümde ise kodlarımızı modüler hale getiren **Fonksiyonlar (Functions)**, **Kapsam Yönetimi (Local vs Global Değişkenler)** ve terminalde pratik seçim menüleri oluşturmamızı sağlayan **`select` Yapısını** inceleyeceğiz.

---

📌 1. Bash'te Fonksiyon Tanımlama ⚙️

Fonksiyonlar, tekrar eden kod bloklarını tek bir isim altında toplayarak istediğimiz zaman yeniden çağırmamızı sağlar.

Bash'te iki farklı tanımlama yöntemi vardır:

#!/bin/bash

# 1. Yöntem (Standart):
fonksiyon_adi() {
echo "1. Yöntem ile fonksiyon çalıştı!"
}

# 2. Yöntem ('function' anahtar kelimesi ile):
function ikinci_fonksiyon {
echo "2. Yöntem ile fonksiyon çalıştı!"
}

# Fonksiyonları Çağırma (Parantez KULLANILMAZ!):
fonksiyon_adi
ikinci_fonksiyon

---

📥 2. Fonksiyonlara Parametre Geçirme ve `return` 🔄

Bash fonksiyonlarında parametreler parantez içine yazılmaz. Tıpkı betiğin kendisine argüman geçer gibi çağrılır ve fonksiyon içinde `$1`, `$2`, `$3` şeklinde okunur.

#!/bin/bash

# Parametre Alan Fonksiyon
karsila() {
local ISIM=$1
local UNVAN=$2
echo "Hoş geldiniz Sayın $UNVAN $ISIM! 👋"
}

# Çağırma:
karsila "Ahmet" "Mühendis"
karsila "Ayşe" "Yönetici"

### Fonksiyonlarda `return` Mantığı:
Bash'te `return` ifadesi sayısal bir **çıkış kodu (exit status: 0-255)** döndürür. `0` başarılı, `0` dışındaki sayılar hata anlamına gelir.

Eğer bir fonksiyondan metin/değer döndürmek istiyorsak `echo` ve komut ikamesi (`$()`) kullanırız:

topla() {
local SONUC=$(($1 + $2))
echo $SONUC
}

TOPLAM=$(topla 15 25)
echo "Hesaplanan Toplam: $TOPLAM"

---

🔒 3. Değişken Kapsamı: `local` vs Global Değişkenler 🛡️

Varsayılan olarak Bash içindeki tüm değişkenler **Global**'dir. Bir fonksiyon içinde tanımlanan değişken, fonksiyon bittikten sonra da erişilebilir kalır.

Kod karmaşasını ve değişken çakışmalarını önlemek için fonksiyon içindeki değişkenlerin başına kesinlikle **`local`** yazılmalıdır!

#!/bin/bash

TEST_VAR="Global Değer"

test_fonksiyonu() {
local TEST_VAR="Local (Yerel) Değer"
echo "Fonksiyon İçinde: $TEST_VAR"
}

test_fonksiyonu
echo "Fonksiyon Dışında: $TEST_VAR"

# Çıktı:
# Fonksiyon İçinde: Local (Yerel) Değer
# Fonksiyon Dışında: Global Değer

---

🎛️ 4. İnteraktif Menü Oluşturma: `select` Yapısı 📋

`select`, kullanıcıya numaralandırılmış bir seçenek listesi sunan ve kullanıcının seçim yapmasını bekleyen özel bir döngü yapısıdır.

Özellikle sistem yönetimi betiklerinde ve konsol araçlarında harika arayüzler oluşturur.

#!/bin/bash

# Menü başlığını/istemini değiştirme ($PS3 değişkeni):
PS3="Lütfen yapmak istediğiniz işlemi seçin (1-4): "

options=("Sistem Durumu" "Disk Kullanımı" "Bellek (RAM) Bilgisi" "Çıkış")

select SECENEK in "${options[@]}"
do
case $SECENEK in
"Sistem Durumu")
echo "--- Sistem Uptime ---"
uptime
;;
"Disk Kullanımı")
echo "--- Disk Alanı ---"
df -h /
;;
"Bellek (RAM) Bilgisi")
echo "--- RAM Kullanımı ---"
free -m
;;
"Çıkış")
echo "Güle güle! 👋"
break
;;
*)
echo "Geçersiz seçim! Lütfen 1 ile 4 arasında bir sayı girin."
;;
esac
done

---

📝 Bölüm Özeti ve Gelecek Bölüm 🔮

Bu bölümde modüler fonksiyon yazımını, parametre yönetimini, `local` değişken güvenliğini ve `select` yapısıyla interaktif menüler hazırlamayı öğrendik.

👉 Bölüm 6'da Bizi Ne Bekliyor?
• Diziler (Arrays): Indeksli ve İlişkisel Diziler (Associative Arrays)
• Dizi Elemanlarını Ekleme, Silme ve Di
limleme
• Dizi Uzunluğu Hesaplama (`${#dizi[@]}`)

Sorularınızı konu altından iletebilirsiniz. Bir sonraki bölümde görüşmek üzere! 🐚✨

🔒 Bu içeriği görmek için giriş yapın

 
Yanıt yazmak için giriş yapmalısınız
Forum özelliklerini kullanmak ve Level 2 üyelik satın almak için hesabınıza giriş yapın.
135,081Konular
3,298,065Mesajlar
326,273Kullanıcılar
Kikos99Son Üye
Üst Alt