Позволяет пространство до и после номера, _33 или 33___, но не 3__3. и никаких писем. 0 или
- Получить ввод от пользователя до Correct
# -- get input until Correct
unset get_num
while [[ ! ${get_num} =~ ^[0-9]+$ ]]; do
echo "Please enter in a number:"
read get_num
done
echo This is a number : ${get_num}
- Получить вход до Correct (в пределах диапазона)
# -- get input until Correct (within range)
unset get_num
while [[ ! ${get_num} =~ ^[0-9]+$ ]]; do
echo "Please enter in a number within range of (1-30):"
read get_num
! [[ ${get_num} -ge 1 && ${get_num} -le 30 ]] && unset get_num
done
echo This is a number withn a range : ${get_num}
- не получить ввод до Correct (в пределах диапазона) (full regex way)
«Поскольку регулярные выражения имеют дело с текстом, а не с цифрами, то сопоставление числа в заданном диапазоне требует немного дополнительной помощи. Вы не можете просто написать [0-255 ], чтобы соответствовать числу от 0 до 255. Хотя действительное регулярное выражение совпадает с чем-то совершенно другим. [0-255] - это класс символов с тремя элементами: диапазон символов 0-2, символ 5 и символ 5 (снова). Этот класс символов соответствует одна цифра 0, 1, 2 или 5, так же, как [0125] «~ http://www.regular-expressions.info/numericranges.html
# -- get input until Correct (within range) (another way)
unset get_num
while [[ ! ${get_num} =~ ^([1-9]|1[0-9]|2[0-9]|30)$ ]]; do
echo "Please enter in a number within range of (1-30):"
read get_num
done
echo This is a number withn a range : ${get_num}
-. Получить вход и проверить его только (не в то время как петля)
# -- get input, and check it only (no while loop)
unset get_num
echo "Please enter in a number:"
read get_num
if [[ ! ${get_num} =~ ^[0-9]+$ ]] ;then
echo "${get_num} isn't a number"
else
echo "${get_num} is a number"
fi
Да, это работает, спасибо, но я повторно использую одну и ту же переменную, поэтому в следующий раз, когда она приближается, она имеет значение от последней записи. любые идеи? – 2009-05-11 14:43:47
Я не совсем понимаю, что вы имеете в виду. Именно поэтому мы ее установили до пустой строки, прежде чем мы войдем в цикл :) –
Решение выше по-прежнему принимает входные данные, такие как «22aa», «aa 22» или «a23bb». Регулярное выражение должно включать начало d конец строки: в то время как [[! ($ number = ~^[0-9] + $)]]; do –