im试图进行不包括小数的数字检查以及范围内检查,但不起作用
example of accepted numbers: 1, 10, 100
not accepted numbers: 1.1, 10.1, 100.1
echo "Qty Sold: "
read sold
if [[ "$sold" =~ `^([0-9])$` && "$sold" -gt 0 && "$sold" -lt 999 ]] ;
then
echo "ok"
else
echo "Error, Qty Sold Must be Positive Integer";
fi
删除正则表达式周围存在的回溯标记,并在[0-9]
之后使用+来匹配一个或多个数字。
if [[ "$sold" =~ ^[0-9]+$ && "$sold" -gt 0 && "$sold" -lt 999 ]] ;
示例:
$ sold=12
$ if [[ "$sold" =~ ^[0-9]+$ && "$sold" -gt 0 && "$sold" -lt 999 ]] ; then echo 'Ok'; else echo 'NOT ok'; fi
Ok
$ sold=0
$ if [[ "$sold" =~ ^[0-9]+$ && "$sold" -gt 0 && "$sold" -lt 999 ]] ; then echo 'Ok'; else echo 'NOT ok'; fi
NOT ok
$ sold=1000
$ if [[ "$sold" =~ ^[0-9]+$ && "$sold" -gt 0 && "$sold" -lt 999 ]] ; then echo 'Ok'; else echo 'NOT ok'; fi
NOT ok
不使用正则表达式:
((sold>0 && sold <999)) 2>/dev/null && echo "ok" || echo "Error, Qty Sold Must be Positive Integer"
[[
语法与[
语法有点不同。在=~
中,正则表达式周围不需要任何分隔符。因此,不需要/
、反勾号、撇号或和号(仅当正则表达式包含空格时)。它可以通过反斜杠转义,也可以在空格周围添加撇号或与号,或者使用[[:space:]](还包括TAB和其他一些空白字符)。此外,在$sold
周围也不需要安培数(仅在[[
中!)。所以条件部分可能像这个
if [[ $sold =~ ^[[:digit:]]{1,3}$ && $sold -gt 0 && $sold -lt 999 ]]; then echo ok
else echo "Error, Qty Sold Must be Positive Integer between 1 and 998";
fi
这将检查是否输入了一位、两位或三位数字,并且该数字不是零。