Bash Select (создание меню)

Bash select

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

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

Bash select Construct

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

 select ITEM in [ LIST ] do [ COMMANDS ] done

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

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

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

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

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

 PS3 = "Enter a number: " select character in Sheldon Leonard Penny Howard Raj do echo "Selected character: $character " echo "Selected number: $REPLY " done

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

 1) Sheldon 2) Leonard 3) Penny 4) Howard 5) Raj Enter a number: 3 Selected character: Penny Selected number: 3 Enter a number:

Пример select Bash

Обычно select используется в сочетании с операторами case of if .

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

 PS3 = "Select the operation: " select opt in add subtract multiply divide quit ; do case $opt in add ) read -p "Enter the first number: " n1 read -p "Enter the second number: " n2 echo " $n1 + $n2 = $(( $n1 + $n2 )) " ;; subtract ) read -p "Enter the first number: " n1 read -p "Enter the second number: " n2 echo " $n1 - $n2 = $(( $n1 - $n2 )) " ;; multiply ) read -p "Enter the first number: " n1 read -p "Enter the second number: " n2 echo " $n1 * $n2 = $(( $n1 * $n2 )) " ;; divide ) read -p "Enter the first number: " n1 read -p "Enter the second number: " n2 echo " $n1 / $n2 = $(( $n1 / $n2 )) " ;; quit ) break ;; * ) echo "Invalid option $REPLY " ;; esac done

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

 1) add 2) subtract 3) multiply 4) divide 5) quit Select the operation: 1 Enter the first number: 4 Enter the second number: 5 4 + 5 = 9 Select the operation: 2 Enter the first number: 4 Enter the second number: 5 4 - 5 = -1 Select the operation: 9 Invalid option 9 Select the operation: 5

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

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

 calculate () { read -p "Enter the first number: " n1 read -p "Enter the second number: " n2 echo " $n1 $1 $n2 = " $( bc -l <<< " $n1$1$n2 " ) } PS3 = "Select the operation: " select opt in add subtract multiply divide quit ; do case $opt in add ) calculate "+" ;; subtract ) calculate "-" ;; multiply ) calculate "*" ;; divide ) calculate "/" ;; quit ) break ;; * ) echo "Invalid option $REPLY " ;; esac done
 1) add 2) subtract 3) multiply 4) divide 5) quit Select the operation: 4 Enter the first number: 8 Enter the second number: 9 8 / 9 = .88888888888888888888 Select the operation: 5

Заключение

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

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

терминал bash

Связанные руководства

Источник

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

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