Koşullu Çalıştırma
Önceki Birleşik Komutlar Sonraki
Koşullu Çalıştırma
if
if deyiminin sözdizimi:
if sınama-komutları; then
  artbileşen-komutlar;
[elif diğer-sınama-komutları; then
  diğer-altbileşenler;]
[else
  karşı-altbileşenler;]
fi
sınama-komutları listesi yorumlandığında dönüş durumu sıfırsa, artbileşen-komutlar çalıştırılır; sıfırdan farklı ise elif'lerin diğer-sınama-komutları listesi yorumlanır ve bunların dönüş durumuna göre ya diğer-altbileşenler ya da karşı-altbileşenler çalıştırılır. Deyimin tamamının dönüş durumu çalıştırılmış olan son komutun çıkış durumudur. Bir komut çalıştırılmamışsa ve hiçbir koşul doğru sonuç vermemişse sıfır döner.
case
case deyiminin sözdizimi:
case sözcük in [ [(] kalıp [| kalıp]...) komutlar ;;]... esac
case deyimi sözcük ile eşleşen ilk kalıp'a karşı düşen komutlar'ı çalıştırır. Kabuk seçeneği nocasematch etkinse eşleşme alfabetik karakterlerin büyüklüklerine bakılmaksızın uygulanır (bkz, shopt Yerleşiği). Çok sayıda kalıp kullanılmışsa kalıpları ayırmak için | işleci, kalıp listesini sonlandırmak için ise ) işleci kullanılır. Her case deyimi bir ;; işleci ile sonlandırılmalıdır. sözcük bir kalıp ile eşleştirmeye çalışılmadan önce, ayrımlama uygulanır ve yaklaşık (~), parametre, komut ve aritmetik yorumlamalarına tabi tutulur.
Herbiri ;; işleci ile sonlandırılmış çok sayıda case deyimi ardarda kullanılabilir. Ancak bunların içinden sadece ilk sözcük-kalıp eşleşmesine bağlı komutlar çalıştırılır.
Aşağıdaki örnek betikte case deyimi hayvanların bazı özellikleri için kullanılmıştır:
echo -n "Bir hayvan ismi yazınız: "
read HAYVAN
echo -n "$HAYVAN "
case $HAYVAN in
  at | kedi | maymun) echo -n "dört bacaklıdır" ;;
   kanarya | kanguru) echo -n "iki bacaklıdır" ;;
                   *) echo -n "için bir veri yok" ;;
esac
Hiçbir kalıp eşleşmezse dönüş durumu sıfırdır. Aksi takdirde son çalıştırılan komutun çıkış durumu döndürülür.
select
The select menü üretiminde kolaylık sağlar. for deyimine benzer bir sözdizimi vardır:
select isim [in sözcük ...]; do komutlar; done
sözcük ... listesi yorumlanarak öğe listesi üretilir. Öğe listesindeki her öğe başına bir numara eklenerek standart hataya çıktılanır. Eğer in sözcük ... çifti verilmezse, in "$@" verilmiş gibi konuma bağlı parametreler basılır ve standart girdide PS3 istemi ile girdi beklenir. Listede belirtilen numaralardan biri girdi olarak verilirse, o konuma bağlı sözcük ile isim eşleştirilir. Girdi satırı boş verilirse, EOF verilinceye kadar komut istemi tekrarlanır. Listede belirtilenler dışında verilen her değer için isim null ile eşleştirilir. Okunan satır REPLY değişkeninde tutulur.
Her seçimden sonra bir break komutu ile select sonlandırılıncaya kadar seçime bağlı olarak komutlar çalıştırılır.
Aşağıdaki betik örneğinde, bulunulan dizin içindeki dosyalar listelenir ve kullanıcıdan birini seçmesi istenir. Seçilen dosyanın ismi ve parantez içinde verdiğiniz girdi gösterilir:
select fname in *;
do
  echo $fname \($REPLY\) seçtiniz.
  break;
done
((…))
    (( ifade ))
Verilen aritmetik ifade Kabuk Aritmetiği bölümünde açıklandığı gibi yorumlanır. Eğer ifadenin değeri sıfırdan farklı ise dönüş durumu sıfırdır; aksi takdirde 1 dir. Bu gösterim,
    let "ifade"
ile eşdeğerdedir.
[[…]]
    [[ ifade ]]
Koşullu ifadenin yorumuna bağlı olarak 0 ya da 1 ile döner. İfadeler Bash Koşullu İfadeleri bölümünde açıklanan önceliklere göre yorumlanır. [[ ile ]] arasındaki sözcüklere sözcük ve dosyaismi yorumlaması uygulanmaz, sadece yaklaşık (~), parametre ve değişken yorumlamalarıyla aritmetik, komut ve süreç yorumlamaları ve ayrımlama uygulanır.
-f gibi mantıksal işleçler öncelikliler arasında sayılabilmeleri için tırnak içine alınmamış olmalıdırlar.
== ve != işleçleri kullanıldığında, işlecin sağındaki dizge bir kalıp olarak ele alınır ve Kalıp Eşleme bölümünde açıklanan kurallara göre eşleştirme yapılır. Kabuk seçeneği nocasematch etkinse eşleşme alfabetik karakterlerin büyüklüklerine bakılmaksızın uygulanır (bkz, shopt Yerleşiği). Dizge kalıpla eşleşirse (`==') 0, eşleşmezse (`!=') 1 ile döner. Kalıbın bir bölümünün özellikle dizge olarak yorumlanması isteniyorsa o bölüm tırnak içine alınabilir.
== ve != işleçleriyle aynı öncelik sırasına sahip bir iki terimli daha vardır: =~ işleci. Kullanıldığında, işlecin sağındaki dizge bir gelişkin düzenli ifade olarak ele alınır ve buna uygun eşleştirilir (regex3'teki gibi). Dizge kalıpla eşleşirse dönüş değeri 0, aksi takdirde 1'dir. Eğer düzenli ifade sözdizimsel olarak hatalıysa koşullu ifade 2 değeri ile döner. Kabuk seçeneği nocasematch etkinse eşleşme alfabetik karakterlerin büyüklüklerine bakılmaksızın uygulanır (bkz, shopt Yerleşiği). Düzenli ifade içindeki parantezli altifadelerle eşleşen altdizgeler dizi değişkeni BASH_REMATCH'de saklanır. BASH_REMATCH'in 0 indisli elemanı düzenli ifadenin tamamı ile eşleşen dizgeyi içerer. BASH_REMATCH'in n indisli elemanı ise düzenli ifadenin n'inci parantezli altifadesi ile eşleşen dizgeyi içerir.
İfadeler aşağıdaki işleç öncelik sırasına göre yorumlanır:
    ( ifade )
ifade'nin değeri ile döner. Önceliği arttırmak için kullanılır.
    ! ifade
ifadenin değeri yanlışsa doğru döner.
    ifade1 && ifade2
ifade1 ve ifade2, her ikisi de doğru ise sonuç doğrudur.
    ifade1 || ifade2
ifade1 ya da ifade2, her ikisinden biri doğru ise sonuç doğrudur.
&& ve || işleçleri ile sonucu elde etmek için ifade1 ifadesinin değeri yeterliyse ifade2 yorumlanmaz.
Önceki Üst Ana Başlık Sonraki
Döngüler Başlangıç Komutların Gruplanması
Bir Linux Kitaplığı Sayfası