在 bash 中检查输入是否为数字
Check whether input is number or not in bash
我想编写程序来检查给定的输入是否为数字。谁能帮帮我?
if [ $Number -ne 0 -o $Number -eq 0 2>/dev/null ]
then ...
上面的命令中-o
代表什么?
-o
是 或 运算符。所以你的测试检查你的数字是否不等于 0 或者它是否等于 0.
(所以它应该总是 return true)。
要检查它是否为数字,您可以使用正则表达式:这应该有效:
[[ "$number" =~ ^[0-9]+$ ]]
要查看所有可用标志的列表,您应该查看 man test
详情:
[[
是扩展的 bash 测试命令。它支持比 test/[
. 更多的运算符
=~
再次比较第一个参数一个正则表达式
^[0-9]+$
是正则表达式。 ^
是字符串开头的锚点,$
是结尾的锚点。 [0-9]
表示0到9之间的任何字符,+
表示重复最新的模式
执行此操作的 POSIX 方法(对于整数;浮点数更复杂)是
case $number in
(*[^0-9]*) printf '%s\n' "not a number";;
() printf '%s\n' "empty";;
(*) printf '%s\n' "a number";;
esac
这适用于任何 Bourne shell,不像 [[ ... ]]
构造,它是不可移植的。
我想编写程序来检查给定的输入是否为数字。谁能帮帮我?
if [ $Number -ne 0 -o $Number -eq 0 2>/dev/null ]
then ...
上面的命令中-o
代表什么?
-o
是 或 运算符。所以你的测试检查你的数字是否不等于 0 或者它是否等于 0.
(所以它应该总是 return true)。
要检查它是否为数字,您可以使用正则表达式:这应该有效:
[[ "$number" =~ ^[0-9]+$ ]]
要查看所有可用标志的列表,您应该查看 man test
详情:
[[
是扩展的 bash 测试命令。它支持比test/[
. 更多的运算符
=~
再次比较第一个参数一个正则表达式^[0-9]+$
是正则表达式。^
是字符串开头的锚点,$
是结尾的锚点。[0-9]
表示0到9之间的任何字符,+
表示重复最新的模式
执行此操作的 POSIX 方法(对于整数;浮点数更复杂)是
case $number in
(*[^0-9]*) printf '%s\n' "not a number";;
() printf '%s\n' "empty";;
(*) printf '%s\n' "a number";;
esac
这适用于任何 Bourne shell,不像 [[ ... ]]
构造,它是不可移植的。