Вам понадобится CFW или LCFW, как минимум.
Я рекомендую PRO CFW.
Я считаю, что последней версией PRO является PRO-C2. Это легкая кастомная прошивка, которая уходит при полном выключении (не приостановке). «Восстановление» или «Быстрое восстановление» необходимо запускать каждый раз при загрузке.
Читая сразу три имени, вы не сможете легко проверить, действительно ли вы получили три имени, тем более что имена имеют тенденцию иногда содержать пробелы. Вы можете определить получение меньше трех имен, проверив, пусты ли переменные, но это решает только половину проблемы.
Вместо этого читайте каждое имя отдельно:
echo 'Enter three names:' >&2
read -r -p 'Name 1: ' name1
read -r -p 'Name 2: ' name2
read -r -p 'Name 3: ' name3
Это предотвратит ввод пользователем слишком большого количества имен (, так как одно считывается за вызов read
, а у вас только три из них ), и вы должны использовать
if [ -z "$name1" ] ||
[ -z "$name2" ] ||
[ -z "$name3" ]
then
echo 'One or more names were empty!' >&2
exit 1
fi
или что-то подобное, чтобы обнаружить слишком мало введенных имен.
Или, если вам нужны имена в массиве:
echo 'Enter three names:' >&2
for (( i=1; i<=3; ++i )); do
read -r -p "Enter name $i: " name[i]
done
Затем вы можете либо проверить ${name[i]}
сразу после того, как он будет прочитан, либо сделать это позже в отдельном цикле.
Наверное, я бы сделал что-то вроде
echo 'Enter three names:' >&2
for (( i=1; i<=3; ++i )); do
if ! read -r -p "Enter name $i: " name[i] || [ -z "${name[i]}" ]
then
echo 'Invalid input, exiting' >&2
exit 1
fi
done
Это будет интерпретировать конец -файла -(как нажатие пользователем Ctrl+D)или пустую запись как ошибку и выход.
Как вариант,
echo 'Enter three names:' >&2
for (( i=1; i<=3; ++i )); do
while true; do
if ! read -r -p "Enter name $i: " name[i]; then
echo 'Ok, bye' >&2
exit 1
elif [ -n "${name[i]}" ]; then
# string is non-empty (good!), skip to next name
break
fi
echo 'Empty input, try again' >&2
done
done
Это позволит пользователю завершить сценарий, нажав Ctrl+D , и предложит пользователю ввести имя еще раз, если введенная строка пуста. Этот тип цикла ввода также позволит вам проверить ввод пользователя другими способами, кроме простого требования, чтобы он был -непустым.