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

Slides:



Advertisements
Benzer bir sunumlar
Nesneye Yönelik Programlama
Advertisements

Makine Müh. & Jeoloji Müh.
Bilgisayar Programlama Güz 2011
EKRAN ÇIKTISI.
PHP ile Lab Örnekleri Lab Çalışması.
Bilgisayar Programlama Güz 2011
Kontrol İfadeleri : 2.Kısım
Ayrık Yapılar Matlab Notları
DÖNGÜ “Şart sağlandığı sürece” içerisindeki komut satırlarını, artış değeri adedince tekrarlayan kodlardır.
switch - case Yapısı Döngü Yapıları
Bölüm 2: Program Denetimi
MATLAB’İN SAYI YUVARLAMA FONKSİYONLARI
Javascript Oğuz İNAL.
SQL de Değişken Tanımlama
KOŞUL İFADELERİ GMGNKJG.
Nesneye Yönelik Programlama
T-SQL-2.Konu Akış Kontrolleri.
Yapısal Program Geliştirme – if, if-else
Makine Müh. & Jeoloji Müh.
Fonksiyonlar.
While Döngüsü Tekrarlama deyimidir. Bir küme ya da deyim while kullanılarak bir çok kez yinelenebilir. Yinelenmesi için koşul sınaması döngüye girilmeden.
İNTERNET PROGRAMCILIĞI I BTP 207 Ders 9. Tek değişkende birden fazla bilgi tutulmak istendiğinde kullanılır. Kullanım şekli: var dizi_adı= new Array(eleman1,
Görsel C# ile Windows Programlama
Operatörler ve Denetim Yapıları
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Kabuk Programlama Kerem ERZURUMLU
SQL de Değişken Tanımlama
FONKSİYONLAR.
Koşul İfadeleri ve Akış Kontrolü Yazdığımız uygulamanın hangi koşulda nasıl davranacağını belirterek bir akış kontrolü oluşturabilmek için koşul ifadelerini.
Akış Kontrol Mekanizmaları
PROGRAM KONTROL VE DÖNGÜ DEYİMLERİ
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
Çoklu dallanma seçimi: switch
BM-103 Programlamaya Giriş Güz 2014 (7. Sunu)
BM-103 Programlamaya Giriş Güz 2014 (8. Sunu)
MATLAB’te Döngüler.
BM-103 Programlamaya Giriş Güz 2014 (4. Sunu)
C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar.
4. KONTROL VE DÖNGÜ KOMUTLARI
BM-103 Programlamaya Giriş Güz 2014 (9. Sunu)
Kabuk Programlama Shell Scripting(bash)
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
Bilgisayar Programlama Güz 2011
Bu Günkü Konular If yapısı ve karşılaştırma operatörleri
Bugünkü Konular Döngüler ve Akış Diyagramları C de Döngü Tanımlama
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
BMS-301 Kabuk Programlama Güz 2015 (5. Sunu) (Yrd. Doç. Dr. Deniz Dal)
Döngü Komutları. for deyimi bir alt limitten, bir üst limite kadar programın belirli bir parçasını tekrar eder. for deyiminde sayaç artış oranı da verilmelidir.
BM-103 Programlamaya Giriş Güz 2012 (3. Sunu)
İnternet Programlama-I
Fonksiyonlar.
Adım Adım Algoritma.
SAYISAL ANALİZ Doç.Dr. Cüneyt BAYILMIŞ.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Sayısal Analiz / Uygulama
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
5. HAFTA Mart Discussion: comp.soft-sys.matlab An unmoderated newsgroup that focuses on the.
BİLGİSAYAR PROGRAMLAMA DERSİ 4. DERS NOTU Konu: M-dosya yapısı ve Kontrol Yapıları 1.
PHP'de Program Denetimi
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
BM-103 Programlamaya Giriş Güz 2016 (4. Sunu)
BM-103 Programlamaya Giriş Güz 2016 (5. Sunu)
C Programlama Yrd.Doç.Dr. Ziynet PAMUK BMM211-H04
METHODLAR VE KOŞULLAR.
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
Excel’de VBA Programlama (Visual Basic Application)
Bölüm 5: Kontrol Yapıları II (Yenilenme-Repetition)
Discussion: comp.soft-sys.matlab
Bilgisayar Bilimi Döngüler.
Sunum transkripti:

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

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. ~ $ test 5 -gt 3 ~ $ echo $? 0 ~ $ test 5 -gt 6; echo $? 1

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.

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.)

Common test Cases

Ş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

Ş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.

Ö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.

Çö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

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

Ş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

Ö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.)

Çö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.

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.

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

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.

Ö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

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

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

Ö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

Örnek 2. Çözüm #!/bin/bash for i in # `seq 1 10` #sequence of numbers do echo $i; done

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

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. $ sayi1=`expr 3 \* 5` $ sayi2=$(expr 3 \* 5) $ echo $sayi1 15 $ echo $sayi2 15

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

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"; $./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

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. $ bash -x Argumanlar.sh Deniz Dal BMS301

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

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.

Ö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;

Ö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.

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.