Я пытаюсь сделать что-то достаточно общее: анализ пользовательского ввода в сценарии оболочки.Если пользователь предоставил правильное целое число, скрипт выполняет одно действие, а если он недействителен, он выполняет другое.Проблема в том, что я не нашел простого (и достаточно элегантного) способа сделать это - я не хочу разбирать его на части по символам.
Я знаю, что это должно быть легко, но я нене знаю как.Я мог бы сделать это на дюжине языков, но не на BASH!
В своем исследовании я нашел следующее:
Регулярное выражение для проверки, состоит ли строка из действительного действительного числа в базе10
И там есть ответ, в котором говорится о регулярных выражениях, но, насколько я знаю, эта функция доступна в C (среди прочих).Тем не менее, он выглядел как отличный ответ, поэтому я попробовал его с помощью grep, но grep не знал, что с ним делать.Я попытался -P, что на моем поле означает рассматривать его как регулярное выражение PERL - нада.Тире E (-E) тоже не сработало.И ни один не сделал -F.
Просто чтобы прояснить ситуацию, я пытаюсь что-то вроде этого, ищу любой вывод - оттуда я взломаю сценарий, чтобы воспользоваться всем, что я получу.(IOW, я ожидал, что несоответствующий ввод ничего не выдаст, в то время как допустимая строка повторяется.)
snafu=$(echo "$2" | grep -E "/^[-+]?(?:\.[0-9]+|(?:0|[1-9][0-9]*)(?:\.[0-9]*)?)$/")
if [ -z "$snafu" ] ;
then
echo "Not an integer - nothing back from the grep"
else
echo "Integer."
fi
Кто-нибудь, пожалуйста, проиллюстрируйте, как это легче всего сделать?
Честно говоря,на мой взгляд, это недопустимый ТЕСТ.Он должен иметь такой флаг
if [ -I "string" ] ;
then
echo "String is a valid integer."
else
echo "String is not a valid integer."
fi