Я пытаюсь контролировать пользовательский ввод в сценарий, чтобы можно было передать только трехзначное число.Я начал с двух if, и они отлично работают.
echo -e "Input sequence number:"
read SEQUENCE
NUMTEST='^[0-9]+$'
if ! [[ $SEQUENCE =~ $NUMTEST ]]; then
echo "ERROR:" "$SEQUENCE" "is not a number! Try again!"
exit 1
fi
SEQLEN=$(printf "%s" "$SEQUENCE" | wc -c)
if (($SEQLEN != 3)); then
echo "ERROR:" "$SEQUENCE" "is not a 3 digit number! Try again!"
exit 1
fi
Лучше было бы использовать цикл while, чтобы пользователю не приходилось повторять скрипт, но пока я могу получитьЦикл while работает для каждого отдельного условия, когда я объединяю их, текстовый ввод убивает цикл, поскольку числовому условию это не нравится.
echo -e "Input sequence number:"
read SEQUENCE
NUMTEST='^[0-9]+$'
SEQLEN=$(printf "%s" "$SEQUENCE" | wc -c)
while ! [[ $SEQUENCE =~ $NUMTEST ]] && (($SEQLEN != 3)); do
echo "ERROR:" "$SEQUENCE" "is not a 3 digit number! Try again!"
echo -e "Input sequence number:"
read SEQUENCE
SEQLEN=$(printf "%s" "$SEQUENCE" | wc -c)
done
Я думаю, либо мне нужно создать одно условие$ SEQUENCE == Трехзначное число или найти способ подавления ошибок, чтобы любая ошибка означала, что цикл продолжается.
Чтобы быть в явном виде, мои вопросы:
- Есть ли способнаписать условие $ SEQUENCE == 3-значное число?
- Могу ли я устранить ошибку и все же перейти к циклу, или это ошибка завершения сценария?
Предложения и улучшенияочень признателен.Это мой первый сценарий, поэтому я не удивлюсь, если я совершу некоторые плохие практики, поэтому любые другие рекомендации приветствуются.