Цикл select в скриптах Bash в ОС Linux

Цикл select в скриптах Bash в ОС Linux

Рубрики:

Bash, Linux

Метки:

Bash, linux, select, скрипт

Цикл selectуправляющая структура, используемая в скриптах Bash для создания простых меню из списка опций. Он отображает указанные варианты с числовым индексом, предлагает пользователю выбрать один из них и сохраняет значение в переменной. Этот цикл часто используется в интерактивных сценариях, где для определения следующего действия требуется ввод пользователя.

В этой статье мы покажем несколько примеров использования select в скриптах Bash.

Содержание:

  1. Синтаксис цикла select
  2. Выбор элемента из списка
  3. Настройка пользовательского запроса
  4. Простой скрипт с циклом select для системных администраторов
  5. Усложненный скрипт для мониторинга загруженности жесткого диска и нагрузки на ЦП
  6. Выводы

Синтаксис цикла select

Общий синтаксис цикла select в сценариях оболочки Linux следующий:

 

Где:

  • [variable] — переменная, в которой будет храниться значение выбранного элемента;
  • [list] — список вариантов, разделенных пробелами;
  • [commands] — код для выполнения в зависимости от выбора пользователя.

Выбор элемента из списка

Для примера напишем простой скрипт, в котором попросим пользователя выбрать фрукт из списка:

 

select without break

Читайте также: Команда zenity в Linux с примерами.

Мы предоставили список из четырех элементов: Apple, Banana, Orange и Quit. Каждый элемент автоматически получает свой числовой индекс, начиная с 1 у Apple. Чтобы выбрать вариант, пользователю нужно в интерактивном режиме ввести соответствующий номер и нажать Enter.

Обратите внимание, что в этом примере нет условия для выхода из цикла. То есть после выбора опции select продолжит выполняться и снова запросит ввод индекса. Чтобы завершить работу цикла после первого выбора, нужно добавить оператор break:

 

select with break

Настройка пользовательского запроса

Чтобы пользователю было легче понять, что от него требуется, можно настроить собственную подсказку. По умолчанию приглашение к вводу в цикле отображается как #?. Для его изменения в скрипте перед select нужно задать специальную переменную PS3. В качестве ее значения следует указать текст запроса пользователю. Например:

 

select with custom prompt

Читайте также: 10 полезных советов для написания эффективных bash скриптов в Linux.

На скриншоте выше видно, что теперь вместо стандартного #? отображается текст Choose a fruit:.

Простой скрипт с циклом select для системных администраторов

Скрипты Bash часто используются системными администраторами для автоматизации процессов мониторинга Linux. Следующий простой сценарий позволяет быстро отследить:

  • загруженность жесткого диска;
  • время работы ОС;
  • использование ресурсов ОЗУ;
  • количество и имена пользователей.

 

script for sysadmins

Давайте детальнее разберем код скрипта:

  1. PS3 — специальная переменная в Bash, которая имеет значение Choose an action:.
  2. action — переменная, в которой хранится значение, выбранное пользователем:
    • Show Disk Usage;
    • Show Uptime;
    • Check Memory;
    • List Logged-in Users;
    • Quit.
  3. case $action in — начало конструкции case, обрабатывающая выбор, сделанный пользователем:
    • "Show Disk Usage") df -h ;; — выполняется команда df -h, показывающая информацию о файловых системах и их использовании в человекочитаемом формате;
    • "Show Uptime") uptime ;; — выполняется uptime, которая выводит статистику о времени работы ОС, средней нагрузке на ЦП и числе пользователей;
    • "Check Memory") free -h ;; — запускается free -h, которая отображает процент использование памяти ОЗУ в удобочитаемом формате;
    • "List Logged-in Users") who ;; — применяется команда who, выводящая в окно терминала список пользователей, которые в данный момент вошли в Linux;
    • "Quit") echo "Goodbye!" break ;; — выводится указанное сообщение, активируется оператор break, и цикл завершается;
    • *) echo "Invalid choice, try again." ;; — если пользователь вводит некорректный числовой индекс (не соответствующий ни одному из вариантов), печатается уведомление об этом и цикл продолжает работать.

Читайте также: Использование оператора case в скриптах Bash.

Усложненный скрипт для мониторинга загруженности жесткого диска и нагрузки на ЦП

Предлагаем немного усложнить предыдущий скрипт, сократив при этом количество опций для выбора. В качестве примера пользователь получает интерактивное меню для просмотра состояния жесткого диска и нагрузки на процессор. Внутри конструкции case добавим проверки с использованием if-else, что усложнит логику: скрипт анализирует процент загруженности диска и уровень нагрузки ЦП, чтобы выводить предупреждения при превышении заданных порогов.

 

complicated select script

Вот как теперь конструкция case обрабатывает выбранный пользователем пункт:

  1. В блоке Disk Usage используется команда df, а затем awk и tr для получения процента загруженности жесткого диска. Далее if проверяет, превышает ли он 90%, и выводит предупреждение.
  2. В блоке CPU Load применяются uptime и awk для извлечения значения средней нагрузки на ЦП. Сравнение с порогом (например, 2.0) выполняется с помощью bc, и при превышении выводится предупреждение.
  3. При выборе Quit скрипт завершает работу через оператор break.

Читайте также: Использование операторов if, elif, else в скриптах Bash.

Выводы

Цикл select в Bash — это простой способ создать интерактивное меню для выбора пользователем одной из предложенных опций. Он удобен при написании системных скриптов, позволяя обрабатывать ввод с помощью конструкции case и, при необходимости, дополнять логику условиями if-else.

Спасибо за время, уделенное прочтению статьи!

Если возникли вопросы — задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Ciscoкурсы по кибербезопасностиполный курс по кибербезопасностикурсы DevNet / DevOps (программируемые системы) от Академии Ciscoкурсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).

Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!

Спешите подать заявку! Группы стартуют 25 января, 26 февраля, 22 марта, 26 апреля, 24 мая, 21 июня, 26 июля, 23 августа, 20 сентября, 25 октября, 22 ноября, 20 декабря.
Что Вы получите?
  • Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
  • Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проведем вечерние онлайн-лекции на нашей платформе.
  • Согласуем с вами удобное время для практик.
  • Если хотите индивидуальный график — обсудим и реализуем.
  • Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
  • Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
А еще поможем Вам:
  • отредактировать или создать с нуля резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco, Linux LPI, кибербезопасность, DevOps / DevNet, Python, подайте заявку или получите бесплатную консультацию.

Рубрики:

Bash, Linux

Метки:

Bash, linux, select, скрипт

Больше похожих постов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения


Поиск по сайту
Лучшее
Популярное
Рубрики