man/shells_and_env
man · Kabuklar & Ortam

$ [

Bölüm 1 · Kabuklar & Ortam

koşul değerlendirme aracı

Özet

[ ifade ]
test ifade

Açıklama

[ yardımcı programı (genellikle test yardımcı programının bir takma adıdır), belirtilen ifadeyi (expression) değerlendirir. Eğer ifade doğru (true) olarak değerlendirilirse çıkış durumu 0 (doğru) olarak döndürülür; aksi takdirde 1 (yanlış) döndürülür. Eğer hiçbir ifade belirtilmemişse yine 1 (yanlış) çıkış kodu döndürülür.

Tüm operatörler, karşılaştırma bayrakları ve parantezler [ komutuna boşluklarla ayrılmış bağımsız bağımsız değişkenler (arguments) olarak iletilmelidir.

[!IMPORTANT] [ adıyla çağrıldığında, komut satırındaki ifadenin son argümanının tam olarak kapanış köşeli parantezi olan ] karakteri olması zorunludur.


Seçenekler (Koşul Belirteçleri)

İfadeleri oluşturmak için aşağıdaki birincil belirteçler (primaries) kullanılır:

  • -b dosya: dosya mevcutsa ve bir blok özel dosyası (block special file) ise doğru.
  • -c dosya: dosya mevcutsa ve bir karakter özel dosyası (character special file) ise doğru.
  • -d dosya: dosya mevcutsa ve bir dizin (klasör) ise doğru.
  • -e dosya: dosya mevcutsa (türünden bağımsız olarak) doğru.
  • -f dosya: dosya mevcutsa ve normal bir dosya (regular file) ise doğru.
  • -g dosya: dosya mevcutsa ve set-group-ID bayrağı ayarlanmışsa doğru.
  • -h dosya / -L dosya: dosya mevcutsa ve bir sembolik bağlantı (symlink) ise doğru. Geriye dönük uyumluluk yerine -L kullanılması önerilir.
  • -k dosya: dosya mevcutsa ve sticky biti ayarlanmışsa doğru.
  • -n karakter_dizisi: Karakter dizisinin (string) uzunluğu sıfırdan farklıysa doğru.
  • -p dosya: dosya mevcutsa ve bir adlandırılmış boru hattı (FIFO) ise doğru.
  • -r dosya: dosya mevcutsa ve okunabilir (read) ise doğru.
  • -s dosya: dosya mevcutsa ve boyutu sıfırdan büyükse doğru.
  • -t dosya_tanımlayıcısı: Belirtilen sayısal dosya_tanımlayıcısı (file descriptor) açık ise ve bir terminal ile ilişkili ise doğru.
  • -u dosya: dosya mevcutsa ve set-user-ID bayrağı ayarlanmışsa doğru.
  • -w dosya: dosya mevcutsa ve yazılabilir (write) ise doğru (dosya sisteminin salt okunur olmasından etkilenmez).
  • -x dosya: dosya mevcutsa ve çalıştırılabilir (execute) veya dizinler için aranabilir ise doğru.
  • -z karakter_dizisi: Karakter dizisinin uzunluğu sıfır (boş) ise doğru.
  • -O dosya: dosya mevcutsa ve sahibi, bu işlemin etkin kullanıcı kimliği (effective UID) ile eşleşiyorsa doğru.
  • -G dosya: dosya mevcutsa ve grubu, bu işlemin etkin grup kimliği (effective GID) ile eşleşiyorsa doğru.
  • -S dosya: dosya mevcutsa ve bir soket (socket) ise doğru.

İkili (Binary) Karşılaştırma Operatörleri

  • dosya1 -nt dosya2: dosya1 mevcutsa ve dosya2'den daha yeni bir değişiklik zamanına (mtime) sahipse doğru.
  • dosya1 -ot dosya2: dosya1 mevcutsa ve dosya2'den daha eski bir değişiklik zamanına sahipse doğru.
  • dosya1 -ef dosya2: Her iki dosya da mevcutsa ve aynı fiziksel dosyaya (aynı inode numarasına) işaret ediyorsa doğru.
  • karakter_dizisi: Karakter dizisi boş (null) değilse doğru.
  • s1 = s2 / s1 == s2: s1 ve s2 dizileri birbirinin aynısı ise doğru (== uyumluluk genişletmesidir).
  • s1 != s2: s1 ve s2 dizileri birbirinin aynısı değilse doğru.
  • s1 < s2: Karakterlerin ikili (ASCII) değerine göre s1 dizisi s2'den önce geliyorsa doğru.
  • s1 > s2: Karakterlerin ikili (ASCII) değerine göre s1 dizisi s2'den sonra geliyorsa doğru.
  • n1 -eq n2: n1 ve n2 tam sayıları cebirsel olarak eşitse doğru.
  • n1 -ne n2: n1 ve n2 tam sayıları cebirsel olarak eşit değilse doğru.
  • n1 -gt n2: n1 tam sayısı n2 tam sayısından büyükse doğru.
  • n1 -ge n2: n1 tam sayısı n2 tam sayısından büyük veya eşitse doğru.
  • n1 -lt n2: n1 tam sayısı n2 tam sayısından küçükse doğru.
  • n1 -le n2: n1 tam sayısı n2 tam sayısından küçük veya eşitse doğru.

[!NOTE] Sembolik bağlantılarda, -h ve -L dışındaki tüm belirteçler sembolik bağlantının hedefini çözümler ve değerlendirmeyi hedef dosya üzerinde gerçekleştirir.

Mantıksal Birleştirme Operatörleri

  • ! ifade: Mantıksal DEĞİL (NOT) işlemi. ifade yanlış ise doğru döndürür.
  • ifade1 -a ifade2: Mantıksal VE (AND) işlemi. Her iki ifade de doğruysa doğru döndürür.
  • ifade1 -o ifade2: Mantıksal VEYA (OR) işlemi. İki ifadeden en az biri doğruysa doğru döndürür.
  • ( ifade ): İfadeleri gruplandırarak mantıksal öncelikleri belirler. -a operatörü, -o operatöründen daha yüksek önceliğe sahiptir.

Örnekler

Aşağıdaki örnekler kabukta (shell) çalıştırılabilecek şekilde gösterilmiştir:

  1. Bir dosyanın mevcut ve okunabilir olup olmadığını [ ile kontrol etme:

    [ -r /etc/passwd ] && echo "Erisilebilir"
  2. Bir dizinin varlığını test etme:

    [ -d /tmp ] && echo "Dizin mevcut"
  3. İki tam sayıyı karşılaştırma:

    [ 10 -gt 5 ] && echo "10, 5'ten buyuktur"
  4. Metin değişkeninin durumunu kontrol etme:

    kullanici="Ahmet"
    [ -z "$kullanici" ] && echo "Kullanici adi bos" || echo "Hos geldin, $kullanici"
  5. Kısa devre mantığıyla gereksiz dosya sistemi erişimlerini önleme:

    [ -z "$dosya" ] && [ -w "$dosya" ]

    [!WARNING] [ -z abc -a -w dosya ] ifadesinde, -a kullanılsa bile ifadenin her iki tarafı da daima çalıştırılır (değerlendirilir). Bu da gereksiz sistem çağrılarına yol açar. Bundan kaçınmak için yukarıdaki gibi kabuk düzeyinde kısa devre (&& veya ||) operatörlerini tercih edin.

Ayrıca Bakınız

sh(1), find(1), stat(1), builtin(1), expr(1), symlink(7)

Standartlar

[ yardımcı programı, IEEE Std 1003.2 (“POSIX.2”) spesifikasyonunun tam bir üst kümesini uygular. < , == , > , -ef , -nt , -ot , -G ve -O standart dışı uyumluluk uzantılarıdır.