Linux Shell'de for Döngüsü
for döngüsünde değişken listede verilen bütün değerleri sırasıyla alarak her değer için belirtilen komutları tekrarlar.
Standart Döngüler
Belirtilen bir sayı veya harf aralığına, ya da bir sözdizimine bağlı olarak komut satırındaki komutları uygulayan döngülerdir.
Örnek:
#!/bin/sh
for sayac in 1 2 3 4; do echo $sayac; done
Yukarıdaki örnekte "sayac" değişkeni belirtilen bütün değerleri sırayla alarak belirtilen işlemi bu değerlere göre uygulayacaktır. Böylece döngüden çıkıldığında işlem 4 defa yapılmış olacaktır.
1
2
3
4
Örnek:
#!/bin/sh
for sayac in Ahmet Berna D 2; do echo -n $sayac; done
Yukarıdaki örnekte "sayac" değişkeni belirtilen bütün değerleri sırayla alarak bu değerlere göre belirtilen işlemi uygulayacaktır.
AhmetBernaD2
Örnek:
#!/bin/sh
for sayac in {3..7}; do echo $sayac; done
Yukarıdaki örnekte "sayac" değişkeni 3'ten 7'ye kadar olan bütün değerleri sırasıyla alarak belirtilen işlemi uygulayacaktır.
3
4
5
6
7
Örnek:
#!/bin/sh
for sayac in {c..f}; do echo $sayac; done
Yukarıdaki örnekte "sayac" değişkeni c harfinden f'ye kadar olan bütün harf değerlerini sırasıyla alarak belirtilen işlemi uygulayacaktır.
c
d
e
f
Örnek:
#!/bin/sh
for sayac in {0..12..3}; do echo "deneme $sayac"; done
Yukarıdaki örnekte, "sayaç" değişkeni 0'dan 12'ye kadar 3er 3er ilerleyerek belirtilen komutları uygulayacaktır. Komutun çıktısı şu şekilde olur;
deneme 0
deneme 3
deneme 6
deneme 9
deneme 12
Örnek:
#!/bin/sh
for sayac in $(seq 8 12); do echo -n $sayac; done
Yukarıdaki örnekte, "sayac" değişkeni 8'den 12'a kadar olan bütün değerleri sırasıyla alarak belirtilen işlemi tekrarlayacaktır.
89101112
Örnek:
#!/bin/sh
for ((sayac=1; sayac <= 5 ; sayac++)); do echo $sayac; done
Yukarıdaki örnekte, "sayac" değişkeni 1'den başlayarak ve her seferinde "sayac++" komutuyla değişken değerini 1 arttırarak 20 olana kadar belirtilen işlemi tekrarlayacaktır.
Dosya Döngüleri
Belirtilen ifade ile eşleşen dosyalara göre işlem yapan döngülerdir.
Örnek:
#!/bin/sh
for TXT in *.txt; do
echo $TXT
done
Yukarıdaki örnekte, TXT değişkeni içinde bulunulan klasördeki bütün .txt uzantılı dosyaların adını sırasıyla alacaktır ve echo komutuyla shell ekranına yazılır.
linux.txt
rapor.txt
tarihler.txt
Örnek:
#!/bin/sh
for DOSYA in *.gz; do
gunzip $DOSYA
echo "$DOSYA dosyası çıkartıldı."
done
Yukarıdaki örnekte, içinde bulunulan klasördeki bütün sıkıştırılmış .gz uzantılı dosyalar dışarı çıkartılır (extract edilir).
Kırmızı.gz dosyası çıkartıldı.
Mavi.gz dosyası çıkartıldı.
Örnek:
#!/bin/sh
for DOSYA in [abcd]*; do
rm -f $DOSYA
echo "$DOSYA silindi"
done
Yukarıdaki örnekte, içinde bulunulan klasördeki dosya adı a,b,c veya d ile başlayan bütün dosyalar silinir.
ankara.txt silindi
bolu.jpg silindi
bursa silindi
ceren.odt silindi
Örnek:
#!/bin/sh
Kopyalanacak_Dosyalar="/home/ceren/rapor.txt
/usr/sbin/deneme
/home/ceren/dizin1/kaynak
/var/www/html/index.html"for kopyala in $Kopyalanacak_Dosyalar
do
cp $kopyala $kopyala.bak;
if [ -e $kopyala ]; then echo "$kopyala dosyasının yedeği alındı."; fi
done
Yukarıdaki örnekte, Kopyalanacak_Dosyalar değişkeninde adresi verilen dosyaların for döngüsü içerisinde .bak uzantılı yedeği oluşturulur.
/home/ceren/rapor.txt dosyasının yedeği alındı.
cp: `/usr/sbin/deneme' durumlanamadı: Böyle bir dosya ya da dizin yok
/home/ceren/dizin1/kaynak dosyasının yedeği alındı.
/var/www/html/index.html dosyasının yedeği alındı.
Örnek:
#!/bin/sh
for i in $( ls )
do
echo $i
done
Yukarıdaki örnekte, içinde bulunulan dizindeki gizli olmayan bütün dosya ve klasör isimleri listelenir.
Belgeler/
komutlar.txt
linux.odt
Masaüstü/
resimler.zip
rapor.txt
Örnek:
tarihler.txt |
23/07/2007 Ocak 2009 5 Kasım 2011 12.12.2012 |
#!/bin/sh
for sayac in $(cat tarihler.txt); do echo " $sayac "; sleep 1; done
Yukarıdaki örnekte, for döngüsü ile tarihler.txt dosyasının içerisindeki her kelimeyi 5'er saniye aralıklarla shell erkanına yazıyoruz.
Sonsuz Döngü
Sonu olmayan ifadeler kullanarak döngünün müdahale edene kadar sürekli devam etmesini sağlayabiliriz.
Örnek:
#!/bin/sh
for (( ; ; ))
do
echo "Sonsuz" ; sleep 3
done
Yukarıdaki örnekte döngü shell konsolunu kapatana veya CTRL+C ile komutu sonlandırana kadar 3'er saniye aralıklarla ekrana "Sonsuz" yazmaya devam eder.
Döngüyü Terk Etmek
Bir koşul gerçekleştiği takdirde döngü tamamlanmadan döngüden çıkmak için break komutunu kullanabiliriz.
Örnek:
#!/bin/sh
for n in {1..15}
do
echo "$n"
if [ $n = 4 ]; then
break; fi; done
Yukarıdaki örnekte döngümüz 1'den 15'e kadar olmasına rağmen "n" döngü değişkeni 4 olduğunda "break" komutuyla döngüden çıkılır.
Döngüde Değer Atlama
Bir koşul gerçekleştiği takdirde döngüden çıkmadan bir sonraki döngü değişkenine geçmek için "continue" komutunu kullanabiliriz.
Örnek:
#!/bin/sh
for n in {1..10}
do
if [ $n = 7 ]; then
continue; fi;
echo "$n"
done
Yukarıdaki örnekte döngümüz 1'den 10'a kadar olmasına rağmen "n" döngü değişkeni 7 olduğunda "continue" komutuyla bir sonraki değere geçilir. Böylece ekrana 7 dışında 1'den 10'a kadar olan sayılar yazılmış olur.
1
2
3
4
5
6
8
9
10