Как сделать так, чтобы при неправильном ответе скрипт не выходил из цикла?
Я хочу автоматизировать процессы. Код отслеживает папки в папке dir1, и количество папок может менятся. В зависимости от этого должен меняться и выбор в вопросе.
Но мне не хочется делать так:
#!/bin/bash
export PATH_FOLDER=$(xdg-user-dir DESKTOP)/dir1
folders_list=($(ls ${PATH_FOLDER}))
select opt in "${folders_list[@]}"; do
case $REPLY in
1) ITEM=${folders_list[$REPLY-1]} ;break ;;
2) ITEM=${folders_list[$REPLY-1]} ;break ;;
3) ITEM=${folders_list[$REPLY-1]} ;break ;;
*) echo "такого нету" >&2
esac
done
echo $ITEM
И я сделал так:
#!/bin/bash
export PATH_FOLDER=$(xdg-user-dir DESKTOP)/dir1
folders_list=($(ls ${PATH_FOLDER}))
select opt in "${folders_list[@]}"; do
case $REPLY in
$REPLY) ITEM=${folders_list[$REPLY-1]} ;break ;;
*) echo "такого нету" >&2
esac
done
echo $ITEM
Но почему-то при неверном ответе скрипт вылетает. Что делать?
Ответы (1 шт):
Автор решения: Fat-Zer
→ Ссылка
Подразумевая, что вопрос про то, как при использовании select'а обработать неправильный ввод, это можно сделать как-то так:
select opt in "${folders_list[@]}"; do
if [ -n "$opt" ]; then
ITEM="$opt"
break
else
echo "«$REPLY» не является номером элемента в списке"
fi
done
В случае неправильного ввода select присваивает opt пустую строку, а в случае корректного — выбранное значение из списка.