Saya mencoba memeriksa apakah input bilangan bulat dan saya sudah membahasnya seratus kali tetapi tidak melihat kesalahan dalam hal ini. Sayangnya itu tidak berfungsi, itu memicu pernyataan if untuk semua input (angka / huruf)
read scale
if ! [[ "$scale" =~ "^[0-9]+$" ]]
then
echo "Sorry integers only"
fi
Saya telah bermain-main dengan tanda kutip tetapi entah melewatkannya atau tidak melakukan apa pun. Apa yang saya lakukan salah? Apakah ada cara yang lebih mudah untuk menguji apakah input hanyalah sebuah INTEGER?
bash
regular-expression
quoting
test
lonewarrior556
sumber
sumber
scale='^[0-9]+$'; [[ "$scale" == "^[0-9]+$" ]] && echo equal || echo "not equal"
Gunakan
-eq
operator perintah uji :Ini tidak hanya berfungsi
bash
tetapi juga shell POSIX. Dari dokumentasi tes POSIX :sumber
[[
alih-alih tes lama[
sebagai milik saya.Untuk bilangan bulat yang tidak ditandatangani, saya menggunakan:
Tes:
sumber
Karena OP tampaknya hanya menginginkan bilangan bulat positif:
Contoh:
Perhatikan bahwa satu
[
tes diperlukan:Ini karena dereferencing terjadi dengan
[[
:sumber
Itu memeriksa dan menampilkan kesalahan Anda.
sumber
OPTIND
juga bagus di sini. hanya syansumber