Bash If İfadeleri Nasıl Kullanılır (4 Örnekle)
Yayınlanan: 2023-05-08
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.
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
ifadesifi
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
Scriptimizi çalıştıralım.
./if-age.sh
Ş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
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
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.
" =
" 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
İ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
İ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?