2012-02-09 100 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 
相關問題