2017-08-11 30 views
0

有沒有一種方法可以限制bashs read只接受數字輸入, 所以當其他任何東西添加一個數字時,用戶會再次獲得提示?如何限制bashs讀命令只接受數值?

read -r -p "please enter 2 numbers: " number 
+0

它被稱爲'while' –

+0

檢查你的變量'號碼'並提示一些東西。或者在你的變量中加入一些不是數字的東西。 –

+0

什麼樣的「號碼」?有很多定義可供選擇(範圍從0-255範圍內的非負數,直到任意精度複數有理數)。你可能需要具體說明基數(小數,八進制,十六進制等)。 –

回答

2

使用模式使用循環使用條件:

#!/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.

+0

很好,謝謝這個!唯一我不太明白的是,'unset number'是做什麼的? – nath

+1

@nath,確保我們沒有在環境中繼承'number'的初始值,如果某個程序因爲某種原因調用了''''''''。 –

+1

(個人而言,我會使用正則表達式而不是extglob - 例如'[[$ number =〜^ [1-9] [0-9] * $]]' - 或者使用'= '而不是'=='作爲字符串比較運算符,以獲得手指內存,在爲最小'/ bin/sh編寫軟件時不會使您誤入歧途;但這裏有很多個人偏好;沒有關於這個答案是錯誤的,因爲它依賴於一個足夠新的bash,在測試環境中有一個默認的extglob。 –

0

將所有非數字值更改爲空並檢查長度。

if [[ -n ${number//[0-9]/} ]]; then 
    echo "please enter a numeric value!" 
fi 
+0

混合數字和字母會發生什麼情況? –

+0

有長度。那麼就是非數字,所以它不同 – feiiiiii

相關問題