在bash中检查输入是否为数字

4

我想编写一个程序来检查给定的输入是否为数字。有人能帮助我吗?

 if [ $Number -ne 0 -o $Number -eq 0 2>/dev/null ]
 then ...

以上命令中的 -o 代表什么意思?

2个回答

8

-o是一个运算符。因此,您的测试检查数字是否不等于0或等于0。

(所以它应该总是返回真)。

要检查它是否为数字,您可以使用正则表达式:这应该可以工作:

[[ "$number" =~ ^[0-9]+$ ]]

要查看所有可用标志的列表,请参阅man test
详情:
  • [[是扩展的bash测试命令。它支持比test/[更多的操作符。
  • =~将第一个参数与正则表达式进行比较。
  • ^[0-9]+$是该正则表达式。 ^是字符串开头的锚点,$是字符串结尾的锚点。 [0-9]表示0到9之间的任何字符,+表示最新模式的重复。

谢谢,你给的东西对我的程序很有效。我是Linux的新手,你能解释一下你给出的那个命令吗? - Srikanth Power
请提供需要翻译的具体内容。 - AdrieanKhisbe

3

在POSIX中,实现此功能的方法(针对整数;浮点数更为复杂)是

 case $number in
   (*[^0-9]*) printf '%s\n' "not a number";;
   ()         printf '%s\n' "empty";;
   (*)        printf '%s\n' "a number";;
 esac

这适用于任何Bourne shell,不像[[ ... ]]结构,它是不可移植的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接