Bu dersimizde yazdığımız Bash ortamı scriptlerinde If-Then-Else deyimlerini nasıl kullanabileceğimizi göreceğiz. If-Then-Else ifadeleri, bazı koşullar karşılandığında bir komut dosyasının eylem yolunu tanımlamanın bir yolunu sağlamak için kullanışlı bir araçtır. If-Then-Else deyimlerinin sözdiziminin ne olduğunu görelim:
EğerBAZI KOMUTLAR;sonraSONRA-KOMUTLAR;
BaşkaBAŞKA KOMUTLAR;
olmak
Yukarıdaki komutta, SOME-COMMANDS'ın doğru olduğu veya dönüş durumunun 0 olduğu tespit edilirse, THEN-COMMANDS yürütülecektir. Aksi takdirde, ELSE-COMMANDS yürütülür. SOME-COMMANDS'da, genellikle tamsayılar biçiminde bazı String karşılaştırması veya değer karşılaştırması yaparız. Ayrıca dosya içeren birçok işlem yapabiliriz. Esas olarak dosya tabanlı koşullarla çalışırken kullanılan bazı örnek birincil komutlara bakalım:
Öncelik | Anlam |
---|---|
[ -ile ] | DOSYA varken true değerini döndürür. |
[-B] | DOSYA mevcut olduğunda ve bir blok özel dosya olduğunda true değerini döndürür. |
[-C] | DOSYA mevcut olduğunda ve bir karakter özel dosyası olduğunda true değerini döndürür. |
[ -NS ] | FILE var olduğunda ve bir dizin olduğunda true değerini döndürür. |
[ -Ve ] | DOSYA varken true değerini döndürür. |
[ -F ] | DOSYA mevcut olduğunda ve normal bir dosya olduğunda true değerini döndürür. |
[ -G ] | DOSYA mevcut olduğunda ve SGID biti ayarlandığında true değerini döndürür. |
[ -H ] | DOSYA mevcut olduğunda & sembolik bir bağlantı olduğunda true değerini döndürür. |
[-k] | DOSYA mevcut olduğunda ve yapışkan biti ayarlandığında true değerini döndürür. |
[ -P ] | DOSYA mevcut olduğunda ve adlandırılmış bir kanal (FIFO) olduğunda true değerini döndürür. |
[ -r ] | DOSYA mevcut olduğunda ve okunabilir olduğunda true değerini döndürür. |
[ -s ] | DOSYA mevcut olduğunda ve sıfırdan büyük bir boyuta sahip olduğunda true döndürür. |
[ -T ] | FD dosya tanıtıcısı açıkken true döndürür ve bir terminale atıfta bulunur. |
[-u] | DOSYA mevcut olduğunda ve SUID (kullanıcı kimliğini ayarla) biti ayarlandığında true değerini döndürür. |
[ -içinde ] | DOSYA mevcut olduğunda ve yazılabilir olduğunda true değerini döndürür. |
[-x] | DOSYA mevcut olduğunda ve yürütülebilir olduğunda true değerini döndürür. |
[-Ö] | DOSYA mevcut olduğunda ve etkin kullanıcı kimliğine ait olduğunda true değerini döndürür. |
[ -G ] | DOSYA mevcut olduğunda ve etkin grup kimliğine ait olduğunda true değerini döndürür. |
[ -NS ] | DOSYA mevcut olduğunda & sembolik bir bağlantı olduğunda true değerini döndürür. |
[ -N ] | DOSYA mevcut olduğunda ve son okunduğundan beri değiştirildiğinde true döndürür. |
[ -S ] | DOSYA mevcut olduğunda ve bir yuva olduğunda true değerini döndürür. |
THEN-COMMANDS ve ELSE-COMMANDS, herhangi bir geçerli UNIX işlemi veya herhangi bir yürütülebilir program olabilir. unutmayın sonra ve olmak komutlar, bir komut dosyasının tamamen ayrı öğeleri olarak kabul edildikleri için noktalı virgülle ayrılır.
If-Then-Else Basit Örnek
Dersimize If-Then-Else ifadeleri ile çok basit bir örnekle başlayalım.
İşte örnek bir program:
Komut dosyamızı çalıştırdığımızda gördüğümüz çıktı:
$. ifelse1.shDeğerler aynı!
$
Komut satırı bağımsız değişkenlerini kullanma
Ayrıca betiklerimizde komut satırı argümanlarını kullanabilir ve tanımladığımız IF ifadesinde argüman sayısını ve değerlerin kendisini koşul olarak kullanabiliriz. Önce aşağıdaki içeriğe sahip bir metin dosyası tanımlıyoruz:
Benim adım LinuxHint. Sunucuları, özellikle Ubuntu sunucularını seviyorum. onlar çok
ölümcül!
Artık bir metin dosyasında bir kelimenin geçip geçmediğini bulan bir komut dosyası yazabiliriz. Şimdi betiği tanımlayalım:
dışarı attı '2 dolarda 1 doları bulmak'kavramak 1 dolar 2 dolar
Eğer [ $? -doğmak 0 ]
sonra
dışarı attı '$1, $2 dosyasında bulunamadı.'
Başka
dışarı attı '2$ dosyasında 1$ bulundu.'
olmak
dışarı attı 'Komut dosyası tamamlandı.'
Bu komut dosyası çok dinamik. Bulunacak kelimeyi ve aranacak dosyayı komut satırından dikkate alır. Artık betiğimizi çalıştırmaya hazırız:
. ifelse2.sh merhaba.txt'yi seviyorumŞöyle bir çıktı göreceğiz:
Aşkı bulmaiçindemerhaba.txtaşk bulunduiçinde dosyamerhaba.txt.
Komut dosyası tamamlandı.
Komut satırı argümanlarının sayısını kontrol etme
Bir IF ifadesinin içinde, aynı şekilde hareket edebilmemiz için komuta kaç tane komut satırı argümanının iletildiğini bile kontrol edebiliriz:
saymak=$ #Eğer [ ! $sayım -gt 1 ]
sonra
dışarı attı 'Yeterli argüman yok'
Başka
dışarı attı 'Aferin!'
olmak
Şimdi bu betiği çalıştıralım, aşağıdaki çıktıyı göreceğiz:
If-Then-Elif-Else İfadeleri
Programımızın tanımladığımız komutları yürütmek için aldığı karar yolunu daraltmak için aynı blokta birden fazla IF ifadesine de sahip olabiliriz. Komut dosyalarımızda birden çok IF ifadesi tanımlamak için kullanılan sözdizimi şöyledir:
EğerTEST-KOMUTLARI;sonra
SONUÇ-KOMUTLAR;
elif
BAŞKA-KOMUTLAR;
sonra
BAŞKA-SONUÇ-KOMUTLAR;
Başka
ALTERNATİF KOMUTLAR;
olmak
Bu oldukça tanıdık geliyor ve takip etmesi de kolay. Ağacın nasıl çalıştığını belirlemek için basit bir örnek tanımlayalım:
saymak=$ #Eğer [ $sayım -eq 1 ]
sonra
dışarı attı 'Yalnızca bir argüman bulundu.'
elif [ $sayım -eq 2 ]
sonra
dışarı attı 'Daha iyi, iki argüman bulundu.'
Başka
dışarı attı 'İyi iş, birçok argüman bulundu!'
olmak
İşte bu komutla geri aldığımız şey:
Durum ifadelerini kullanma
IF-ELSE ifadeleri, karar vermeniz gereken çok sayıda seçenek listeniz olduğunda kullanışlıdır. Ancak, sonuçla tam olarak eşleşen birkaç durumda bir eylem gerçekleştirmek istemeniz durumunda, Bash betiklerinde de CASE deyimlerini kullanabiliriz. Sözdizimi şöyle görünür:
durumİFADEiçindeDAVA 1)YÜRÜTMEK İÇİN KOMUTLAR;DURUM2)YÜRÜTMEK İÇİN KOMUTLAR;
DURUM2)YÜRÜTMEK İÇİN KOMUTLAR;
...)YÜRÜTMEK İÇİN KOMUTLAR;
*)YÜRÜTMEK İÇİN KOMUTLAR;
esac
* ile son durum, varsayılan durum olarak hareket eder ve yukarıda tanımlanan durumlardan hiçbiri eşleşmediği zaman yürütülür.
CASE deyimlerini kullanarak hızlı bir şekilde basit bir örnek oluşturalım:
durum '1 dolar' içinde1)
dışarı attı 'Değer 1'dir.
;;
2)
dışarı attı 'Değer 2'dir.
;;
3)
dışarı attı 'Değer 3'tür.
;;
*)
dışarı attı 'Diğer değer geçti.'
esac
Her CASE ifadesi ;; (çift noktalı virgül işareti). İşte bu komutla geri aldığımız şey:
Çözüm
Bu derste, programlarımızda var olan veya konumsal kullanarak kullanıcı tarafından iletilen değerler temelinde belirli eylemler yapmak için tanımladığımız Bash betiklerinde IF-ELSE, IF-THEN-ELIF ve CASE deyimlerini nasıl kullanabileceğimize baktık. parametreler.