Поиск по сайту:
Там, где «если б» закралось в речь, об удаче мечтать смешно (Ибн Ар-Руми).

Bash Select (Создание Меню)

04.02.2020
Как создать псевдонимы Bash

В этой статье мы рассмотрим основы конструкции select в Bash.

Конструкция select позволяет генерировать меню.

 

Конструкции select в Bash

Конструкция select создает меню из списка элементов. Она имеет почти такой же синтаксис, что и цикл for:

select ITEM in [LIST]
do
  [COMMANDS]
done

 

[LIST] – может быть последовательность строк, разделенных пробелами, диапазоном чисел, выводом команды, массивом и т. д. Настраиваемое приглашение для конструкции select может быть задано с помощью переменной среды PS3.

Когда вызывается конструкция select, каждый элемент из списка печатается на экране (стандартная ошибка), которому предшествует номер.

Если пользователь вводит число, соответствующее номеру одного из отображаемых элементов, то [ITEM] для этого элемента устанавливается значение. Значение выбранного элемента сохраняется в переменной REPLY. В противном случае, если пользовательский ввод пуст, подсказка и список меню отображаются снова.

Цикл select будет продолжать работать и запрос на ввод пользователя , пока команда break не будет выполнена.

Чтобы продемонстрировать, как работает конструкция select, давайте рассмотрим следующий простой пример:

PS3="Введите число: "

select character in AndreyEx Max Alex Terminator
do
    echo "Выбранный символ: $character"
    echo "Выбранный номер: $REPLY"
done

 

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

1) AndreyEx
2) Max
3) Alex
4) Terminator
Введите число: 3
Выбранный символ: Alex
Выбранный номер: 3
Введите число:

 

Пример select в Bash

Как правило, select используется в сочетании с case и заявлением if.

Читать  Как исправить неработающий WiFi в Ubuntu

Давайте посмотрим на более практичный пример. Это простой калькулятор, который запрашивает у пользователя ввод и выполняет основные арифметические операции, такие как сложение, вычитание, умножение и деление.

PS3="Выберите операцию: "

select opt in add subtract multiply divide quit; do

  case $opt in
    add)
      read -p "Введите первое число: " n1
      read -p "Введите второе число: " n2
      echo "$n1 + $n2 = $(($n1+$n2))"
      ;;
    subtract)
      read -p "Введите первое число: " n1
      read -p "Введите второе число: " n2
      echo "$n1 - $n2 = $(($n1-$n2))"
      ;;
    multiply)
      read -p "Введите первое число: " n1
      read -p "Введите второе число: " n2
      echo "$n1 * $n2 = $(($n1*$n2))"
      ;;
    divide)
      read -p "Введите первое число: " n1
      read -p "Введите второе число: " n2
      echo "$n1 / $n2 = $(($n1/$n2))"
      ;;
    quit)
      break
      ;;
    *) 
      echo "Недопустимая опция $REPLY"
      ;;
  esac
done

 

Когда скрипт выполняется, он отображает меню и подсказку PS3. Пользователю предлагается выбрать операцию, а затем ввести два числа. В зависимости от ввода пользователя скрипт напечатает результат. Пользователю будет предложено выполнить новую операцию после каждого выбора, пока команда break не будет выполнена.

1) add
2) subtract
3) multiply
4) divide
5) quit
Выберите операцию: 1
Введите первое число: 4
Введите второе число: 5
4 + 5 = 9
Выберите операцию: 2
Введите первое число: 4
Введите второе число: 5
4 - 5 = -1
Выберите операцию: 9
Недопустимая опция 9
Выберите операцию: 5

 

Недостатком этого скрипта является то, что он может работать только с целыми числами.

Читать  3 способа просмотра журналов в реальном времени в Linux

Вот немного более продвинутая версия. Мы используем инструмент bc, который поддерживает плавающие числа для выполнения математических вычислений. Кроме того, повторяющийся код сгруппирован внутри функции.

calculate () {
  read -p "Введите первое число: " n1
  read -p "Введите второе число: " n2
  echo "$n1 $1 $n2 = " $(bc -l <<< "$n1$1$n2")
}

PS3="Выберите операцию: "

select opt in add subtract multiply divide quit; do

  case $opt in
    add)
      calculate "+";;
    subtract)
      calculate "-";;
    multiply)
      calculate "*";;
    divide)
      calculate "/";;
    quit)
      break;;
    *) 
      echo "Недопустимая опция $REPLY";;
  esac
done

 

1) add
2) subtract
3) multiply
4) divide
5) quit
Выберите операцию: 4
Введите первое число: 8
Введите второе число: 9
8 / 9 =  .88888888888888888888
Выберите операцию: 5   

 

Вывод

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

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
Ранее все промокоды для сервиса Google Ads предоставлялись Гуглом в…

Спасибо!

Теперь редакторы в курсе.