23 Mart 2012 Cuma

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.   
Devamı için : Linuxta Bash ile Döngü Örnekleri

Hiç yorum yok:

Yorum Gönder

Yorumunuzu esirgemeyiniz..