Yeterince yaygın bir şey yapmaya çalışıyorum: Kullanıcı girdisini bir kabuk betiğinde ayrıştırın. Kullanıcı geçerli bir tamsayı sağladıysa, komut dosyası bir şey yapar ve geçerli değilse başka bir şey yapar. Sorun şu ki, bunu yapmanın kolay (ve oldukça zarif) bir yolunu bulamadım - onu karakter karakter ayırmak istemiyorum.
Bunun kolay olduğunu biliyorum ama nasıl yapılacağını bilmiyorum. Bunu bir düzine dilde yapabilirdim ama BASH yapamazdım!
Araştırmamda şunu buldum:
Bir dizenin 10 tabanında geçerli bir gerçek sayı içerip içermediğini test etmek için normal ifade
Ve orada regex'ten bahseden bir cevap var, ama bildiğim kadarıyla bu, C'de (diğerlerinin yanı sıra) mevcut bir fonksiyon. Yine de harika bir cevap gibi görünen bir cevap vardı, bu yüzden grep ile denedim ama grep bununla ne yapacağını bilmiyordu. Kutumda onu bir PERL regexp - nada olarak ele almak anlamına gelen -P'yi denedim. Dash E (-E) de çalışmadı. Ve -F de yapmadı.
Açık olmak gerekirse, bunun gibi bir şey deniyorum, herhangi bir çıktı arıyorum - oradan, elde ettiğim her şeyden yararlanmak için senaryoyu hackleyeceğim. (IOW, uygun olmayan bir girişin geçerli bir satır tekrarlanırken hiçbir şey döndürmemesini bekliyordum.)
snafu=$(echo "$2" | grep -E "/^[-+]?(?:\.[0-9]+|(?:0|[1-9][0-9]*)(?:\.[0-9]*)?)$/")
if [ -z "$snafu" ] ;
then
echo "Not an integer - nothing back from the grep"
else
echo "Integer."
fi
Lütfen birisi bunun en kolay nasıl yapıldığını gösterebilir mi?
Açıkçası, bence bu TEST'in kısa bir geleceği. Bunun gibi bir bayrağı olmalı
if [ -I "string" ] ;
then
echo "String is a valid integer."
else
echo "String is not a valid integer."
fi
[
eski uyumludurtest
;[[
Bash'in daha fazla işlem ve farklı alıntı kuralları içeren yeni özelliği. Zaten Bash'e bağlı kalmaya karar verdiyseniz, gidin[[
(gerçekten çok daha güzel); diğer mermilere taşınabilirliğe ihtiyacınız varsa,[[
tamamen kaçının .