Esta aula é um complemento para a aula 10 (For) Fazendo os exercícios das aulas anteriores, você deve ter notado que montar um menu para o usuário escolher um valor não é uma tarefa muito simples.
Para resolver este problema de uma forma simples, podemos usar o laço de repetição select. Este laço permite que o usuário escolha valores para selecionar elementos de uma lista de variáveis. Veja o exemplo abaixo:
frutas="maca banana morango mamao melao uva abacaxi tamarindo pera"
select fruta in $frutas; do
echo "Fruta escolhida: $fruta"
done
Se você executar o exemplo acima, verá que o que é solicitado ao usuário após a listagens dos dados é:
1) maca 3) morango 5) melao 7) abacaxi 9) pera
2) banana 4) mamao 6) uva 8) tamarindo
#?
perceba que este laço de repetiçõ é infinito. Toda vez que um elemento for escolhido, a pergunta folta a ser feita ao usuário.
Para resolver o problema do exemplo básico (acima), adicione a opção de saída na lista, e implemente a condição de saída dentro do loop:
frutas="maca banana morango mamao melao uva abacaxi tamarindo pera sair"
select fruta in $frutas; do
if [[ $fruta == "sair"]]; then
break
fi
echo "Fruta escolhida: $fruta"
done
Dessa forma, quando o usuário escolher a opção "sair", o comando break fará a saída do loop select.
A pergunta feita ao usuário não é muito intuitiva:
#?
A melhor forma de alterar a pergunta feita ao usuário é alterando a variável que o interpretador usa para armazenar a pergunta. No bash, esta variável é PS3. Você pode alterá-la dentro do script, antes de usar o comando select:
PS3="Escolha uma fruta:"
frutas="maca banana morango mamao melao uva abacaxi tamarindo pera sair"
select fruta in $frutas; do
if [[ $fruta == "sair"]]; then
break
fi
echo "Fruta escolhida: $fruta"
done
O resultado será:
1) maca 3) morango 5) melao 7) abacaxi 9) pera
2) banana 4) mamao 6) uva 8) tamarindo 10) sair
Escolha uma fruta: