Gelen bash
her değişkenin aslında bir dize (veya bir dizi ya da bir fonksiyon, fakat düzenli değişkenler burada yaklaşık edelim mesaj).
Koşullar, test komutlarının dönüş değerlerine göre ayrıştırılır - dönüş değeri bir değişken değildir, bir çıkış durumudur. Bunu değerlendirdiğinizde if [ ... ]
veya if [[ ]]
veya if grep something
herhangi bir şey yaptığınızda, dönüş değeri 0 (dize 0 değil, çıkış durumu 0 = başarı) true anlamına gelir ve geri kalanı false anlamına gelir (yani, derlenmiş programlama dillerinde alışkın olduğunuzun tam tersi, ancak başarılı olmanın bir yolu ve başarısız olmanın birçok yolu olduğu ve yürütmenin beklenen sonucu genellikle başarılı olduğu için, hiçbir şey yanlış gitmezse en yaygın varsayılan sonuç olarak 0 kullanılır). Bu çok kullanışlıdır, çünkü herhangi bir ikili test olarak kullanılabilir - başarısız olursa yanlıştır, aksi takdirde doğrudur.
true
ve false
programlar (genellikle yerleşikler tarafından geçersiz kılınan) sadece hiçbir şey yapmayan yararlı küçük programlardır - hiçbir şey true
yapmayı başarmaz ve 0 ile çıkar, false
hiçbir şey yapmayı denemez ve "başarısız olur", 1 ile çıkar. Anlamsız geliyor ama komut dosyası oluşturmak için çok kullanışlıdır.
Doğruluktan nasıl geçileceği konusunda, size kalmış. Gerçeklik ve kullanım için sadece "y" veya "evet" kullanmak oldukça yaygındır if [ x"$variable" = x"yes" ]
(kukla dizeyi ekler, x
çünkü $variable
sıfır uzunluk olursa, if [ = "yes" ]
ayrıştırılmayan sahte bir komut oluşturmaktan korur ). Ayrıca yanlış için boş bir dize kullanmak [ -z "$variable ]
ve sıfır uzunluğunda (veya -n
sıfırdan farklı olup olmadığını) test etmek için de yararlı olabilir .
Her neyse, aslında boolean değerlerin içinden geçmesi oldukça nadirdir bash
- sadece exit
başarısızlık durumunda veya yararlı bir sonuç döndürmek (veya bir şey ters giderse sıfır ve boş dizeyi test etmek) çok daha yaygındır ve çoğu durumda doğrudan çıkış durumundan arıza olup olmadığını test edin.
Sizin durumunuzda, başka bir komut gibi davranacak bir işlev istiyorsunuz (bu nedenle, başarıya 0 döndürün), böylece son seçeneğiniz doğru seçim gibi görünüyor.
Ayrıca, return
ifadeye bile ihtiyacınız olmayabilir . İşlev yeterince basitse, işlevdeki son yürütülen komutun durumunu döndürmesi gerçeğini kullanabilirsiniz. Böylece fonksiyonunuz
drive_xyz_available() {
[ -e /dev/disk/by-uuid/whatever ]
}
bir aygıt düğümünün varlığını test ediyorsanız (veya /proc/mounts
takılı olup olmadığını kontrol etmek için grep ?).
help true ; help false ; help exit