#!/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
Dodaj break
instrukcje wszędzie tam, gdzie potrzebujesz select
pętli, aby wyjść. Jeśli a break
nie zostanie wykonane, select
instrukcja zapętli się, a menu zostanie ponownie wyświetlone.
W trzeciej opcji zawarłem zmienne ustawione przez select
instrukcję, aby wykazać, że masz dostęp do tych wartości. Jeśli go wybierzesz, wyświetli:
you chose choice 3 which is Option 3
Możesz zobaczyć, że $REPLY
zawiera ciąg wprowadzony w wierszu polecenia. Jest on używany jako indeks tablicy, ${options[@]}
tak jakby tablica była oparta na 1. Zmienna $opt
zawiera ciąg z tego indeksu w tablicy.
Zauważ, że wybory mogą być prostą listą bezpośrednio w select
wyciągu, takim jak to:
select opt in foo bar baz 'multi word choice'
ale nie można umieścić takiej listy w zmiennej skalarnej ze względu na spacje w jednej z opcji.
Możesz także użyć globowania plików, jeśli wybierasz spośród plików:
select file in *.tar.gz
seq 10 | fzf
. Wadą jest to, że FZF nie jest domyślnie instalowany. Możesz znaleźć fzf tutaj: github.com/junegunn/fzf