Цикл выбора Bash, объясненный примерами
Создание сценариев, управляемых меню, с использованием цикла выбора Bash
Мы видели в bash цикл for, цикл while и цикл до тех пор, пока, в наших предыдущих статьях с подробными примерами. Bash предлагает еще один тип цикла, называемый цикл выбора, который позволит вам создавать сценарии, управляемые меню.
Сценарии, управляемые с помощью меню, являются хорошей альтернативой сценариям, требующим от пользователей передачи аргументов для выполнения действия. Вы можете добавить больше детализации в свои меню, и пользователям придется просто выбрать опцию, чтобы программа выполнила свою работу.
Ознакомьтесь с нашей подробной статьей о цикле for
, цикле while
и цикле до тех пор, пока
.
- Скрипты Bash: цикл For с примерами
- Скрипты Bash: циклы while и Until с примерами
Цикл выбора Bash — синтаксис
Синтаксис цикла select
немного похож на синтаксис цикла for
. В цикле for
каждый элемент будет повторяться, и для каждого элемента вы напишете логику для его обработки. Но select цикл
автоматически преобразует список элементов в нумерованное меню.
select fav in ubuntu popos mint kubuntu
do
echo "My fav distribution = ${fav}"
done
Объяснение:
- Цикл должен начинаться с ключевого слова
select
. - После ключевого слова select следует переменная, которая будет хранить значение, выбранное вами из меню. В моем случае я указал имя переменной как "fav".
- После ключевого слова in необходимо указать список элементов. Эти элементы будут преобразованы в меню.
- Ваша логика должна быть помещена в блоки do и done.
Теперь скопируйте приведенный выше фрагмент и запустите его в своем терминале. Он создаст меню и будет ждать вашего ответа.
Создание сценариев, управляемых меню, с использованием цикла выбора Bash
Выбор цикла — ответ
Давайте разберемся с поведением цикла выбора, когда вы даете ответ.
цикл выбора
принимает в качестве аргумента только номер меню. В зависимости от выбранного вами номера меню соответствующее значение будет сохранено в переменной (fav). Число из выбранного вами варианта будет сохранено в переменной REPLY.
Проверьте следующий код. Я выбрал вариант 2.
select fav in ubuntu popos mint kubuntu
do
echo "My fav distribution = ${fav}"
done
1) ubuntu
2) popos
3) mint
4) kubuntu
#? 2
My fav distribution = popos
#?
Ответ цикла выбора Bash
Цикл выбора не завершится до тех пор, пока вы не отмените его или не воспользуетесь оператором Break для выхода из цикла в вашем скрипте. Я использовал оператор прерывания после логического потока, поэтому цикл будет завершен всего одним выбором.
Оператор break выходит из цикла после его вызова, поэтому любая ожидающая операция будет пропущена в цикле. Следующий код объясняет использование оператора Break.
select fav in ubuntu popos mint kubuntu
do
echo "My fav distribution = ${fav}"
break
done
Цикл выбора Bash с оператором Break
Поведение цикла выбора по умолчанию заключается в том, что, когда пользователь не предоставляет входные данные, он снова запрашивает ввод без выхода из цикла.
Цикл выбора Bash без ввода
Цикл выбора — настройка пользовательского приглашения
По умолчанию цикл выбора будет использовать в качестве приглашения "#?
". Вы также можете настроить собственный запрос по своему желанию, задав переменную среды PS3.
PS3="Choose your fav distribution :: "
select fav in ubuntu popos mint kubuntu; do
echo "My fav distribution = ${fav}"
break
done
Установить пользовательскую подсказку
Связанное чтение:
- Как настроить приглашение Bash в Linux
Создание простого сценария резервного копирования и восстановления на основе меню
До сих пор мы видели только синтаксис цикла выбора и его поведение. Давайте создадим простой сценарий резервного копирования и восстановления с использованием меню.
Взгляните на приведенный ниже код. Две функции: backup()
, которая создаст резервную копию, и restore()
, которая вернет файл в исходное состояние. источник.
Я просто делаю резервную копию только файла .bashrc
для демонстрации, но вы можете настроить этот сценарий в соответствии с вашими требованиями. Используя условные операторы, я проверяю ввод и запускаю соответствующую функцию.
#!/usr/bin/env bash
SOURCE="/home/${USER}/.bashrc"
DESTINATION="/home/${USER}/Documents/"
This function will take backup
function backup(){
rsync -a --progress --delete-before --info=progress2 ${SOURCE} ${DESTINATION}
}
This function will restore the backup
function restore(){
rsync -a --progress --delete-before --info=progress2 ${DESTINATION} ${SOURCE}
}
PS3="Choose either BACKUP or RESTORE :: "
select option in backup restore
do
if [[ ${option} = "backup" ]];then
backup
elif [[ ${option} = "restore" ]];then
restore
fi
break
done
После запуска этого сценария он просто предложит два варианта, как показано на рисунке ниже, и в зависимости от вашего выбора будет выполнено действие.
Сценарий резервного копирования и восстановления на основе меню
Заключение
В этой статье я показал вам, что такое оператор выбора в сценариях bash и как использовать цикл выбора Bash для создания сценариев, управляемых меню.
Сообщите нам, если вы реализовали какие-либо интересные скрипты с использованием меню, через раздел комментариев.