Сначала позвольте мне ответить на вашу проблему:
нажмите Enter 4 раза, чтобы выйти.
Это потому, что вы используете read -N4
, что означает, что вы читаете четыре символа из ввода. Итак, вам нужно четыре Enter. Я предлагаю изменить его на -a
, читать из ввода, пока Enter
не исправит это.
Я нажимаю только одну или две цифры, а затем ввожу, чтобы отобразить сообщение «Номер вне диапазона» сразу, а не после двух или трех раз для каждого случая.
Я думаю, вам не следует вызывать функцию внутри предложения case
, потому что вы уже используете while l oop. Следует просто позволить этому продолжаться.
Вот мой код: // работает
#!/bin/sh
function MakeSomething () {
while true; do
echo -en "Input : "
read -a vn
echo
case $vn in
"") if [ -z "$vn" ] ; then vn=3000 ; echo ${vn} ; exit ; fi ; break ;;
*) [[ $vn =~ ^[0-9]+$ ]] || { echo -e '\nSorry input a number between 0011 and 2559\n' ; continue; }
# check input len
if [ ${#vn} -ge 5 ] || [ ${#vn} -le 3 ]; then echo '\n need exactly four number'; continue; fi
if ((vn >= 0011 && vn <= 2559)); then echo ${vn} ; else echo -e '\nNumber out of Range, input a number between 0011 and 2559\n' ; fi
esac
done
}
MakeSomething