[*] Her dilde bu konu vardır ancak burada, diğer programlama dillerine göre öğrenmesi biraz daha zor bir konudur. O yüzden sıkılmadan, pes etmeden bitirmeye ve bitirdikten sonra bolca pratik yapmaya çalışın. Bu bölüme ciddi bir mesai harcamanız elzemdir.
Bizim, bilgisayarlara laf anlatabilmemiz için bilgisayarlarla, bir çocukla nasıl konuşuyorsak öyle konuşmamız gerekir yani her şeyi tane tane anlatmak ve bunları vurgulayarak anlatmamız gerekir. Örneğin küçük bir çocuğu markete yollamak istiyorsunuz ve ondan istediğiniz şey size bir su ve eğer varsa bir de çikolata almasıdır. Bunu, çocuğa aynı şekilde anlatırsınız: "Bana bir su ve eğer varsa bir de çikolata alır mısın?". Bu durumda çocuk ilk önce suyu alır, daha sonra çikolata var mı diye bakar. Eğer çikolata varsa alır, yoksa alamaz ve size sadece su getirir.
İşte bu koşulları bilgisayara ifade edebilmemiz için bazı sembollere ihtiyacımız vardır. Fakat burada dikkatli olmamız gereken bir husus var; daha önce anlattığım int ve string ifadeler için farklılıklar söz konusudur. Hemen bakalım.
int ifadeler için kullanımlar
-eq Bu ifade, iki değerin eşitliğini sorgular. 'equal' kelimesinden gelir ve anlamı 'eşit' şeklindedir. Bu ifadeyi kullanırken kuracağımız cümle şuna benzeyecektir: "Eğer x, y'ye eşitse..."
-ne Bu ifade, 'not equal' kalıbından gelir ve anlamı 'eşit değil' şeklindedir. Kendisi, yukarıdaki gibi iki değerin eşitliğini sorgular ancak olumsuz durumda çalışacaktır. Bu ifadeyi kullanırken kuracağımız cümle şuna benzeyecektir: "Eğer x, y'ye eşit değilse..."
-gt Bu ifade 'greater than' kalıbından gelir ve anlamı 'daha büyük' şeklindedir. Burada biz, bir değerin diğer değerden daha büyük olup olmadığını sorgularız. Bu ifadeyi kullanırken kuracağımız cümle şuna benzeyecektir: "Eğer x, y'den daha büyükse..."
-ge Bu ifade, 'greater than or equal to' kalıbından gelir ve anlamı 'daha büyük ya da eşit' şeklindedir. Bunu, matematikteki 'büyük eşit' ifadesine benzetebilirsiniz. Burada biz, bir değerin diğer değerden büyük veya ona eşit olup olmadığını sorgularız. Bu ifadeyi kullanırken kuracağımız cümle şuna benzeyecektir: "Eğer x, y'den büyük veya ona eşitse..."
-lt Bu ifade, 'less than' kalıbından gelir ve anlamı 'daha küçük' şeklindedir. Bu, biraz önceki '-gt' komutunun tersidir. Bu ifadeyi kullanırken kuracağımız cümle şuna benzeyecektir: "Eğer x, y'den daha küçükse..."
-le Bu ifade, 'less than or equal to' kalıbından gelir ve anlamı 'daha küçük ya da eşit' şeklindedir. '-ge' komutunun tersidir. Bu ifadeyi kullanırken kuracağımız cümle şuna benzeyecektir: "Eğer x, y'den daha küçük ya da ona eşitse..."
Buraya kadar tamamsak ufak bir detaydan söz etmezsem hata üstüne hata alacaksınızdır. Biz bu harfler ile işlem yaparken bunları, köşeli parantezler içerisine alıyoruz. Yani örneğin '[ $sayi1 -eq $sayi2 ]'. Şimdi, diğer kısma geçelim ve bitirdikten sonra onları nasıl kullanacağınıza bakalım.
Bu kısımdakiler, bildiğiniz matematikte kullandığımız sembollerdir.
< sembolü, 'küçüktür' anlamına gelir. Bu ifadeyi kullanırken kuracağımız cümle şuna benzeyecektir: "Eğer x, y'den daha küçükse..."
<= sembolü, 'küçük eşit' anlamına gelir. Bu ifadeyi kullanırken kuracağımız cümle şuna benzeyecektir: "Eğer x, y'den daha küçük veya ona eşitse..."
> sembolü, 'büyüktür' anlamına gelir. Bu ifadeyi kullanırken kuracağımız cümle şuna benzeyecektir: "Eğer x, y'den daha büyükse..."
>= sembolü, 'büyük eşit' anlamına gelir. Bu ifadeyi kullanırken kuracağımız cümle şuna benzeyecektir: "Eğer x, y'den daha büyük veya ona eşitse..."
Bu semboller ile işlem yapacaksanız harflerin aksine bunları, normal çift parantez içerisine almanız gerekir. Örneğin '(( $sayi1 <= $sayi2 ))'.
&& ‘ve’ anlamını taşır. Bir koşul ifadesinde iki koşulu birbirine bağlar. Birine 'bana su ve çikolata al' derseniz o kişi ikisini de alacaktır. Dolayısıyla Bunu kullandığınızda iki koşulun da gerçekleşmiş olması zorunludur. Bu ifadeyi şöyle bir örnek ile ifade edebiliriz: [ $sayi1 -eq $sayi2 && $sayi1 -ne 20 ]. Burada söylediğimiz şey şudur: "sayi1, sayi2'ye eşitse ve sayi1, 20'ye eşit değilse...".
|| Bu sembol, 'ya da' anlamına gelir. Bir koşul ifadesinde iki koşulu birbirine bağlar. Birine 'bana su ya da çikolata al' derseniz o kişi ikisinden birini alacaktır. Bu koşul ifadesinde, iki koşuldan birinin gerçekleşmesi yeterlidir. Bu ifadeyi şöyle bir örnek ile ifade edebiliriz: [ $sayi1 -eq $sayi2 || $sayi1 -ne 20 ]. Burada söylediğimiz şey şudur: "sayi1, sayi2'ye eşitse ya da sayi1, 20'ye eşit değilse...".
string ifadeler için kullanımlar
= ve == Bu iki ifade aynı anlama gelir. Bu ifadeler, iki metnin, birbirinin aynısı olup olmadığını kontrol eder. Burada eğer tek bir karakter bile farklıysa eşitlik yoktur. Kullanılırken iki çift köşeli parantez ile kullanılır: [[ $kelime1 = $kelime2 ]]
!= Bu ifade, 'eşit değilse' anlamına gelir yani yukarıdakinin tam tersidir. Burada eğer iki ifade birbirine eşit değilse koşul sağlanmış olur. Kullanılırken iki çift köşeli parantez ile kullanılır: [[ $kelime1 != $kelime2 ]]
< ve > ifadeleri yine 'küçüktür' ve 'büyüktür' ifadelerini belirtir ancak burada ufak bir fark vardır. string yani metinsel ifadeler ile bu operatörler kullanıldıklarında, metinleri ASCII karakterlerine göre alfabetik olarak sıralar. Kullanılırken iki çift köşeli parantez ile kullanılır: [[ $kelime1 < $kelime2 ]]
if - then - fi Şimdi, programlama yaparken bilgisayardan bir şeyi yapmasını istediğimizde aynı bir çocukla konuşur gibi anlatmamız gerekir. Biz de bunu biraz önce anlattığım ifadelerle ve 'if bloğu' ile yaparız. 'if', İngilizce'den gelir ve 'eğer' anlamını taşır. Bu kod ile aslında 'şartlı ifade' yazmış oluruz; "eğer x, 5 ise onu ekrana yazdır" gibi bir cümle bu konuyu güzel özetleyecektir. Peki bunun nasıl yazıldığına bir bakalım.

Bunu yazarken yukarıda gördüğünüz gibi ilk önce 'if' yazıyor, daha sonra köşeli parantezlerimizi açıp koşulumuzu o köşeli parantezlerin içerisine yazıyoruz. Yani; if [] şeklinde bir kullanım sağlıyoruz.
Tane tane anlattığımızı aklınızdan çıkarmayın. if dedikten ve koşulumuzu belirttikten sonra bir alt satıra geçip 'then' yazıyoruz.

Buradaki 'then', İngilizce'den gelir ve 'sonra, ondan sonra' anlamını taşır. Bu komut, if içerisindeki koşulumuza bağlı olarak diğer koşullar arasında bir köprü görevi görür. "Önce buna bak, sonra..." şeklinde ifade edebiliriz.
Bunu da yazdıktan sonra, bir alt satıra geçip 'iki adet boşluk veya bir TAB boşluğu' açıyoruz. Açtığımız bu boşluğa da koşul ifadesine bağlı olarak ne yapılmasını istediğimizi yazıyoruz.

Bunu da hallettikten sonra 'if' bloğunu kapatmamız gerekir. Bu kapatma işlemini de 'if'in tersi olan 'fi' ile sağlarız.

İşte, şimdi 'if' iskeletimizi oluşturduk. Yalnız burada dikkat etmenizi istediğim bir nokta var: "girintiler". Biraz önce 'then' komutundan sonra iki boşluk bırakıp yazacaklarımızı yazdık fakat 'fi' kısmına baktığınızda, if ve then ile aynı hizada olduğunu görüyorsunuz. Bu, programlamada oldukça önemlidir. Anahtar kelimelerin aynı hizada olması şarttır. Yani aşağıdaki gibi bir kullanım yapamayız.

Şimdi, bu anlattıklarımızı biraz pratiğe dökelim ve neler olup bittiğini inceleyelim.
İlk önce iki adet değişken tanımlıyorum ve bunlara 20 değerini veriyorum.

Burada benim istediğim, bu iki değişkenin birbirine eşit olup olmadığını anlamak olsun. Şu ana kadar öğrendikleriniz ile bunu yapmayı deneyebilirsiniz.

Yukarıdaki görseli inceleyelim. Dediğimiz gibi değişken tanımladık; sorun yok. Daha sonra bu eşitliği kontrol edebilmek adına bir 'if bloğuna' ihtiyacımız var. Bu yüzden biraz önce bahsettiğimiz '-eq' şartı ile bunu kontrol edecek kodu yazdık; if [ $num1 -eq $num2 ]
Hemen ardından 'then' anahtar kelimesini kullandık ve iki boşluk bırakıp echo "Evet, eşitler." şeklinde bir kod yazdık. Hemen sonrasında 'fi' ile bu bloğu kapatmış olduk. Peki, burada ne oldu?
Biz, num1 değişkeni ile num2 değişkenini $ işareti ile çağırdık ve aralarına '-eq' ifadesini yerleştirdik. Burada, num1 değişkeninin ve num2 değişkeninin değerini karşılaştırmış olduk. Bunu Türkçe'ye çevirecek olursak şöyle diyebiliriz: "num1 ve num2 birbirine eşitse...". Bu kodu yazdıktan sonra Bash, num1 ve num2 adında değişkenler arayacak, değerlerini tespit edecek ve bunları karşılaştıracaktır. Eğer bu iki ifade eşleşiyorsa 'then' anahtar kelimesinden sonra gelecek olan emirleri yerine getirecektir. Fakat eğer eşleşmiyorsa if bloğu içerisine hiç girmeyecek ve fi kısmının altından yoluna devam edecektir.

Gördüğünüz gibi Bash, değişken değerlerini kontrol etti ve if bloğunu tamamladı. if bloğunda ekrana 'Evet, eşitler.' şeklinde bir yazı yazdırmasını istemiştik; çıktı kısmına baktığımızda bunun gerçekleştiğini görüyoruz.
İsterseniz num2 değişkeninin değerini değiştirelim ve ne olacağına bakalım.

Sadece num2 isimli değişkenin değerini değiştirdim ve çıktı kısmına baktığımda hiçbir şey yazdırılmadığını gördüm. İşte, bunun sebebi if içerisine verdiğimiz koşulun doğru olmamasından yani num1'in num2'ye eşit olmamasından kaynaklı olduğunu görüyoruz.
İsterseniz tam değişkenlere hiç dokunmadan bu sefer eşitsizliği sorgulayalım ve ekrana 'Eşit değiller.' yazdıralım.

Gördüğünüz üzere biraz önce 'equal' ile sorgu yaptık. Şimdi ise 'not equal' ile sorgu yaptık ve gerçekten de num1 ile num2 birbirine eşit olmadığı için koşul sağlanmış oldu.
Şimdi, metinsel ifadelerle çalışalım ve konumuzu kapatalım.

Yukarıdaki görselde iki farklı değişken atadım fakat değerleri tamamen aynı. Daha sonra bunları 'eğer word1 ile word2 birbirine eşitse' şeklinde bir if bloğu içerisine soktum. Bunlar eşit; biliyoruz. Çıktı kısmına baktığımızda da gerçekten eşit olduğunu görüyoruz. Çünkü if bloğu onaylandı ve içerisindeki emirler gerçekleşti.
Şimdi, ufak bir değişiklik yapalım.

Yukarıda sadece word1 değişkeninin değerini 'Cyber Worm' yerine 'CyberWorm' olarak verdim. Eşitliği sorguladığımızda çıktı kısmında hiçbir şeyin olmadığını görüyoruz. Biraz önce dediğim 'tek bir karakter bile farklı olsa' konusu işte bu şekilde ispatlanmış oldu.
if - then - else - fiİki farklı koşulumuz olduğunda 'else' komutunu kullanırız. 'Else' kelimesinin Türkçe karşılığı 'Değilse?, Başka' şeklindedir.
Biraz önce iki sayıyı karşılaştırdık ve hem olumlu hem de olumsuz yanıtları görebilmek adına değişkenlerin değerleriyle oynadık. Peki, sizce buna gerek var mı?
Yani biz, "eğer öyleyse bunu yap ama öyle değilse şunu yap" diyebilir miyiz? Elbette, diyebiliriz. İşte, bu noktada devreye 'else' giriyor.
Biraz önceki iskeletimiz şu şekildeydi:

Şimdi, fi'den önce 'else' kullanacağız. Yani yeni iskeletimiz şöyle olacak:

Dikkat edin; 'else' ifadesinden sonra 'then' kullanmadık. Bununla beraber 'else' yazdıktan sonra direkt olarak aşağı indik yani if bloğunda olduğu gibi herhangi bir koşul sunmadık. Bu, 'else' ifadesinin "en son ihtimalleri" değerlendirdiği anlamına gelir.
Örneğin dersten kalmanız için notunuz 50'den küçük, dersten geçmeniz için notunuz 50'den yüksek olmalıdır. Bunu if ile kontrol edecek olursak şu ana kadar öğrendiklerimiz ile şunu yapabiliriz:

Eğer not 50'den düşükse dersten kalırsınız. O yüzden bunu if içerisine sokabilir ve kontrol edebiliriz. Bu durumda kalan son ihtimal, dersten geçmenizdir. Dolayısıyla 'else' dedikten sonra bir koşul yazmamıza gerek kalmaz; zaten son ihtimali vermiş oluruz.
Burada Bash'e dediğimiz şey; "Eğer if içerisindeki koşul sağlanırsa if'e ait komutları çalıştır ama eğer koşul sağlanmazsa bir alt komuta yani 'else' kısmına geç ve oradaki komutları çalıştır."
Bunu deneyelim. Eğer iki sayı birbirine eşitse 'Eşit' yazsın, değilse 'Eşit değil' yazsın.

Burada Bash'e söylediğimiz şey şu: "Eğer num1 ile num2 eşitse ekrana 'Eşit' yazdır ama eşit değilse 'Eşit değil' yazdır."
if - then - elif - then - else - fiPeki, birden fazla koşulumuz veya ihtimalimiz olsaydı, o zaman ne yapacaktık; onlarca 'if' bloğu açıp en sona da 'else' mi koyacaktık? Saçma. İşte, tam bu sebepten ötürü 'elif' kavramı geliştirilmiştir. 'elif', 'else' ve 'if' komutlarının birleşimidir. Burada 'elif' kullanarak istediğiniz kadar koşullu ifade verebilirsiniz. Hemen iskeletimize bakalım.

Dikkat edin; biraz önce 'else' komutunu anlatırken bir koşul almadığını belirtmiştik. Fakat 'elif' komutu koşul alır. Zaten 'elif'in amacı da budur; ikiden fazla koşula sahip olan işlemlerde kolaylık sağlamaktır.
Peki, biraz önce verdiğimiz ders notu olayını biraz daha genişletelim. Dersten kalmanız için notunuz 50'den küçük, dersten şartlı geçmeniz için notunuz 50 - 55 arası ve dersten geçmeniz için notunuz 50'den yüksek olmalıdır. Bu durumda nasıl bir yol izleyebiliriz? Bu sefer gerçekten kod yazalım.

Diğer kısımları artık biliyorsunuz ancak 'elif' kısmını ele alalım. 'elif (( $average >= 50 && $average <= 55 ))' şeklinde bir ifade yazmışız. Blogun başında belirttiğim gibi 've' operatörünü kullandık. Burada söylediğimiz şey tam olarak şudur: "Eğer average 50'den büyük veya ona eşitse ve average 55'ten küçük veya ona eşitse..."
Daha sonra then dedik ve ne yapmak istiyorsak onu yaptık. Burada, bir sürü 'elif' kullanabilirsiniz ancak bir adet if, bir adet else ve bir adet fi olmak zorundadır. 'elif', arada kalan koşullar içindir.
Yayınlanma Tarihi: 2022-09-08 19:41:25
Son Düzenleme Tarihi: 2022-09-12 17:32:03