如何测试变量是否是 Bash 中的数字?

新手上路,请多包涵

我只是不知道如何确保传递给我的脚本的参数是一个数字。

我想做的就是这样的:

 test *isnumber* $1 && VAR=$1 || echo "need a number"

有什么帮助吗?

原文由 Flávio Amieiro 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 678
2 个回答

一种方法是使用正则表达式,如下所示:

 re='^[0-9]+$'
if ! [[ $yournumber =~ $re ]] ; then
   echo "error: Not a number" >&2; exit 1
fi

如果值不一定是整数,请考虑适当修改正则表达式;例如:

 ^[0-9]+([.][0-9]+)?$

…或者,处理带符号的数字:

 ^[+-]?[0-9]+([.][0-9]+)?$

原文由 Charles Duffy 发布,翻译遵循 CC BY-SA 4.0 许可协议

没有 bashisms(即使在 System V sh 中也可以),

 case $string in
    ''|*[!0-9]*) echo bad ;;
    *) echo good ;;
esac

这拒绝空字符串和包含非数字的字符串,接受其他所有内容。

负数或浮点数需要一些额外的工作。一个想法是在第一个“坏”模式中排除 - / . *.*.* 添加更多包含它们的不当使用的“坏”模式( ?*-* --- )

原文由 jilles 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题