2012-02-09 2 views

ответ

7

Имейте идти с:

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

esac 
+0

+1 для подстановочных знаков ksh '+ (..), * (...)'! – shellter

+0

Использует ли ksh подстановочные знаки раньше, а не после, как в «регулярном» регулярном выражении? – Steve

+3

Это решение, кажется, рассматривает 123 ... 99 как числовые – Ruchi

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

Simpler, если вы просто хотите знать, если строка состоит из цифр:

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 
Смежные вопросы