Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

BMS-301 Kabuk Programlama Güz 2015 (6. Sunu) (Yrd. Doç. Dr. Deniz Dal)

Benzer bir sunumlar


... konulu sunumlar: "BMS-301 Kabuk Programlama Güz 2015 (6. Sunu) (Yrd. Doç. Dr. Deniz Dal)"— Sunum transkripti:

1 BMS-301 Kabuk Programlama Güz 2015 (6. Sunu) (Yrd. Doç. Dr. Deniz Dal)

2 test Komutu test komutu mantıksal bir ifadenin sonucunu bulur. bash kabuğunda en son çalışan komutun sonucu $? ile öğrenilebilir. Eğer komut başarılı bir şekilde çalışmışsa 0 (sıfır) sonucunu, diğer durumlarda sıfırdan farklı bir değeri geri döndürür. Bu özellikten yararlanarak test komutunun sonucu da ekranda görüntülenebilir. ddal@pardus2011 ~ $ test 5 -gt 3 ddal@pardus2011 ~ $ echo $? 0 ddal@pardus2011 ~ $ test 5 -gt 6; echo $? 1

3 test Komutu Bir önceki slayttaki örnekte test komutu, -gt (greater than) seçeneğiyle kullanılmıştır. Bu seçenek ile önce 5 sayısının 3'ten büyük olup olmadığı test edilmiş ve komut hatasız çalıştığı için sonuçta 0 (sıfır) bulunmuştur. Diğer test işleminde ise 5 sayısının 6'dan büyük olup olmadığı test edilmiş, 5 sayısı 6’dan büyük olmadığından sonuç hatalı bir şekilde 1 (bir) olarak geri döndürülmüştür. Aritmetik işlemlerde, karakter dizileri ve dosya karşılaştırmalarında kullanılabilecek seçenekler bir sonraki slayttaki tabloda özetlenmiştir.

4 test Komutu (Aritmetik eşit değil testi için –ne (not equal) kullanılır.) test -f./Merhaba.sh deyimini içinde bulunduğunuz dizinde Merhaba.sh adlı bir dosyanın varlığını test etmek için kullanabilirsiniz. (echo $? deyimi sonuç olarak geriye 0 değerini döndürürse dosyanın var olduğunu anlarsınız.)

5 Common test Cases

6 Şartlı Deyimler (if, elif ve else) if deyimi mantıksal bir ilişkiyi sınayarak bir işlemin yapılmasına ya da yapılmamasına karar vermek için kullanılan bir deyimdir. if [ koşul-1 ] then koşul-1 doğru ise yürütülecek komutlar elif [ koşul-2 ] then koşul-2 doğru ise yürütülecek komutlar.............. elif [ koşul-n ] then koşul-n doğru ise yürütülecek komutlar else hiçbir koşul doğru değilse yürütülecek komutlar fi

7 Şartlı Deyimler (if, elif ve else) if deyiminde en az bir koşul bulunması zorunludur. Koşullar birden fazla mantıksal deyimin birleşiminden de oluşabilir. elif ve else durumları ise isteğe bağlı olarak kullanılır. Eğer ilk koşul sağlanmazsa sınanması istenen diğer koşullar elif kısımlarında belirtilir. Hiçbir koşulun sağlanmadığı durumda yapılması gereken bir işlem varsa else kısmında bu işlem gerçekleştirilir. if deyimi, deyimi oluşturan harflerin tersten yazılmasıyla oluşan fi komutu ile sonlandırılır. Bir if deyiminde if komutu, ilk koşul, then ifadesi, koşul doğruysa çalışacak komut ve fi komutu zorunludur. Diğer kısımlar gereksinimlere bağlı olarak kullanılabilir.

8 Örnek Kullanıcı tarafından girilen bir sayının değeri 10'dan büyükse “Girdiğiniz sayı 10 dan büyük”; 10'a eşitse, “Girdiğiniz sayı 10 a eşit”; diğer durumlarda “Girdiğiniz sayı 10 dan küçük” şeklinde ekrana mesaj yazdıran bir kabuk programını Karsilastirma.sh adlı dosya içerisinde oluşturunuz. if test $sayi -gt 10 deyimi ile if [ $sayi -gt 10 ] deyimi aynı işlemi yapar. Kare parantezlerden önce ve sonra muhakkak boşluk bırakılmalıdır.

9 Çözüm #!/bin/bash echo –n "Bir sayı giriniz: "; read sayi; if [ $sayi -gt 10 ] #if ((sayi>10)) then echo "Girdiğiniz sayı 10 dan büyük"; #girintiye dikkat elif test $sayi -eq 10 then echo "Girdiğiniz sayı 10 a eşit"; #girintiye dikkat else echo "Girdiğiniz sayı 10 dan küçük"; #girintiye dikkat fi

10 Mantıksal VE - VEYA if [ condition1 -a condition2 ] if [ condition1 ] && [ condition2 ] if [[ condition1 && condition2 ]] if [ condition1 -o condition2 ] if [ condition1 ] || [ condition2 ] if [[ condition1 || condition2 ]]

11 Şartlı Deyimler (case) Bir veya birden fazla koşula bağlı olarak birçok seçenek arasında seçim yapılması gerektiğinde case deyimi kullanılır. (case deyimi ile yazılan bir program birden fazla if, elif, elif… else kullanılarak ta gerçekleştirilebilir.) case değişken in seçenek-1) komutlar ;; seçenek-2) komutlar ;;... *) komutlar ;; esac

12 Örnek Kullanıcıya seçenekler sunan ve kullanıcı klavyeden 1 seçeneğini girdiğinde komut satırı ekranını temizleyen, 2 seçeneğini girdiğinde kullanıcı ev dizinindeki dosyaları ayrıntılı olarak listeleyen, 3 seçeneğini girdiğinde ise sistem yöneticisi olarak oturum açan bir kabuk programını SecenekGir.sh adlı dosya içerisine case komutunu kullanarak yazınız. (Aynı programı if, elif ve else komutlarını kullanarak ta yazabileceğinizi unutmayınız.)

13 Çözüm #!/bin/bash echo "İşlemler Menüsü"; echo "1-Ekranı Temizle"; echo "2-Ev Dizinini Detaylı Listele"; echo "3-Yönetici Girişi Yap"; echo –n "Seçeneğinizi Giriniz (1-3): "; read secenek; case $secenek in 1) clear; ;; 2) ls -l ~; ;; 3) su -; ;; *) echo "Geçersiz Seçim"; esac *) seçeneği üstteki koşullardan herhangi birisi gerçekleşmediğinde çalışır. Yandaki örnekte kullanıcı tarafından 1 ile 3 arasında bir değer girilmediğinde ekrana “Geçersiz Seçim” uyarısı yazdırılmaktadır.

14 Döngüler Belirli sayıda veya belirli bir koşula bağlı olarak tekrar edilmesi istenen komutlar bir kez yazılıp döngü içerisine konulduğunda istenen sayıda veya istenen koşul gerçekleşene kadar yinelenir. Komutların tekrarını sağlayan yapılara döngü (loop) adı verilir.

15 while Döngüsü while, yanında belirtilen koşul doğru iken yapı içerisindeki komutların tekrarlanmasını sağlar. Koşul yanlış olduğunda döngü sonlanır, done ifadesinden sonraki komutlara geçilir. Genel kullanımı: while koşul do komutlar done

16 while Döngüsü while yapısında dikkat etmeniz gereken husus, koşulu bir yerde yanlış yapmak ve döngüyü sonlandırmak için “komutlar” kısmında koşul değişkenini güncelleyecek bir kontrol ifadesi kullanmaktır. Örneğin, koşul a değişkeninin değerinin 10'dan küçük olması ise, döngünün komutlar kısmında a değişkeninin değerini kontrollü şekilde değiştirmelisiniz. Aksi durumda, a değişkeninin değeri hep 10'dan küçük kalacağından, sonsuz bir döngü oluşur ve döngüdeki komutlar sürekli çalışır.

17 Örnek 1'den 10'a kadar olan sayma sayılarını while döngüsü kullanarak ekrana alt alta basacak bir kabuk programını WhileDongusu.sh adlı dosya içine yazınız. #!/bin/bash sayac=1; while [ $sayac -le 10 ] do echo $sayac; (( sayac = sayac + 1 )); #sayac=$(( sayac + 1 )); done

18 for Döngüsü for döngüsü belirli komutların, belirli sayıda ya da belirli koşullar altında tekrarlanmasını sağlayan diğer bir tür döngü yapısıdır. Döngü sayısı programcı tarafından belirlenebilir. Kontrol mekanizması yapı üzerinde bulunduğundan ayrıca sayaç oluşturulmasına gerek duyulmaz. 1. Kullanım: for (( ifade1; ifade2; ifade3 )) do komutlar done ifade1: Döngü sayaç değişkeninin ilk değeri ifade2: Döngü koşulu ifade3: Sayaç değişkeninin değiştirildiği aritmetik ifade

19 for Döngüsü 2. Kullanım: for DöngüDeğişkeni in değerler do komutlar done

20 Örnek 1 ile 10 arasındaki sayma sayılarını bu kez de for döngüsü yardımıyla ekrana alt alta basacak kabuk programını ForDongusu.sh adlı dosya içine yazınız. 1. Çözüm #!/bin/bash for (( i = 1; i <= 10; i=i+1 )) #i=i+1 yerine i++ kullanılabilir do echo $i; done

21 Örnek 2. Çözüm #!/bin/bash for i in 1 2 3 4 5 6 7 8 9 10 # `seq 1 10` #sequence of numbers do echo $i; done

22 Ters Tırnak (Backquote) (Backtick) Ters tırnak, içerisinde işletilen linux komutunun sonucunu geriye döndürür. ddal@pardus2011 $ echo `expr 3 \* 4` 12 ddal@pardus2011 $ sayi=`expr 3 \* 5` ddal@pardus2011 $ ((sayi++)) ddal@pardus2011 $ echo $sayi 16 ddal@pardus2011 $ procNum=`cat /proc/cpuinfo|grep 'processor'|tail –n 1|cut –d: -f2` ddal@pardus2011 $ ((procNum++)) ddal@pardus2011 $ echo $procNum 2

23 Ters Tırnağın İşlevine Alternatif Bir linux komutunun çıktısını bir değişkene atamak için ters tırnaklar yerine aşağıdaki yöntem de bir alternatif olarak kullanılabilir. ddal@pardus2011 $ sayi1=`expr 3 \* 5` ddal@pardus2011 $ sayi2=$(expr 3 \* 5) ddal@pardus2011 $ echo $sayi1 15 ddal@pardus2011 $ echo $sayi2 15

24 Kabuk Programı Argümanları $*: Kabuk programına komut satırından aktarılan tüm argümanlar $#: Kabuk programına aktarılan argüman sayısı $0: Kabuk programının adı $1: Kabuk programına aktarılan 1. argüman $2: Kabuk programına aktarılan 2. argüman $3: Kabuk programına aktarılan 3. argüman

25 Argumanlar.sh #!/bin/bash echo "Kabuk Programinizin Tum Argumanlari: $*"; echo "Kabuk Programinizin Adi : $0"; echo "Kabuk Programinizin Arguman Sayisi: $#"; echo "Kabuk Programinizin 1. Argumani : $1"; echo "Kabuk Programinizin 2. Argumani : $2"; echo "Kabuk Programinizin 3. Argumani : $3"; ddal@pardus2011 $./Argumanlar.sh Deniz Dal BMS301 Kabuk Programinizin Tum Argumanlari: Deniz Dal BMS301 Kabuk Programinizin Adi :./Argumanlar.sh Kabuk Programinizin Arguman Sayisi: 3 Kabuk Programinizin 1. Argumani : Deniz Kabuk Programinizin 2. Argumani : Dal Kabuk Programinizin 3. Argumani : BMS301

26 Hata Ayıklama (Debugging) Yazdığınız kabuk programını -x seçeneğini kullanarak (debug modunda) aşağıdaki gibi çalıştırırsanız programınızın her bir satırının hangi çıktıları üreterek sonlandığını öğrenebilirsiniz. ddal@pardus2011 $ bash -x Argumanlar.sh Deniz Dal BMS301

27 Bir Dosyayı Satır Satır Okumak İçin… #!/bin/bash cat $1| #cat deneme.txt| while read line do echo $line; done

28 Kabuk Fonksiyonları Fonksiyonlar bir program parçasını blok haline getirerek isimlendirmeye ve gerektiği yerde ismi ile çağırarak kullanmaya yarar. Programların kısa ve anlaşılır olmasına katkı sağlayan çok yararlı ve kullanışlı yapılardır. Genel kullanımları: FonksiyonAdi() { komutlar } Tanımlanmış bir fonksiyonu çağırırken ise; FonksiyonAdi kullanılır.

29 Örnek Kullanıcıdan fonksiyon argümanı olarak aldığı iki sayıyı toplayan ve hesapladığı sonucu ekrana basan bir kabuk fonksiyonunu Fonksiyon.sh adlı dosyanın içerisine yazınız. #!/bin/bash Topla() { sayi1=$1; sayi2=$2; (( sonuc = sayi1 + sayi2 )); echo $sonuc; } Topla 5 6;

30 Örnek Bir önceki slayttaki çözümde Topla adında bir kabuk fonksiyonu tanımlanmıştır. Kabuk programı ilk olarak fonksiyonun bittiği noktadan itibaren çalışmaya başlamıştır. Fonksiyon çağrılırken, 5 ve 6 sayıları parametre (argüman) olarak fonksiyona gönderilmiştir. Bu parametreler ($1 ilk parametre, $2 ikinci parametre,...), fonksiyon içerisinde sayi1 ve sayi2 değişkenlerine atanmıştır. Daha sonra sayi1 ve sayi2 değişkenlerindeki değerlerin toplamı alınmıştır ve bu değer sonuç olarak ekrana yazdırılmıştır.

31 Uygulama Kendisine komut satırından yolunu (tam veya bağıl) parametre olarak aldığı bir dizinin altındaki dosyaları ve dizinleri tarayan bir kabuk programı yazınız. Programınız söz konusu dizinin altında rastladığı her bir dosyayı adı ile birlikte "bu bir dosyadır", benzer şekilde her bir dizini adı ile birlikte "bu bir dizindir" şeklinde ekrana yazdırmalıdır. $./Uygulama.sh /home/ddal/scripts $./Uygulama.sh.


"BMS-301 Kabuk Programlama Güz 2015 (6. Sunu) (Yrd. Doç. Dr. Deniz Dal)" indir ppt

Benzer bir sunumlar


Google Reklamları