2012-02-09 130 views

回答

7

有一展身手:

case $INPUT in 
     +([0-9])*(.)*([0-9])) 
       # Variable is numeric 
       ;; 
     *) 
       # Nope, not numeric 
       ;; 

esac 
+0

+1对于ksh通配符'+(..),*(...)'! – shellter 2012-02-09 19:27:59

+0

ksh是否将通配符放在之前而不是像在“常规”正则表达式中那样? – Steve 2012-02-09 19:52:36

+3

此解决方案似乎认为123 ... 99作为数字 – Ruchi 2012-02-09 19:58:21

0
[ $input -ge 0 -o $input-lt 0 ] 2>/dev/null && echo "numeric" 

这将检查输入是数字(正整数还是负整数)并且打印数字(如果是)。

1

此修复弗洛伊德式错误的回答包括可选的,领先的 - 或“+”号,允许开头的十进制数“”“” (不包括前导0),并排除包含多个“。”的数字。 (例如:“12 ...... 34”):

case $INPUT in 
    {,1}([-+])+([0-9]){,1}(.)*([0-9])|{,1}([-+]).+([0-9])) 
      # Variable is numeric 
      ;; 
    *) 
      # Nope, not numeric 
      ;; 

esac 
0

简单,如果你只是想知道如果字符串组成的数字:

case $INPUT in 
    [0-9][0-9]*) 
      # Variable contains only digits 
      ;; 
    *) 
      # Variable contains at least one non-digit 
      ;; 
esac 
0

您可以使用字符串操作测试,像这样:

if [[ "${input%%*()+([0-9])?(.)*([0-9])}" = "" ]]; then 
    print "Is numeric" 
fi 
相关问题