我想编写一个程序来检查给定的输入是否为数字。有人能帮助我吗?
if [ $Number -ne 0 -o $Number -eq 0 2>/dev/null ]
then ...
以上命令中的 -o
代表什么意思?
-o
是一个或运算符。因此,您的测试检查数字是否不等于0或等于0。
(所以它应该总是返回真)。
要检查它是否为数字,您可以使用正则表达式:这应该可以工作:
[[ "$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
[[ ... ]]
结构,它是不可移植的。