Kabuk işlevinden rastgele bir sonuç döndüremezsiniz. Yalnızca 0 ile 255 arasında bir tamsayı olan bir durum kodu döndürebilirsiniz. (Daha büyük bir değeri iletebilmenize returnrağmen, modulo 256 kesilir.) Değerin başarıyı belirtmek için 0, başarısızlığı göstermek için farklı bir değer olması gerekir; kural olarak, daha yüksek değerlerin özel bir anlamı olduğu için (125 ve 127 için kötü harici komut, daha yüksek değerler için bir sinyal tarafından öldürüldü) 1 ile 125 arasındaki hata kodlarına bağlı kalmalısınız.
Burada evet ya da hayır sonucunu döndürdüğünüz için bir durum kodu uygundur. Yana flagbir başarı veya başarısızlık belirtmek görünüyor, başarısız (Yazdıklarınız tersi) için başarı için 0 ile 1 arasında geleneksel değerlerini kullanmalıdır. Daha sonra işlevinizi doğrudan bir if ifadesinde kullanabilirsiniz.
valNum ()
{
local flag=0
if [[ $1 != [1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] ]]; then
echo 1>&2 "Invalid Number"
flag=1
fi
return $flag
}
if valNum "$num"; then
#do something
fi
Hata kodları arasında ayrım yapmanız gerekirse, işlevi doğrudan arayın. Geri döndükten hemen sonra, hata kodu şurada kullanılabilir $?. Daha sonra bunu bir vaka bildirimi ile kontrol edebilirsiniz:
valNum "$num"
case $? in …
Durum kodunu daha sonra kullanmanız gerekirse $?, bir sonraki komutun üzerine yazılmadan önce başka bir değişkene kaydedin .
valNum "$num"
valNum_status=$?
Yazdığınız şey işe yaramadı çünkü komut ikamesi $(…), kodunuzda hata mesajı veya boş olan işlevin çıktısına genişler, asla 1.
Kabuk işlevlerinden bir durum kodunun izin verdiğinden daha fazla bilgi iletmeniz gerekiyorsa, iki olasılığınız vardır:
- Standart çıktıya bazı metinler yazdırın ve işlevi komut yerine kullanıldığında çağırın:
$(valNum "$num")
- İşlev içindeki bir veya daha fazla değişkene atayın ve bu değişkenleri daha sonra okuyun.