В bash можно создать интерактивное меню с помощью цикла `while` и оператора `select`. Для динамического добавления вариантов выбора можно использовать массивы.
Вот пример скрипта, который демонстрирует создание интерактивного меню с динамическим выбором вариантов:
```bash
#!/bin/bash
# Массив с вариантами выбора
options=("Вариант 1" "Вариант 2" "Вариант 3" "Выход")
# Функция, которая будет выполняться при выборе варианта
function handle_choice() {
case $1 in
1)
echo "Вы выбрали вариант 1"
;;
2)
echo "Вы выбрали вариант 2"
;;
3)
echo "Вы выбрали вариант 3"
;;
4)
echo "Выход"
exit 0
;;
*)
echo "Некорректный вариант"
;;
esac
}
# Бесконечный цикл для отображения меню
while true
do
# Печатаем варианты выбора
echo "Выберите один из вариантов:"
select option in "${options[@]}"
do
# Обрабатываем выбранный вариант
handle_choice $REPLY
break
done
done
```
Вы можете добавить или удалить варианты выбора, изменяя значения в массиве `options`. Функция `handle_choice` будет выполняться при выборе варианта и может быть настроена для выполнения необходимых действий.
Примечание: Данный скрипт использует `select` для интерактивного выбора варианта. Он доступен только в bash и не будет работать в других оболочках, таких как sh или dash.
select, for, while, until - это четыре команды, которые создают цикл. Например:
for a in 1 2; do
for b in 1 3; do
select list; do
while something; do
break
done
done
done
done
Это нормальное использование всех циклов. Однако в вашем скрипте может быть ошибка или неправильное написание команды case. Я не совсем понял задачу, но вы можете посмотреть пример ниже, возможно, это поможет:
jsonlist="$(jq '.[][]|keys[]' sites.json|tr -d \")"
select action in ${jsonlist}; do
echo "[$action]"
test "$action" == "title" && break
newlist="$(jq ".[][][\"$action\"][]" sites.json)"
echo "$newlist"
done