有沒有一種方法可以限制bashs read
只接受數字輸入, 所以當其他任何東西添加一個數字時,用戶會再次獲得提示?如何限制bashs讀命令只接受數值?
read -r -p "please enter 2 numbers: " number
有沒有一種方法可以限制bashs read
只接受數字輸入, 所以當其他任何東西添加一個數字時,用戶會再次獲得提示?如何限制bashs讀命令只接受數值?
read -r -p "please enter 2 numbers: " number
使用模式使用循環使用條件:
#!/bin/bash
unset number
until [[ $number == +([0-9]) ]] ; do
read -r -p "please enter a number: " number
done
echo $((number + 1))
您可能需要更精確(@(0|@([1-9])*([0-9]))
)如果你想直接使用數量,因爲如09
將導致一個錯誤,因爲它將被解釋爲八進制,因爲它的起始位置爲0.
很好,謝謝這個!唯一我不太明白的是,'unset number'是做什麼的? – nath
@nath,確保我們沒有在環境中繼承'number'的初始值,如果某個程序因爲某種原因調用了''''''''。 –
(個人而言,我會使用正則表達式而不是extglob - 例如'[[$ number =〜^ [1-9] [0-9] * $]]' - 或者使用'= '而不是'=='作爲字符串比較運算符,以獲得手指內存,在爲最小'/ bin/sh編寫軟件時不會使您誤入歧途;但這裏有很多個人偏好;沒有關於這個答案是錯誤的,因爲它依賴於一個足夠新的bash,在測試環境中有一個默認的extglob。 –
將所有非數字值更改爲空並檢查長度。
if [[ -n ${number//[0-9]/} ]]; then
echo "please enter a numeric value!"
fi
混合數字和字母會發生什麼情況? –
有長度。那麼就是非數字,所以它不同 – feiiiiii
它被稱爲'while' –
檢查你的變量'號碼'並提示一些東西。或者在你的變量中加入一些不是數字的東西。 –
什麼樣的「號碼」?有很多定義可供選擇(範圍從0-255範圍內的非負數,直到任意精度複數有理數)。你可能需要具體說明基數(小數,八進制,十六進制等)。 –