Bash If İfadeleri Nasıl Kullanılır (4 Örnekle)

Yayınlanan: 2023-05-08
Arka planda küre deseni ve ikili filigran bulunan bir terminal penceresini gösteren Linux dizüstü bilgisayar
fatmawati achmad zaenuri/Shutterstock
Bir if then fi yapısıyla koşullu ifadeler oluşturmak için Linux Bash if deyimini kullanın. Ek koşullu ifadeler için elif anahtar sözcükleri veya daha önce hiçbir koşul yan tümcesi yürütülmemişse yürütülen bir tümünü yakalama kodunu tanımlamak için else anahtar sözcüğünü ekleyin.

Önemsiz olmayan tüm Bash betiklerinin karar vermesi gerekir. Bash if deyimi, Linux betiğinizin sorular sormasına ve yanıta bağlı olarak farklı kod bölümlerini çalıştırmasına izin verir. İşte nasıl çalıştıkları.

Koşullu Yürütme Nedir?

Bash betiklerinin en önemsizleri dışında hepsinde, bir kararın sonucuna göre genellikle yürütme akışının betikte farklı bir yol izlemesi gerekir. Buna koşullu yürütme denir.

Hangi yürütme kolunun kullanılacağına karar vermenin bir yolu, bir if ifadesi kullanmaktır. if deyimlerinin if then deyimleri veya if then else deyimlerini duyabilirsiniz. Aynı şey için farklı isimler.

Linux Bash Komut Dosyalarında 9 Döngü Örneği
İLGİLİ 9 Linux Bash Komut Dosyalarında Döngüler İçin Örnekler

if ifadesi, bir şey doğruysa, bunu yapın der. Ama bir şey yanlışsa, bunun yerine onu yapın. "Bir şey", bir değişkenin değeri, bir dosyanın varlığı veya iki dizenin eşleşip eşleşmediği gibi pek çok şey olabilir.

Koşullu yürütme, herhangi bir anlamlı komut dosyası için hayati önem taşır. Onsuz, senaryonuza yaptırabileceğiniz şeyler çok sınırlı. Anlamlı kararlar alamadıkça, gerçek dünya sorunlarını ele alıp uygulanabilir çözümler üretemezsiniz.

if ifadesi, muhtemelen koşullu yürütmeyi elde etmenin en sık kullanılan yoludur. Bash komut dosyasında nasıl kullanılacağı aşağıda açıklanmıştır.

İLİŞKİLİ: Linux Bash Komut Dosyalarında Bir Dosyanın Var Olup Olmadığını Kontrol Etme

Basit Bir If İfadesi Örneği

Bu, en basit if ifadesinin kanonik biçimidir:

 eğer [ bu-koşul-is-true ]
Daha sonra
  yürütme-bu-deyimler
fi

Metin içindeki koşul doğru olarak çözümlenirse, then yan tümcesindeki betik satırları yürütülür. Başkaları tarafından yazılmış komut dosyalarına bakıyorsanız, if ifadesinin şu şekilde yazıldığını görebilirsiniz:

 if [ bu-koşul-is-true ]; Daha sonra
  yürütme-bu-deyimler
fi

Dikkat edilmesi gereken bazı noktalar:

  • if ifadesi fi yazılarak sonlandırılır.
  • Koşullu testin ilk parantezinden ” [sonra ve ikinci parantezden ” ]önce bir boşluk bırakılmalıdır.
  • Şayet koşullu test ile aynı satıra then anahtar kelimesini koyacaksanız, noktalı virgül kullandığınızdan emin olun ” ; ” testten sonra.

Koşul testinin yanlış olduğu kanıtlanırsa, bazı kodların yürütülmesi için isteğe bağlı bir else yan tümcesi ekleyebiliriz. else tümcesi bir then anahtar sözcüğüne ihtiyaç duymaz.

 eğer [ bu-koşul-is-true ]
Daha sonra
  yürütme-bu-deyimler
başka
  yerine-bu-ifadeleri-execut
fi

Bu betik, else yan tümcesi kullanan bir if ifadesinin basit bir örneğini gösterir. Koşullu test, müşterinin yaşının 21'den büyük veya eşit olup olmadığını kontrol eder. Eğer öyleyse, müşteri tesise girebilir ve then maddesi yürütülür. Yeterince yaşlı değillerse, else yan tümcesi yürütülür ve içeri girmelerine izin verilmez.

 #!/bin/bash

müşteri_yaşı=25

eğer [ $customer_age -ge 21 ]
Daha sonra
  yankı "İçeri gel."
başka
  yankı "İçeri giremezsiniz."
fi

Komut dosyasını yukarıdan bir düzenleyiciye kopyalayın, "if-age.sh" adlı bir dosya olarak kaydedin ve yürütülebilir hale getirmek için chmod komutunu kullanın. Bunu tartıştığımız her betik için yapmanız gerekecek.

 chmod +x if-age.sh 

Komut dosyasını çalıştırılabilir yapmak için chmod'u kullanma

Scriptimizi çalıştıralım.

 ./if-age.sh 

if-age.sh komut dosyasını yaş değişkeni 25'e ayarlı olarak çalıştırma

Şimdi dosyayı düzenleyeceğiz ve 21'den küçük bir yaş kullanacağız.

 müşteri_yaşı=18

Komut dosyanızda bu değişikliği yapın ve değişikliklerinizi kaydedin. Şimdi çalıştırırsak koşul false döndürür ve else yan tümcesi yürütülür.

 ./if-age.sh 

if-age.sh komut dosyasını yaş değişkeni 18'e ayarlı olarak çalıştırma

elif cümlesi

elif yan tümcesi ek koşullu testler ekler. Dilediğiniz kadar elif cümlesi kullanabilirsiniz. Biri doğru olana kadar sırayla değerlendirilirler. elif koşullu testlerinden hiçbiri doğru çıkmazsa, eğer varsa, else yan tümcesi yürütülür.

Bu komut dosyası bir sayı ister ve ardından size bunun tek mi çift mi olduğunu söyler. Sıfır bir çift sayıdır, bu nedenle hiçbir şeyi test etmemize gerek yoktur.

Diğer tüm sayılar, ikiye bölmenin modulo'su bulunarak test edilir. Bizim durumumuzda modulo, ikiye bölme işleminin sonucunun kesirli kısmıdır. Kesirli kısım yoksa sayı ikiye tam bölünür. Bu nedenle çift sayıdır.

 #!/bin/bash

echo -n "Bir sayı girin: "

numarayı oku

eğer [ $number -eq 0 ]
Daha sonra
  echo "Sıfır girdiniz. Sıfır çift sayıdır."
elif [ $(($sayı % 2)) -eq 0 ]
Daha sonra
  echo "$Sayı girdiniz. Çift sayı."
başka
  echo "$Sayı girdiniz. Tek sayı."
fi

Bu komut dosyasını çalıştırmak için, onu bir düzenleyiciye kopyalayın ve "if-even.sh" olarak kaydedin, ardından yürütülebilir hale getirmek için chmod'u kullanın.

Komut dosyasını birkaç kez çalıştıralım ve çıktısını kontrol edelim.

 ./if-even.sh 

if-even.sh betiğini çeşitli girdilerle çalıştırma

Hepsi iyi çalışıyor.

Koşullu Testin Farklı Biçimleri

Koşullu testlerimiz için kullandığımız “ [] ” parantezleri, test programını çağırmanın kısa yoludur. Bu nedenle, test desteklediği tüm karşılaştırmalar ve testler, if ifadenizde kullanılabilir.

Bu onlardan sadece birkaçı:

  • ! ifade : İfade yanlışsa doğrudur.
  • -n string : Dizenin uzunluğu sıfırdan büyükse doğrudur.
  • -z string : Dizenin uzunluğu sıfırsa doğrudur. Yani, boş bir dizedir.
  • string1 = string2 : string1, string2 ile aynıysa doğrudur.
  • string1 != string2 : string1, string2 ile aynı değilse doğrudur.
  • tamsayı1 -eq tamsayı2 : tamsayı1 sayısal olarak tamsayı2'ye eşitse doğrudur
  • tamsayı1 -qt tamsayı2 : tamsayı1 sayısal olarak tamsayı2'den büyükse doğrudur
  • tamsayı1 -lt tamsayı2 : tamsayı1 sayısal olarak tamsayı2'den küçükse doğrudur
  • -d dizin : Dizin varsa doğrudur.
  • -e dosya : Dosya varsa doğrudur.
  • -s file : Dosyanın boyutu sıfırdan büyükse doğrudur.
  • -r dosya : Dosya varsa ve okuma izni ayarlanmışsa doğrudur.
  • -w file : Dosya varsa ve yazma izni ayarlanmışsa doğrudur.
  • -x file : Dosya varsa ve yürütme izni ayarlanmışsa doğrudur.

Tabloda "dosya" ve "dizin", göreli veya mutlak dizin yollarını içerebilir.

Eşittir işareti “ = ” ve eşitlik testi -eq aynı değildir . Eşittir işareti, karakter karakter metin karşılaştırması gerçekleştirir. Eşitlik testi, sayısal bir karşılaştırma gerçekleştirir.

Bunu komut satırındaki test programını kullanarak görebiliriz.

 test "bu dizi" = "bu dizi"
 test "bu dizi" = "o dizi"
 test 1 = 001
 test 1 -eq 001

Her durumda, son komutun dönüş kodunu yazdırmak için echo komutunu kullanırız. Sıfır doğru, bir yanlış demektir.

Farklı karşılaştırmaları test etmek için komut satırındaki test programını kullanma

" = " eşittir işaretini kullanmak bize 1 ile 001'i karşılaştıran yanlış bir yanıt verir. Bu doğrudur, çünkü bunlar iki farklı karakter dizisidir. Sayısal olarak aynı değerdir - bir - bu nedenle -eq operatörü gerçek bir yanıt verir.

Koşullu testinizde joker karakter eşleştirmeyi kullanmak istiyorsanız, çift parantez ” [[ ]] ” sözdizimini kullanın.

 #!/bin/bash

eğer [[ $USER == *ve ]]
Daha sonra
  yankı "Merhaba $KULLANICI"
başka
  echo "$USER 've' ile bitmiyor"
fi

Bu komut dosyası, geçerli kullanıcının hesap adını kontrol eder. “ ve “ ile bitiyorsa kullanıcı adını yazdırır. Eğer " ve " ile bitmiyorsa, senaryo size öyle söyler ve biter.

 ./if-wild.sh 

if ifadesinin koşullu testinde joker karakter aramasını gösteren if-wild.sh betiğini çalıştırma

İLİŞKİLİ: Bash'te Koşullu Test: if, then, else, elif

İç İçe If İfadeleri

Bir if if koyabilirsiniz.

Bu tamamen kabul edilebilir, ancak if ifadelerinin iç içe yerleştirilmesi, kodun okunması daha az kolay ve bakımı daha zor olmasını sağlar. Kendinizi iki veya üç seviyeden fazla if ifadesi iç içe bulursanız, muhtemelen betiğinizin mantığını yeniden düzenlemeniz gerekir.

İşte günü birden yediye kadar bir sayı olarak alan bir senaryo. Biri Pazartesi, yedisi Pazar.

Bize bir dükkanın çalışma saatlerini söyler. Hafta içi veya Cumartesi ise, dükkanın açık olduğunu bildirir. Pazar günü ise dükkanın kapalı olduğunu bildirir.

Mağaza açıksa, iç içe if ifadesi ikinci bir test yapar. Gün Çarşamba ise, bize sadece sabahları açık olduğunu söyler.

 #!/bin/bash

# günü 1..7 numara olarak alın
gün=$(tarih +"%u")

eğer [ $day -le 6 ]
Daha sonra
  ## dükkan açık
  eğer [ $day -eq 3 ]
  Daha sonra
    # Çarşamba yarım gündür
    yankı "Çarşamba günleri sadece sabahları açıyoruz."
  başka
    # normal hafta içi günleri ve Cumartesi
   yankı "Bütün gün açığız."
  fi
başka
  # pazar günleri açık değil
  yankı "Bugün Pazar, kapalıyız."
fi

Bu komut dosyasını bir düzenleyiciye kopyalayın, “if-shop.sh” adlı bir dosya olarak kaydedin ve chmod komutunu kullanarak yürütülebilir hale getirin.

Komut dosyasını bir kez çalıştırdık ve ardından bilgisayarın saatini Çarşamba olarak değiştirdik ve komut dosyasını yeniden çalıştırdık. Daha sonra günü Pazar olarak değiştirdik ve bir kez daha koştuk.

 ./if-shop.sh
 ./if-shop.sh
 ./if-shop.sh 

if-shop.sh komut dosyasını, bilgisayar saati hafta içi bir güne, ardından Çarşamba ve ardından Pazar gününe ayarlı olarak çalıştırma

İLİŞKİLİ: Linux'ta Çift Parantez Koşullu Testleri Nasıl Kullanılır

durum için eğer

Koşullu yürütme, programlamaya ve komut dosyası oluşturmaya güç sağlayan şeydir ve mütevazi if ifadesi, kod içinde yürütme yolunu değiştirmenin en sık kullanılan yolu olabilir. Ama bu her zaman cevap olduğu anlamına gelmez.

İyi kod yazmak, belirli bir gereksinimi çözmek için hangi seçeneklere sahip olduğunuzu ve hangilerinin en iyi olduğunu bilmek anlamına gelir. if ifadesi harika, ancak çantanızdaki tek araç olmasına izin vermeyin. Özellikle, bazı senaryolarda çözüm olabilecek case ifadesine göz atın.

İLİŞKİLİ: Bash Betiklerinde Vaka İfadeleri Nasıl Kullanılır?