11 – Diziler ve Veri Yapıları: Bash Script’te Dizilerle Çalışmak

Bash script yazarken, veriler üzerinde toplu işlemler yapmak için diziler kullanmak oldukça önemlidir. Bash, birçok programlama dilinde olduğu gibi dizi (array) yapısını destekler. Diziler, birden fazla değeri bir arada tutmak için kullanılır ve bu sayede birden fazla veri üzerinde aynı anda işlem yapmayı kolaylaştırır.
Bu makalede, Bash dizilerini nasıl oluşturabileceğinizi, bu dizilerle nasıl çalışabileceğinizi ve veri işlemlerini nasıl yapabileceğinizi öğreneceksiniz.
Bash Dizilerini Oluşturma
1.1. Temel Dizi Tanımı
Bash dizileri birden fazla değeri tutabilen veri yapılarıdır. Bir dizi tanımlamak için değişken adının ardından parantezler içinde elemanları belirtebilirsiniz:
# Basit bir dizi tanımı
names=("Alice" "Bob" "Charlie")
Bu tanımda "Alice"
, "Bob"
ve "Charlie"
değerleri, names
adlı bir dizi değişkeninde saklanmaktadır.
1.2. Dizi Elemanlarına Erişim
Bash dizilerindeki bir elemanı çağırmak için dizi değişkeni adının ardından köşeli parantezler kullanılır. Dizilerde indeksleme sıfırdan başlar:
echo ${names[0]} # Çıktı: Alice
echo ${names[1]} # Çıktı: Bob
1.3. Tüm Dizi Elemanlarına Erişim
Bir dizinin tüm elemanlarına erişmek için @
veya *
kullanabilirsiniz:
echo ${names[@]} # Çıktı: Alice Bob Charlie
echo ${names[*]} # Çıktı: Alice Bob Charlie
@
ve *
arasındaki fark, bazı durumlarda (örneğin, bir for
döngüsünde) elemanların nasıl ayrıldığını etkileyebilir.
2. Diziler Üzerinde Döngülerle Çalışma
Dizilerle çalışırken genellikle döngüler kullanılır. Bash’te for
döngüsü, dizideki her bir elemanı teker teker işlemek için kullanılabilir.
2.1. for
Döngüsü ile Dizi Elemanlarını Dolaşmak
Bir for
döngüsü kullanarak dizi elemanlarını şu şekilde dolaşabilirsiniz:
for name in "${names[@]}"; do
echo "İsim: $name"
done
Bu örnekle, dizideki her bir isim sırasıyla ekrana yazdırılır.
3. Dizilere Veri Ekleme ve Çıkarma
3.1. Diziye Eleman Ekleme
Bash’te bir diziye eleman eklemek için basitçe dizinin sonuna yeni bir değer ekleyebilirsiniz:
names+=(“Dave”)
echo ${names[@]} # Çıktı: Alice Bob Charlie Dave
3.2. Belirli Bir Elemanı Silme
Bir diziden belirli bir elemanı çıkarmak için unset
komutunu kullanabilirsiniz:
unset names[1]
echo ${names[@]} # Çıktı: Alice Charlie Dave
names[1]
silindiği için "Bob"
artık dizide yoktur. Bu durumda dizinin diğer elemanlarının indeksleri otomatik olarak güncellenmez, yani names[2]
hâlâ "Dave"
olacaktır.
3.3. Tüm Diziyi Silme
Diziyi tamamen temizlemek için de unset
komutu kullanılabilir:
unset names
Bu komut, diziyi tamamen bellekten kaldırır.
4. Dizi Boyutunu Öğrenme
Bir dizide kaç eleman olduğunu öğrenmek için ${#dizi_adı[@]}
şeklinde yazabilirsiniz:
echo ${#names[@]} # Çıktı: 3
Bu, dizideki eleman sayısını döndürür.
5. Dizilerde Döngü ve İşlem Örnekleri
Dizilerle ilgili bazı yaygın işlemleri inceleyelim. Örneğin, dizideki her elemanın uzunluğunu bulmak veya belirli bir koşulu kontrol etmek isteyebilirsiniz.
5.1. Eleman Uzunluklarını Bulmak
Her bir elemanın uzunluğunu hesaplamak için:
for name in "${names[@]}"; do
echo "İsim: $name, Uzunluk: ${#name}"
done
Bu, her bir isim ve onun karakter uzunluğunu ekrana yazdırır.
5.2. Dizide Eleman Arama
Dizide belirli bir elemanın olup olmadığını kontrol etmek için for
döngüsü kullanabilirsiniz:
search_name="Charlie"
found=0
for name in "${names[@]}"; do
if [[ "$name" == "$search_name" ]]; then
found=1
break
fi
done
if [[ $found -eq 1 ]]; then
echo "$search_name dizide bulunuyor."
else
echo "$search_name dizide bulunmuyor."
fi
Bu örnekte, "Charlie"
dizide bulunursa found
değişkeni 1 olarak ayarlanır ve mesaj gösterilir.
6. Çok Boyutlu Diziler
Bash’te çok boyutlu diziler, diğer bazı dillerdeki kadar doğrudan bir yapı sunmaz. Ancak iç içe diziler oluşturarak bir tür çok boyutlu dizi yapısı kurabilirsiniz. Örneğin:
matrix=("1 2 3" "4 5 6" "7 8 9")
for row in "${matrix[@]}"; do
for element in $row; do
echo -n "$element "
done
echo
done
Bu örnek, 3×3 boyutunda bir matris şeklinde diziyi ekrana yazdırır.
7. Uygulama Örneği: Dosya Listesini Dizilerle İşlemek
Bir dizide dosya isimlerini saklayıp bu dosyalar üzerinde işlem yapabilirsiniz. Örneğin, bir dizindeki .txt
uzantılı dosyaları listeleyip bunları bir diziye kaydetmek:
files=($(ls *.txt))
for file in "${files[@]}"; do
echo "Dosya adı: $file"
done
Bu script, mevcut dizindeki tüm .txt
dosyalarını listeleyip her bir dosya adıyla işlem yapmanıza olanak tanır.
Bash dizileri, aynı türden birden fazla değeri saklamak ve bu değerler üzerinde toplu işlemler yapmak için oldukça güçlü araçlardır. Diziler kullanarak scriptlerinizi daha etkili ve verimli hale getirebilirsiniz. Bu makalede, dizilerle nasıl çalışabileceğinizi, döngülerle nasıl elemanlar üzerinde işlem yapabileceğinizi ve veri ekleme/çıkarma gibi temel işlemleri nasıl yapabileceğinizi öğrendiniz.
Bash ile daha karmaşık scriptler yazarken, diziler size büyük bir esneklik sağlar ve özellikle dosya yönetimi, verilerin işlenmesi veya kullanıcı girdilerinin saklanması gibi senaryolarda işinizi oldukça kolaylaştırır.