intranet-for-dongusu

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.

for degisken in liste
do
  komutlar
done

 

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.

1
2
3
4
5

 

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.

23/07/2007
Ocak
2009
5
Kasım
2011
12.12.2012

 

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.

Sonsuz
Sonsuz
Sonsuz
Sonsuz
^C

 

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.

1
2
3
4

 

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