Как определить, является ли строка числовой в ksh - PullRequest
4 голосов
/ 09 февраля 2012

Я пытаюсь проверить ввод в ksh и хотел бы узнать, как проще всего определить, является ли строка допустимым числом.

Ответы [ 6 ]

7 голосов
/ 09 февраля 2012

Пойди с:

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

esac
1 голос
/ 24 февраля 2018

Я видел этот ответ здесь (https://www.unix.com/302299284-post9.html) и он работает в ksh-88 в Solaris 10 для целых чисел:

x=2763
if [[ $x == +([0-9]) ]]; then
    print integer
else
    print nope
fi
1 голос
/ 06 апреля 2013

Это исправляет ответ FreudianSlip, включающий необязательный, ведущий знак «-» или «+», разрешающий десятичные числа, начинающиеся с «.»(без начального 0) и исключить числа, содержащие несколько символов "."(например, "12 ... 34"):

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

esac
0 голосов
/ 13 ноября 2017

Вы можете использовать строковый оператор в тесте так:

if [[ "${input%%*( )+([0-9])?(.)*([0-9])}" = "" ]]; then
   print "Is numeric"
fi
0 голосов
/ 26 января 2016

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

case $INPUT in
    [0-9][0-9]* )
          # Variable contains only digits
          ;;
    *) 
          # Variable contains at least one non-digit
          ;;
esac
0 голосов
/ 09 февраля 2012
[ $input -ge 0 -o $input-lt 0 ] 2>/dev/null && echo "numeric"

Это проверит, является ли ввод числовым (положительное или отрицательное целое число), и напечатает числовое значение, если оно есть.

...