Как использовать Select в Bash в Linux

12 set 2022 3 min di lettura
Как использовать Select в Bash в Linux
Indice dei contenuti

Введение

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

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

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

Конструкция select создает меню из списка элементов. У него почти такой же синтаксис, как for цикла 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:

Выберите в примере Bash

Обычно select используется в сочетании с операторами case или 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, который поддерживает числа с плавающей запятой для выполнения математических вычислений. Кроме того, повторяющийся код группируется внутри функции.

Установите инструмент bc на Debian, Ubuntu, Linux Mint и производные:

sudo apt install bc

Установите инструмент bc на CentOS, Red Hat и Fedora:

sudo yum install 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 позволяет легко создавать меню. Это особенно полезно при написании сценариев оболочки, требующих ввода данных пользователем.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.