如何测试变量是否是 linux 非 bash shell 脚本中具有某些最大数字的数字
How to test if variable is a number with certain max digits in linux non-bash shell script
Here 我找到了测试变量是否为数字的好方法:
case $string in
''|*[!0-9]*) echo bad ;;
*) echo good ;;
esac
我正在尝试修改它以测试变量是否为 1、2、3 或 4 位自然数(在 0-9999 范围内),因此我添加了 |*[0-9]{5,}*
以排除数字超过 5 位数字,但下面的代码会为大于 9999 的数字打印 good
,例如1234567.
case $string in
''|*[!0-9]*|*[0-9]{5,}*) echo bad ;;
*) echo good ;;
esac
我正在使用来自 busybox 的 ash。
不确定在 case 语句中是否需要这个,因为我会这样做:
if { test "$string" -ge 0 && test "$string" -lt 10000; } 2> /dev/null; then
echo good
else
echo bad
fi
如果您想在严格可移植的 shell 中使用 case 语句,您可能会遇到以下问题:
case $string in
[0-9]|[0-9][0-9]|[0-9][0-9][0-9]|[0-9][0-9][0-9][0-9]) echo good;;
*) echo bad;;
esac
您可以使用数值测试:
$ s=123
$ (( s>=0 && s<=9999 )) && echo "true" || echo "false"
true
$ s=123456
$ (( s>=0 && s<=9999 )) && echo "true" || echo "false"
false
$ s=-1
$ (( s>=0 && s<=9999 )) && echo "true" || echo "false"
false
您只需要确保该字符串的开头是可选的 ±
的所有数字。在数字上下文中使用的非数字字符串将计算为 0
,因此您需要对其进行测试。
您可以将案例陈述用于:
case $s in
''|*[!0-9]*) echo bad ;;
*) (( s>=0 && s<=9999 )) && echo "true" || echo "false" ;;
esac
或:
$ [ "$s" -eq "$s" ] 2>/dev/null && (( s>=0 && s<=9999 )) && echo "true" || echo "false"
也有效。
这些 应该 在任何 POSIX shell 下工作。
case $([[ $num =~ ^[0-9]+$ ]] && echo 0) in
0) echo good ;;
*) echo bad ;;
esac
Here 我找到了测试变量是否为数字的好方法:
case $string in
''|*[!0-9]*) echo bad ;;
*) echo good ;;
esac
我正在尝试修改它以测试变量是否为 1、2、3 或 4 位自然数(在 0-9999 范围内),因此我添加了 |*[0-9]{5,}*
以排除数字超过 5 位数字,但下面的代码会为大于 9999 的数字打印 good
,例如1234567.
case $string in
''|*[!0-9]*|*[0-9]{5,}*) echo bad ;;
*) echo good ;;
esac
我正在使用来自 busybox 的 ash。
不确定在 case 语句中是否需要这个,因为我会这样做:
if { test "$string" -ge 0 && test "$string" -lt 10000; } 2> /dev/null; then
echo good
else
echo bad
fi
如果您想在严格可移植的 shell 中使用 case 语句,您可能会遇到以下问题:
case $string in
[0-9]|[0-9][0-9]|[0-9][0-9][0-9]|[0-9][0-9][0-9][0-9]) echo good;;
*) echo bad;;
esac
您可以使用数值测试:
$ s=123
$ (( s>=0 && s<=9999 )) && echo "true" || echo "false"
true
$ s=123456
$ (( s>=0 && s<=9999 )) && echo "true" || echo "false"
false
$ s=-1
$ (( s>=0 && s<=9999 )) && echo "true" || echo "false"
false
您只需要确保该字符串的开头是可选的 ±
的所有数字。在数字上下文中使用的非数字字符串将计算为 0
,因此您需要对其进行测试。
您可以将案例陈述用于:
case $s in
''|*[!0-9]*) echo bad ;;
*) (( s>=0 && s<=9999 )) && echo "true" || echo "false" ;;
esac
或:
$ [ "$s" -eq "$s" ] 2>/dev/null && (( s>=0 && s<=9999 )) && echo "true" || echo "false"
也有效。
这些 应该 在任何 POSIX shell 下工作。
case $([[ $num =~ ^[0-9]+$ ]] && echo 0) in
0) echo good ;;
*) echo bad ;;
esac