Test komutu, bir elemanın diğerine göre karşılaştırılması için Linux komut satırında kullanılabilir, ancak mantık ve program akışını kontrol eden koşullu ifadelerin bir parçası olarak BASH kabuk betiklerinde daha yaygın olarak kullanılır.
Temel Bir Örnek
Bu komutları sadece bir terminal penceresi açarak deneyebilirsiniz.
test 1 -eq 2 && echo "evet" || echo "no"
Yukarıdaki komut aşağıdaki gibi ayrılabilir:
- test - bu, bir karşılaştırma yapmak üzeresiniz demektir
- 1 - karşılaştırmak istediğiniz ilk öğe
- -eq (bu durumda nasıl karşılaştırıyorsunuz, bir sayının bir diğerine eşit olup olmadığını test ediyorsunuz)
- 2 - ilk elemanı tekrar karşılaştırdığınız eleman
- && - sonuç doğruysa aşağıdaki ifadeyi çalıştırın
- echo "evet" - karşılaştırma döndürürse çalıştırılacak komut
- || - sonuç yanlışsa aşağıdaki ifadeyi çalıştırın
- echo "no" - karşılaştırma yanlış döndürürse çalıştırılacak komut
Özünde, komut 1 ile 2'yi karşılaştırıyor ve "evet" ifadesini içeren yankılanan "evet" ifadesiyle eşleşiyorlar ve "hayır" ifadesiyle eşleşmiyorsa "hayır" ifadesiyle eşleşmiyorlar.
Sayıların Karşılaştırılması
Sayı olarak ayrıştırılan öğeleri karşılaştırıyorsanız, aşağıdaki karşılaştırma işleçlerini kullanabilirsiniz:
- -eq - değeri 1 eşit değer 2 yapar
- -ge - 1 değerine eşit veya daha büyük değer 1
- -gt - 2 değerinden daha büyük değer 1
- -le - değeri 1 değerinden küçük veya eşittir 1
- -lt - değer 2'den küçük değer 1'dir
- -ne - 1 değeri, 2 değerine eşit değil
Örnekler:
test 1 -eq 2 && echo "evet" || echo "no"
(1'e eşit değil çünkü ekrana "hayır" görüntüler)
test 1 -ge 2 && echo "evet" || echo "no"
(1'e büyük veya 2'ye eşit olmadığı için ekrana "hayır" mesajını görüntüler.)
test 1 -gt 2 && echo "evet" || echo "no"
(1, 2'den büyük olmadığı için ekrana "hayır" gösterir)
test 1 -le 2 && echo "evet" || echo "no"
(1'e eşit veya 2'ye eşit olduğu için ekrana "evet" mesajını görüntüler)
test 1 -lt 2 && echo "evet" || echo "no"
(1'e eşit veya 2'ye eşit olduğu için ekrana "evet" mesajını görüntüler)
test 1 -ne 2 && echo "evet" || echo "no"
(1'e eşit değil çünkü ekrana "evet" görüntüler)
Metin Karşılaştırma
Dizeler olarak ayrıştırılan öğeleri karşılaştırıyorsanız, aşağıdaki karşılaştırma işleçlerini kullanabilirsiniz:
- = - dize 1 dizesi 2 eşleşir
- ! = - dize 2 farklı 1 dizesidir
- -n - 0'dan büyük dize uzunluğu
- -z - dize uzunluğu 0
Örnekler:
"string1" = "string2" ve & echo "yes" ifadelerini test edin || echo "no"
("string1", "string2" değerine eşit olmadığından) ekrana "no" görüntüler.
test "string1"! = "string2" && echo "yes" || echo "no"
("string1", "string2" ile eşit olmadığı için) ekrana "yes" (evet) gösterir.)
test -n "string1" && echo "evet" || echo "no"
("string1" sıfırdan büyük bir dize uzunluğuna sahip olduğundan) ekrana "yes" (evet) gösterir.)
test -z "string1" && echo "evet" || echo "no"
("string1", sıfırdan büyük bir dize uzunluğuna sahip olduğundan) ekrana "no" görüntüler.
Dosyaları Karşılaştırma
Dosyaları karşılaştırıyorsanız, aşağıdaki karşılaştırma operatörlerini kullanabilirsiniz:
- -ef - Dosyaların aynı cihaza ve inode numaralarına sahip olması (aynı dosya)
- -nt - İlk dosya ikinci dosyadan daha yeni mi
- -ot - İlk dosya ikinci dosyadan daha eski mi?
- -b - Dosya mevcut ve özel blok
- -c - Dosya var ve karakter özel
- -d - Dosya mevcut ve bir dizin
- -e - Dosya mevcut
- -f - Dosya var ve normal bir dosya
- -g - Dosya mevcut ve belirtilen grup numarasına sahip
- -G - Dosya, kullanıcının grubu tarafından mevcut ve sahip
- -h - Dosya var ve sembolik bir bağlantıdır
- -k - Dosya var ve yapışkan biti ayarlanmış
- -L - -h ile aynı
- -O - Dosya sahibi sizsiniz
- -p - Dosya var ve adlandırılmış bir boru
- -r - Dosya mevcut ve okunabilir
- -s - Dosya var ve sıfırdan büyük bir boyuta sahip
- -S - Dosya var ve bir soket
- -t - Dosya tanıtıcısı bir uçbirimde açılır
- -u - Dosya var ve set-user-id biti ayarlandı
- -w - Dosya var ve yazılabilir
- -x - Dosya mevcut ve yürütülebilir
Örnekler:
/ path / to / file1 -n / path / to / file2 && echo "yes"
(Dosya1 dosya2'den daha yeni ise, "evet" sözcüğü görüntülenir)
-e / yol / to / dosya1 && echo "evet"
(eğer dosya1 varsa "evet" sözcüğü görüntülenir)
-O / path / to / file1 && echo "yes" ifadesini test edin
(eğer dosya1'e sahipseniz, o zaman "evet" sözcüğü görüntülenir)
terminoloji
- Özel engelleme - Dosya, blokların bayt bloklarında okunması anlamına gelen bir blok aracıdır. Bunlar genellikle sabit sürücüler gibi aygıt dosyalarıdır.
- Karaktere özel - Dosyaya yazdığınız anda hemen hareket eder ve genellikle seri bağlantı noktası gibi bir aygıttır.
Çoklu Koşulların Karşılaştırılması
Şimdiye kadar her şey bir şeyi diğerine karşı karşılaştırıyor, ama eğer iki koşulu karşılaştırmak isterseniz.
Örneğin, bir hayvanın 4 bacağı varsa ve "moo" yerse, muhtemelen bir ineğdir. Sadece 4 bacağın kontrol edilmesi, bir ineğinizin olduğunu garanti etmez, ancak yaptığınız sesi kesinlikle kontrol eder.
Her iki koşulu bir kerede test etmek için aşağıdaki ifadeyi kullanın:
test 4 -eq 4 -a "moo" = "moo" && echo "bu bir inek" || echo "bu bir inek değil"
Buradaki anahtar bölüm -a bunun anlamıdır.
Aynı testi gerçekleştirmenin daha iyi ve yaygın olarak kullanılan bir yolu vardır ve aşağıdaki gibidir:
test 4 -eq 4 && "test" moo "=" moo "&& echo" bir inek "|| echo "bu bir inek değil"
Yapmak isteyebileceğiniz başka bir test, iki ifadeyi karşılaştırmaktır ve eğer doğruysa bir dizge çıktıysa. Örneğin, "file1.txt" isimli bir dosyanın mevcut olduğunu veya "file1.doc" adlı bir dosyanın mevcut olduğunu kontrol etmek isterseniz, aşağıdaki komutu kullanabilirsiniz.
test -e file1.txt -o -e dosya1.doc && echo "dosya1 var" || echo "dosya1 mevcut değil"
Buradaki anahtar kısım, -o anlamına geliyor ya da.
Aynı testi gerçekleştirmenin daha iyi ve yaygın olarak kullanılan bir yolu vardır ve aşağıdaki gibidir:
test -e dosya1.txt || test -e file1.doc && echo "dosya1 var" || echo "dosya1 mevcut değil"
Test Anahtar Kelimesini Ortadan Kaldırma
Karşılaştırmayı gerçekleştirmek için kelime testini kullanmanız gerekmez. Yapmanız gereken tek şey, aşağıdaki gibi köşeli parantez içinde ifadeyi kapsar:
[-e file1.txt] && echo "dosya1 var" "|| echo "dosya1 mevcut değil"
[Ve] temel olarak test ile aynı anlama gelir.
Şimdi biliyorsunuz, aşağıdaki gibi çoklu koşulları karşılaştırırken geliştirebilirsiniz:
[4 -eq 4] && ["moo" = "moo"] && echo "bir inek" || echo "bu bir inek değil"
[-e dosya1.txt] || [-e file1.doc] && echo "dosya1 var" "|| echo "dosya1 mevcut değil"
özet
Test komutu komut dosyalarında daha kullanışlıdır çünkü bir değişkenin değerini diğerine karşı kontrol edebilir ve program akışını kontrol edebilirsiniz. Standart komut satırında, bir dosyanın var olup olmadığını sınamak için kullanabilirsiniz.