Пользовательский цикл ввода до тех пор, пока он не введет число

"adduser" обычно используется в Linux, но если вы посмотрите на другие утилиты Shadow, --passwd, useradd, usermod --, они должны быть достаточно похожими. Shadow (что есть в Linux... )был основан на SVR1, к которому у меня был доступ, когда я начал писать его в 1987 году. «useradd» нужна опция «-m» для обработки домашнего каталога, так что не поставляйте это. А «passwd -l» блокирует пароль, вставляя недопустимый символ в поле пароля.

Чего вы хотите избежать, так это «изменения», поскольку это то, что я придумал. Даже если это что-то удобное.

0
23.05.2021, 03:53
2 ответа

Как число может быть одновременно меньше 5 и больше 20? Я думаю, ты хочешь:

while [ "$input" -lt 5 ] || [ "$input" -gt 20 ]

дополнительно вы должны повторно -запросить номер внутри цикла.

while [ "$input" -lt 5 ] || [ "$input" -gt 20 ]
do
    read -rp "Your number wasn't within the range. Please re-enter" input
done

К вашему сведению, -параметр p для чтения не специфицирован POSIX, поэтому его поддержка во всех формах sh не гарантируется. Если эта программа предназначена для использования в нескольких малоизвестных операционных системах и переносимость имеет решающее значение, вы можете сделать что-то вроде:

printf '%s' "Your number wasn't within the range. Please re-enter: "
read -r input
4
28.07.2021, 11:30

Возможно, вам будет удобнее и понятнее писать:

while ! (( (5 <= input) && (input <= 20) )); do
    echo "Your number wasn't within the range. Please re-enter"
done

Из вышеприведенного вы можете сразу увидеть, что он проверяет, находится ли inputмежду 5и 20, потому что это место, где имя переменной inputнаходится в коде.

-1
28.07.2021, 11:30

Теги

Похожие вопросы