#!/bin/bash
# Bash Menu Script Example
PS3='Please enter your choice: '
options=("Option 1" "Option 2" "Option 3" "Quit")
select opt in "${options[@]}"
do
case $opt in
"Option 1")
echo "you chose choice 1"
;;
"Option 2")
echo "you chose choice 2"
;;
"Option 3")
echo "you chose choice $REPLY which is $opt"
;;
"Quit")
break
;;
*) echo "invalid option $REPLY";;
esac
done
Добавляйте break
операторы везде, где вам нужен select
цикл для выхода. Если a break
не выполняется, select
оператор зацикливается, и меню отображается повторно.
В третий вариант я включил переменные, которые устанавливаются select
оператором, чтобы продемонстрировать, что у вас есть доступ к этим значениям. Если вы выберете его, он выведет:
you chose choice 3 which is Option 3
Вы можете видеть, что $REPLY
содержит строку, которую вы ввели в приглашении. Он используется в качестве индекса в массиве, ${options[@]}
как если бы массив был основан на 1. Переменная $opt
содержит строку из этого индекса в массиве.
Обратите внимание, что варианты выбора могут быть простым списком непосредственно в select
выражении, например так:
select opt in foo bar baz 'multi word choice'
но вы не можете поместить такой список в скалярную переменную из-за пробелов в одном из вариантов.
Вы также можете использовать глобирование файлов, если вы выбираете среди файлов:
select file in *.tar.gz
seq 10 | fzf
. Недостатком является то, что fzf не установлен по умолчанию. Вы можете найти fzf здесь: github.com/junegunn/fzf