Подстановка файлов и совпадение только с номерами
В скрипте 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 ответа
Если вы найдете нечисловые символы где-либо в строке, ввод будет плохим, в противном случае это будет хорошо:
case "$1" in
*[^0-9]*) echo "first parameter must contain numbers only"; exit 1;;
esac
На самом деле было бы лучше использовать
*[!0-9]*
вместо
*[^0-9]*
первый - POSIX, а второй - башизм [1].
[1] http://rgeissert.blogspot.com/2013/02/a-bashism-week-negative-matches.html