#!/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 breakinstrukcje wszędzie tam, gdzie potrzebujesz selectpętli, aby wyjść. Jeśli a breaknie zostanie wykonane, selectinstrukcja zapętli się, a menu zostanie ponownie wyświetlone.
W trzeciej opcji zawarłem zmienne ustawione przez selectinstrukcję, 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 $REPLYzawiera ciąg wprowadzony w wierszu polecenia. Jest on używany jako indeks tablicy, ${options[@]}tak jakby tablica była oparta na 1. Zmienna $optzawiera ciąg z tego indeksu w tablicy.
Zauważ, że wybory mogą być prostą listą bezpośrednio w selectwycią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