#!/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
Adicione break
instruções sempre que precisar do select
loop para sair. Se a break
não for executada, a select
instrução será repetida e o menu será exibido novamente.
Na terceira opção, incluí variáveis definidas pela select
instrução para demonstrar que você tem acesso a esses valores. Se você escolher, ele produzirá:
you chose choice 3 which is Option 3
Você pode ver que $REPLY
contém a sequência digitada no prompt. É usado como um índice na matriz ${options[@]}
como se a matriz fosse baseada em 1. A variável $opt
contém a sequência desse índice na matriz.
Observe que as opções podem ser uma lista simples diretamente na select
declaração como esta:
select opt in foo bar baz 'multi word choice'
mas você não pode colocar essa lista em uma variável escalar por causa dos espaços em uma das opções.
Você também pode usar o globbing de arquivos se escolher entre os arquivos:
select file in *.tar.gz
seq 10 | fzf
. A desvantagem é que o fzf não está instalado por padrão. Você pode encontrar o fzf aqui: github.com/junegunn/fzf