Diziler
- Diziler
Diziler benzer türdeki ifadelerin aynı değişken ismi altında numaralandırılarak saklanması için kullanılır. Her indis numarası farklı bir değişken değeri içerir.
DiziAdi[indis]=değer
Örnek:
#!/bin/sh
sehirler[1]="Adana"
sehirler[2]="Adıyaman"
sehirler[3]="Afyon"
sehirler[7]="Antalya"
sehirler[34]="Istanbul"
Yukarıdaki örnekte "sehirler" dizisinin 1. elemanı olarak "Adana", 2. elemanı olarak "Afyon", 7. elemanı "Antalya" olarak belirlenmiştir.
Tanımladığımız dizileri kullanırken scope içerisine almamız gerekir.
echo ${DiziAdi[ indis ]}
Örnek:
#!/bin/sh
notlar[1]=60
notlar[2]=95
echo ${notlar[1]}
echo ${notlar[2]}
Dikkat edilmesi gereken hususlar
–\ İndis sayı olmak zorundadır. isimler[bir] gibi bir ifade çalışmaz ya da yanlış bir işlem görür.
–\ Tanımlanan bir diziyi kullanırken { } kullanmamız gerekir. Örneğin echo ${Ogrenciler[3]}
–\ Dizilerde de değişkenlerde olduğu gibi boşluk karakteri kullanılmaz, fakat [ ] içerisinde boşluk olması önemli değildir. isimler[ 5 ] ile isimler[5] birbirine eşittir. isimler [5] ise çalışmaz
Dizileri grup halinde tanımlamak
Dizileri tek tek tanımlamak yerine grup halinde de değer atayabiliriz. Bu şekilde değer atadığımızda, indis numaraları 0'dan başlar.
DiziAdı=("birinci değer" "ikinci değer" "üçüncü değer" )
Yukarıdaki tanımlamada DiziAdi[0] değişkeninin değeri “birinci değer”, DiziAdi[1] değişkeninin değeri “ikinci değer”, DiziAdi[2] değişkeninin değeri "üçüncü değer" olarak atanır.
Örnek:
#!/bin/sh
aylar=("Ocak" "Şubat" "Mart" "Nisan" "Mayıs" "Haziran" "Temmuz" "Ağustos" "Eylül" "Ekim" "Kasım" "Aralık")
echo "1. ay = ${aylar[ 0 ]}"
echo "5. ay = ${aylar[ 4 ]}"
echo "12. ay = ${aylar[ 11 ]}"
Yukarıdaki komutta ilk değer "0" indisine, ikinci değer "1" indisine atanır.
Dizi boyutunu öğrenmek
Dizide kayıtlı kaç değer olduğunu öğrenmek için aşağıdaki gibi dizi adından önce "#" indis olarak da "@" kullanmamız gerekir.
${#DiziAdı[@]}
Örnek:
#!/bin/sh
isimler=(Ali Fırat Berna Ezgi)
isimler[8]="Mehmet"
isimler[15]="Yasemin"
echo "Kayıtlı isim sayısı = ${#isimler[@]} "
Yukarıdaki komut isimler dizisinin kaç elemanı olduğunu gösterecektir.
Döngü içerisinde dizi kullanımı
Döngü değişkenini dizi indisi olarak kullanarak dizi elemanlarıyla seri işlem yapabiliriz.
Örnek:
#!/bin/sh
renkler=(Beyaz Mavi Kırmızı Sarı Yeşil Gri Mor Siyah Eflatun)
for sayac in {0..8}
do
echo "$sayac. Renk = ${renkler[ $sayac ]} "
done
Yukarıdaki komut "renkler" dizisinin içerisindeki değerleri listeleyecektir.
0. Renk = Beyaz
1. Renk = Mavi
2. Renk = Kırmızı
3. Renk = Sarı
4. Renk = Yeşil
5. Renk = Gri
6. Renk = Mor
7. Renk = Siyah
8. Renk = Eflatun
Örnek:
#!/bin/sh
echo "Öğrenci sayısını giriniz. "
read ogrenci_sayisifor ((sayac1=1;sayac1<=$ogrenci_sayisi;sayac1++)); do
echo "$sayac1. Öğrencinin ismini giriniz. "
read ogrenci_isimleri[$sayac1]
doneecho
echo "Öğrenci Listesi:"
for ((sayac2=1;sayac2<=$ogrenci_sayisi;sayac2++)); do
echo "$sayac2. Öğrenci = ${ogrenci_isimleri[$sayac2]} "
done
Yukarıdaki komut girilen öğrenci sayısı kadar öğrenci ismi isteyip, daha sonra girilen isimleri shell ekranına yazdırır.
Öğrenci sayısını giriniz.
3
1. Öğrencinin ismini giriniz.
Erdem Yilmaz
2. Öğrencinin ismini giriniz.
Merve Aydogan
3. Öğrencinin ismini giriniz.
Selin ArslanÖğrenci Listesi:
1. Öğrenci = Erdem Yilmaz
2. Öğrenci = Merve Aydogan
3. Öğrenci = Selin Arslan