Подстановка файлов и совпадение только с номерами - PullRequest
3 голосов
/ 13 июля 2011

В bash-скрипте мне нужно убедиться, что пользователь вводит реальные цифры, поэтому я подумал, что самый простой способ убедиться в этом - реализовать case:

case $1 in
    [0-9]*)
    echo "It's ok"
    ;;
    *)
    echo "Ain't good!"
    exit 1
    ;;
esac 

Но яС трудом справляюсь с файловым перетаскиванием, потому что я не могу найти способ требовать, чтобы значение в $ 1 было только числовым.Или другой способ мог бы исключить все альтернативы:

case $1 in
    -*)
    echo "Can't be negative"
    exit 1
    ;;
    +*)
    echo "Must be unsigned"
    exit 1
    ;;
    *[a-zA-z]*)
    echo "Can't contain letters"
    exit 1
    ;;
esac

Дело в том, что в этом случае я должен иметь возможность блокировать "специальные" символы, как!?^ = () и так далее ... Я не знаю, как этого добиться.Пожалуйста, кто-нибудь подскажет?

Ответы [ 2 ]

5 голосов
/ 22 апреля 2013

На самом деле было бы лучше использовать

*[!0-9]*

вместо

*[^0-9]*

, поскольку первым является POSIX, а вторым является bashism [1].

[1] http://rgeissert.blogspot.com/2013/02/a-bashism-week-negative-matches.html

4 голосов
/ 13 июля 2011

Если в строке есть нечисловой символ, ввод плохой, в противном случае он хорош:

case "$1" in
  *[^0-9]*) echo "first parameter must contain numbers only"; exit 1;;
esac
...