Я пытаюсь сделать что-то достаточно распространенное: введите пользовательский ввод в оболочку script. Если пользователь предоставил действительное целое число, script делает одно, а если оно недействительно, оно делает что-то еще. Проблема в том, что я не нашел простой (и достаточно элегантный) способ сделать это - я не хочу выделять его char на char.
Я знаю, что это должно быть легко, но я не знаю, как это сделать. Я мог бы сделать это на десятках языков, но не BASH!
В моих исследованиях я нашел это:
И есть ответ, в котором говорится о регулярном выражении, но насколько я знаю, функция, доступная в C (среди прочего). Тем не менее, у этого был отличный ответ, поэтому я попробовал его с grep, но grep не знал, что с ним делать. Я попытался -P, который на моей коробке означает рассматривать его как PREL regexp-nada. Dash E (-E) тоже не работает. И не делал -F.
Просто, чтобы быть ясным, я пытаюсь что-то вроде этого, ища какой-либо результат - оттуда я взломаю script, чтобы воспользоваться тем, что получаю. (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
Кто-нибудь, пожалуйста, проиллюстрирует, как это легче всего сделать?
Честно говоря, это краткосрочный тест TEST, на мой взгляд. Он должен иметь такой флаг
if [ -I "string" ] ;
then
echo "String is a valid integer."
else
echo "String is not a valid integer."
fi