Linuxta Bash ile Döngü Örnekleri

Linux / Unix işletim sisteminde shell seviyesinde döngüleri nasıl yaparım?

2,3 Parametreli bir döngü algoritmasını nasıl yazarım?

Döngü demek , aynı işlemlerin veya birbirine çok yakın işlemlerin tekrar tekrar yapılması demektir. Peki Shell seviyesinde bu işlemleri nasıl yaparız?

Ön Not : bu kodları herhangi bir dosyaya yazıp daha sonra bu dosyayı sh komutu ile çalıştırırsanız da olacaktır. Ben bu şekilde deniyorum.

For döngüsü :

yazımda numaralı çalışma şekli aşağıdaki gibidir. Döngü 5 kere dönecektir. Ayrıca döngü içinde değişkeni de kullanabilirsiniz. Normal Bash yani.

#!/bin/bash
for i in 1 2 3 4 5 .. N
do
	echo "$i inci defa calisiyor"
done

Ayrıca aşağıdaki şekilde döngüdeki değişkeni örneğin 2şer 2şer artmasını sağlayabiliyorsunuz.

#!/bin/bash
echo "Bash versiyonu ${BASH_VERSION}..."
for i in {0..10..2}
  do
     echo "$i inci defa calisiyor"
 done

C stili for döngüsü :

#!/bin/bash
for (( c=1; c< =5; c++ ))
do
	echo "$c inci defa calisiyor"
done

Sonsuz Döngü :

Önemli olarak demeliyim ki ; Sonsuz döngü kullanınca sistem kaynaklarını çok basit bir komutla tüketebilirsiniz. Bu yüzden burada sleep komutu koyup işleminizi en azından saniyede 1 yapmanızda yarar var.

#!/bin/bash
for (( ; ; ))
do
   sleep 1
   echo "sonsuz dongu [ cikmak icin CTRL+C yapınız. ]"
done

Duruma bağlı döngüler, (break komutuyla birlikte )

Aşağıdaki kod, /etc/ dizinindeki tüm dosyaları okuyup bunları bir dongu halinde gezer. dogru dosyayı bulunca , istdigi islemi yapar (dosyanin icinde kaç tane nameserver varsa bunları listeler) ve donguden cıkar.

#!/bin/bash
for file in /etc/*
do
	if [ "${file}" == "/etc/resolv.conf" ]
	then
		countNameservers=$(grep -c nameserver /etc/resolv.conf)
		echo "${file} dosyasında toplam  ${countNameservers} nameserver tanimlanmis"
		break
	fi
done

break, gibi yine continue özelliğini de kullanabilirsiniz.

Ayrıca döngüde if içinde döngü yapılan klasör içindeki dosyaadı.bak dosyayı varsa bir işlem yapmak istiyorsanız veya istemiyorsanız, (örnğein yedeği varsa yedeğini alma işlemini continue edebilirsiniz) döngüde aşağıdaki if komutunu kullanabilirsiniz.

#!/bin/bash
FILES="$@"
for f in $FILES
do
        # dosyaadı .bak yedek dsoyası varsa, diğer dosyaya geç
	if [ -f ${f}.bak ]
	then
		echo "$f dosyasini atliyoruz..."
		continue  # sonraki dosyayı okuması icin cp komutunu geçiyoruz.read next file and skip cp command
	fi
        # bu noktada yedek dosyanin olmadigi durum algilandigindandosyayı kopyalamak icin cp komutu kullaniyoruz
	/bin/cp $f $f.bak
done

Ekstra olarak da farkettiğiniz gibi, bir bash dosyası içinde yorum eklemek istiyorsanız başına # koymanız da yeterli. Umarım işinize yarar.

5 Comments

    Linuxta Bash ile Döngü Örnekleri « kodluyorum

    […] işlemlerin veya birbirine çok yakın işlemlerin tekrar tekrar yapıl… Devamı için : Linuxta Bash ile Döngü Örnekleri Share this:TwitterFacebookLike this:BeğenBe the first to like this […]

    Linuxta Bash ile Döngü Örnekleri « Lé Blog

    […] işlemlerin veya birbirine çok yakın işlemlerin tekrar tekrar yapıl… Devamı için : Linuxta Bash ile Döngü Örnekleri Share :FacebookTwitterStumbleUponLinkedInLike this:LikeBe the first to like this […]

    Linuxta Bash ile Döngü Örnekleri | Gökhan Tunçkale | Blog

    […] işlemlerin veya birbirine çok yakın işlemlerin tekrar tekrar yapıl… Devamı için : Linuxta Bash ile Döngü Örnekleri ShareFacebookTwitterStumbleUponMoreTumblrRedditLinkedInDiggEmailPrintLike this:BeğenBe the first […]

    Linuxta Bash ile Döngü Örnekleri | Boğaç Aslanyürek

    […] işlemlerin veya birbirine çok yakın işlemlerin tekrar tekrar yapıl… Devamı için : Linuxta Bash ile Döngü Örnekleri Like this:LikeBe the first to like this post. This entry was posted in Professional and tagged […]

    Linuxta Bash ile Döngü Örnekleri | Kara Kule

    […] işlemlerin veya birbirine çok yakın işlemlerin tekrar tekrar yapıl… Devamı için : Linuxta Bash ile Döngü Örnekleri Share this:TwitterFacebookLike this:BeğenBe the first to like this post. By ahmet orsorlu […]

Linuxta Bash ile Döngü Örnekleri | Gökhan Tunçkale | Blog için bir cevap yazın Cevabı iptal et