giriiş
Shell komut dosyalarında dizilerle nasıl çalışılacağını bilmek, daha büyük veri kümeleriyle çok verimli bir şekilde çalışmanıza yardımcı olacaktır. Peki diziler nedir ve nasıl dizi oluşturulur? Gelin birlikte öğrenelim.
Diziler nedir?
Eğer herhangi bir programlama dilinin temelini zaten biliyorsanız, dizilerin ne olduğunu da biliyorsunuzdur. Ancak bilmeyenler için, dizilerin temellerini gözden geçirelim ve onlarla nasıl çalışılacağını öğrenelim.
Değişkenler tek veri öğelerini depolar. Diziler ise neredeyse sınırsız sayıda veri öğesi depolayabilir. Büyük miktarda veriyle çalışırken değişkenler çok verimsiz olabilir ve dizilerin kullanımı çok faydalıdır.
Gelin, shell komut dosyalarında diziler oluşturmayı öğrenelim.
Kabuk komut dosyalarında diziler oluşturma
Kabuk komut dosyalarında kullanabileceğimiz iki tür dizi vardır.
- İndeksli diziler – elemanları 0'dan başlayan bir indeksle saklar.
- İlişkisel diziler – elemanları anahtar-değer çiftleri halinde saklar.
Varsayılan olarak oluşturulan dizi, indeksli bir dizidir. İndeks adlarını belirtirseniz, ilişkisel bir dizi haline gelir ve elemanlara sayılar yerine indeks adları kullanılarak erişilebilir.
Dizilerin tanımlanması:
root@ubuntu:~# declare -A assoc_array
root@ubuntu:~# assoc_array[key]=value
OR
root@ubuntu:~# declare -a indexed_array
root@ubuntu:~# indexed_array[0]=valueBüyük ve küçük a harflerine dikkat edin. Büyük A harfi ilişkisel diziyi, küçük a harfi ise indeksli diziyi tanımlamak için kullanılır.
`declare` anahtar kelimesi dizileri açıkça bildirmek için kullanılır, ancak aslında kullanmanız gerekmez. Bir dizi oluştururken, dizileri açıkça bildirmeden, istediğiniz dizi türüne göre değerleri başlatabilirsiniz.
Kabuk komut dosyalarında dizilerle çalışma
Artık dizi oluşturmayı bildiğinize göre, dizilerle nasıl çalışacağımızı öğrenelim. Bunlar veri öğelerinin koleksiyonları olduğundan, gerekli veri noktalarını çıkarmak için döngüler ve dizilerle aynı anda çalışabiliriz.
1. Dizi elemanlarına tek tek erişme
Her veri noktasının ayrı ayrı indekslendiğini bildiğimiz için, aşağıdaki gibi dizi indeksini belirterek dizinin tüm elemanlarına erişebiliriz:
assoc_array[element1]="Hello World"
echo ${assoc_array[element1]}Benzer şekilde, indekslenmiş bir dizinin bazı elemanlarına erişelim. İndeks, her bir eleman için otomatik olarak oluşturulduğu için, indekslenmiş dizinin tüm elemanlarını boşluklarla ayırarak belirtebiliriz.
index_array=(1 2 3 4 5 6)
echo ${index_array[0]}Gördüğünüz gibi, ilk öğe otomatik olarak 0 indeksinde yazdırılıyor.
2. Dizi elemanlarını sırayla okuma
Eğer döngüleri zaten biliyorsanız, bu kolay olacak. Bilmiyorsanız, bunları ileriki bir eğitimde ele alacağız. Dizi elemanları üzerinde işlem yapmak için shell betiklerinde while veya for döngülerini kullanacağız. Aşağıdaki betiği kopyalayın ve kaydedin. .sh dosyasını kaydet
#!/bin/bash
index_array=(1 2 3 4 5 6 7 8 9 0)
for i in ${index_array[@]}
do
echo $i
doneYukarıdaki komut dosyası aşağıdaki çıktıyı verecektir:
Şimdi index_array[@] ifadesini fark etmiş olabilirsiniz ve @ sembolünün ne işe yaradığını merak ediyorsanız, bunu şimdi açıklayacağız.
Kabuk komut dosyalarında diziler için yerleşik işlemler
Artık öğelere tek tek nasıl erişileceğini ve for döngülerinin nasıl kullanılacağını öğrendiğinize göre, diziler için varsayılan olarak kullanılabilen çeşitli işlemleri öğrenelim.
1. Bir dizinin tüm elemanlarına erişim
Dizin veya dizi anahtarı sağlayarak elemanlara nasıl erişileceğini öğrendik. Ancak tüm elemanları aynı anda yazdırmak veya tüm elemanlarla çalışmak istiyorsak, [@] işareti olan başka bir operatör kullanabiliriz.
Yukarıdaki örnekte de gördüğünüz gibi, for döngüsü kullanarak dizinin tüm elemanları arasında gezinmek istediğimde bu sembolü kullandım.
echo ${assoc_array[@]}Yukarıdaki komut, assoc dizisinde saklanan tüm öğeleri yazdırır.
2. Bir dizideki eleman sayısını sayın.
Yukarıdaki @ sembolüne benzer şekilde, dizide saklanan eleman sayısını elde etmek için dizi adının başına eklenebilen # sembolümüz var. Nasıl çalıştığına bakalım.
echo ${#index_array[@]}Belirli bir öğe için kullanılan karakter sayısını saymak istiyorsanız, @ işaretini dizinle değiştirmeniz yeterlidir.
3. Dizideki tek tek elemanları silin.
Dizilere eleman eklemeyi ve bunları yazdırmayı biliyoruz. Şimdi de belirli elemanları nasıl kaldıracağımızı öğrenelim. Bunun için `unset` anahtar kelimesini kullanacağız.
unset index_array[1]Yukarıdaki kod örneğinde dizi adını ve indeks kimliğini değiştirerek istediğiniz dizi öğesini silebilirsiniz. Oldukça basit, değil mi?
Sonuç
Kabuk betikleri çok kapsamlıdır ve doğru kişi tarafından yazıldığında terminalde gerçekleştirebileceğiniz herhangi bir işlevi yerine getirebilir. Kabuk betiklerindeki dizilerin ek yeteneklerinden bazıları, düzenli ifadelerle (regex) çalışma olanağını da içerir. Kabuk betiklerinde dizi elemanlarını manipüle etmek için çeşitli düzenli ifadeler kullanabiliriz.
Umarız artık diziler oluşturma ve bunlarla çalışma konusunda iyi bir anlayışa sahipsinizdir ve komut dosyalarınızda dizileri kullanabilirsiniz. Düşüncelerinizi paylaşmak için aşağıya bir yorum bırakın ve bu konuyla ilgili herhangi bir sorunuz varsa bize bildirin.












