Bash Shell脚本变量值检查整数和数字范围



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

这将检查是否输入了一位、两位或三位数字,并且该数字不是零。

最新更新