Поиск по сайту:

Цикл выбора 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 для создания сценариев, управляемых меню.

Сообщите нам, если вы реализовали какие-либо интересные скрипты с использованием меню, через раздел комментариев.

Статьи по данной тематике