- Gerar link
- Outros aplicativos
Postagem em destaque
- Gerar link
- Outros aplicativos
O uso do menu em scripts, oferece ao usuário uma experiência interativa; apresentando opções predeterminadas para execução de uma função especifica sem complicações; a diferenciar do uso tradicional de parâmetros e argumentos que exige do usuário o controle sobre aquilo que esta fazendo. No final o menu dá ao script um aspecto elegante e profissional.
Vou mostrar algumas formas de construir um menu textual sem dores de cabeça.
1. Exemplo
Para montar a estrutura desse menu, vou utilizar os seguintes comandos:
O menu tem como opções o nome de três linguagens de programação, das quais o usuário deverá selecionar, onde uma ação será executada referente a opção selecionada e exibir o resultado na tela.
Script: menu1.sh
Vou executar o script e testar as opções do menu, selecionando a opção '2'.
Como a opção informada é valida, o script executa os comandos referente a opção imprimindo a mensagem, interrompe o loop finalizando o menu e continuando o fluxo do script.
Vou informar uma opção que não existe para ver a se mensagem de erro é exibida.
Não só a mensagem de erro foi retornada, como apresentou novamente o menu para que o usuário informasse uma opção válida. A omissão do comando break na opção '*' na estrutura do case, impede que script finalize o menu e continue a execução quando uma opção inválida é selecionada.
Selecionando a opção sair (finalizar script).
Retornou a mensagem informando ao usuário que está finalizando o script e executa o comando exit, interrompendo o processo de execução do mesmo.
2. Exemplo
Neste exemplo vou utilizar uma comando especifico para essa finalidade, que é o comando select, que seleciona palavras de uma lista e executa comandos.
select NOME [in PALAVRAS ... ;] do COMANDOS; done
Sua sintaxe é semelhante ao comando for, porém as palavras são expandidas, gerando uma lista de palavras. O conjunto de palavras é precedido de um número. Se a linha consiste do número correspondente a uma das palavras exibidas, então a variável NOME recebe aquela palavra. Se a linha for vazia, PALAVRAS e o prompt são reexibidos. Comandos são executados após cada seleção até que um comando break seja executado.
Para montar a estrutura do menu utilizei os seguintes comandos:
O menu mantém as opções do exemplo anterior.
Script: menu2.sh
Mesmo utilizando o comando select, o uso do case é necessário para avaliar o valor armazenado na variável. Ele cria um menu com as opções enumeradas, inserindo um prompt de entrada, para que o usuário informe a opção deseja. Quando o usuário informa o número, a variável recebe o nome da opção ao invés do número; por essa razão,os nomes são avaliados no case.
Vamos testar o script, selecionando a opção 2.
O '#?' é o prompt de entrada do comando select, que lê o número da opção.
Ao informar o valor '2', a variável OPCAO recebe a expressão 'Shell Script' que por sua vez é lida e avaliada pelo case.
Escolhendo uma opção inválida.
No caso de uma opção inválida, imprime a mensagem de erro e reexibe o prompt.
Essa foi uma simples demonstração de como criar um menu textual sem complicações. No lugar do case, você pode utilizar o 'if' para avaliar as opções; particularmente não recomendaria; porque dependendo da quantidade de itens, você teria que aninhar if's atrás de else if's e cai entre nós; isso tudo para um simples menu ?
Vou mostrar algumas formas de construir um menu textual sem dores de cabeça.
1. Exemplo
Para montar a estrutura desse menu, vou utilizar os seguintes comandos:
Comando | Qual será a sua função ? |
---|---|
while | Manter o fluxo do programa no menu. |
echo | Montar as opções do menu. |
case | Verificar a opção selecionada. |
break | Finalizar o menu. |
read | Lê a opção digitada |
O menu tem como opções o nome de três linguagens de programação, das quais o usuário deverá selecionar, onde uma ação será executada referente a opção selecionada e exibir o resultado na tela.
Script: menu1.sh
#!/bin/bash
# Limpando a tela
clear
# Loop infinito
while :
do
# Imprimindo as opções do menu
echo 'Selecione a linguagem que está estudando.'
echo
echo '1 - Java'
echo '2 - Shell Script'
echo '3 - C++'
echo '4 - Sair'
# '-p' Exibe a mensagem 'Opção' no prompt de entrada.
# '-n1' Lê o caractere único e armazena em 'OPCAO'.
read -n1 -p 'Opção: ' OPCAO
# Insere uma nova linha
echo
# Lê o número armazenado na variável 'OPCAO' e executa a opção correspondente.
case $OPCAO in
1) # Opção 1
# Executando os comandos...
echo "Você está estudando Java."
# Finaliza o menu
break
;;
2) # Opção 2Selecione a linguagem que está estudando.
1) Java
2) Shell Script
3) C++
4) Sair
#? 9
Opção seleciona é inválida.
#?
# Executando os comandos...
echo 'Você está estudando Shell Script.'
# Finaliza o menu
break
;;
3) # Opcao 3
# Executando os comandos...
echo 'Você está estudando C++.'
# Finaliza o menu
break
;;
4) # Finalizar script
echo 'Saindo...'
exit 0
;;
*) # Opção inválida. (nenhuma das opções anteriores).
# O comando break não é executado para que o fluxo do script
# permaneça preso ao menu, forçando o usuário a selecionar uma
# opção válida.
# Imprimindo mensagem de erro.
echo 'Opção seleciona é inválida.'
echo
;;
esac
done
echo 'Continuando a execução...'
# Limpando a tela
clear
# Loop infinito
while :
do
# Imprimindo as opções do menu
echo 'Selecione a linguagem que está estudando.'
echo
echo '1 - Java'
echo '2 - Shell Script'
echo '3 - C++'
echo '4 - Sair'
# '-p' Exibe a mensagem 'Opção' no prompt de entrada.
# '-n1' Lê o caractere único e armazena em 'OPCAO'.
read -n1 -p 'Opção: ' OPCAO
# Insere uma nova linha
echo
# Lê o número armazenado na variável 'OPCAO' e executa a opção correspondente.
case $OPCAO in
1) # Opção 1
# Executando os comandos...
echo "Você está estudando Java."
# Finaliza o menu
break
;;
2) # Opção 2Selecione a linguagem que está estudando.
1) Java
2) Shell Script
3) C++
4) Sair
#? 9
Opção seleciona é inválida.
#?
# Executando os comandos...
echo 'Você está estudando Shell Script.'
# Finaliza o menu
break
;;
3) # Opcao 3
# Executando os comandos...
echo 'Você está estudando C++.'
# Finaliza o menu
break
;;
4) # Finalizar script
echo 'Saindo...'
exit 0
;;
*) # Opção inválida. (nenhuma das opções anteriores).
# O comando break não é executado para que o fluxo do script
# permaneça preso ao menu, forçando o usuário a selecionar uma
# opção válida.
# Imprimindo mensagem de erro.
echo 'Opção seleciona é inválida.'
echo
;;
esac
done
echo 'Continuando a execução...'
Vou executar o script e testar as opções do menu, selecionando a opção '2'.
$ ./menu1.sh
Selecione a linguagem que está estudando.
1 - Java
2 - Shell Script
3 - C++
4 - Sair
Opção: 2
Você está estudando Shell Script.
Continuando a execução...
Selecione a linguagem que está estudando.
1 - Java
2 - Shell Script
3 - C++
4 - Sair
Opção: 2
Você está estudando Shell Script.
Continuando a execução...
Como a opção informada é valida, o script executa os comandos referente a opção imprimindo a mensagem, interrompe o loop finalizando o menu e continuando o fluxo do script.
Vou informar uma opção que não existe para ver a se mensagem de erro é exibida.
$ ./menu1.sh
Selecione a linguagem que está estudando.
1 - Java
2 - Shell Script
3 - C++
4 - Sair
Opção: 7
Opção seleciona é inválida.
Selecione a linguagem que está estudando.
1 - Java
2 - Shell Script
3 - C++
4 - Sair
Opção:
Selecione a linguagem que está estudando.
1 - Java
2 - Shell Script
3 - C++
4 - Sair
Opção: 7
Opção seleciona é inválida.
Selecione a linguagem que está estudando.
1 - Java
2 - Shell Script
3 - C++
4 - Sair
Opção:
Não só a mensagem de erro foi retornada, como apresentou novamente o menu para que o usuário informasse uma opção válida. A omissão do comando break na opção '*' na estrutura do case, impede que script finalize o menu e continue a execução quando uma opção inválida é selecionada.
Selecionando a opção sair (finalizar script).
$ ./menu1.sh
Selecione a linguagem que está estudando.
1 - Java
2 - Shell Script
3 - C++
4 - Sair
Opção: 4
Saindo...
Selecione a linguagem que está estudando.
1 - Java
2 - Shell Script
3 - C++
4 - Sair
Opção: 4
Saindo...
Retornou a mensagem informando ao usuário que está finalizando o script e executa o comando exit, interrompendo o processo de execução do mesmo.
2. Exemplo
Neste exemplo vou utilizar uma comando especifico para essa finalidade, que é o comando select, que seleciona palavras de uma lista e executa comandos.
select NOME [in PALAVRAS ... ;] do COMANDOS; done
Sua sintaxe é semelhante ao comando for, porém as palavras são expandidas, gerando uma lista de palavras. O conjunto de palavras é precedido de um número. Se a linha consiste do número correspondente a uma das palavras exibidas, então a variável NOME recebe aquela palavra. Se a linha for vazia, PALAVRAS e o prompt são reexibidos. Comandos são executados após cada seleção até que um comando break seja executado.
Para montar a estrutura do menu utilizei os seguintes comandos:
Comando | Qual será a sua função ? |
---|---|
select | Lê as opções do menu |
break | Finaliza o menu |
case | Verifica a opção selecionada. |
O menu mantém as opções do exemplo anterior.
Script: menu2.sh
#!/bin/bash
clear
echo 'Selecione a linguagem que está estudando.'
# Lê as palavras expandidas, criando as opções do menu enumeradas.
select OPCAO in 'Java' 'Shell Script' 'C++' 'Sair'
do
# Lê o número armazenado na variável 'OPCAO' e executa a opção correspondente.
case $OPCAO in
'Java') # Opção 1
# Executando os comandos...
echo "Você está estudando Java."
# Finaliza o menu
break
;;
'Shell Script') # Opção 2
# Executando os comandos...
echo 'Você está estudando Shell Script.'
# Finaliza o menu
break
;;
'C++') # Opcao 3
# Executando os comandos...
echo 'Você está estudando C++.'
# Finaliza o menu
break
;;
'Sair') # Finalizar script
echo 'Saindo...'
exit 0
;;
*) # Opção inválida. (nenhuma das opções anteriores).
# O comando break não é executado para que o fluxo do script
# permaneça preso ao menu, forçando o usuário a selecionar uma
# opção válida.
# Executando os comandos..
echo 'Opção seleciona é inválida.'
echo
;;
esac
done
echo 'Continuando a execução...'
clear
echo 'Selecione a linguagem que está estudando.'
# Lê as palavras expandidas, criando as opções do menu enumeradas.
select OPCAO in 'Java' 'Shell Script' 'C++' 'Sair'
do
# Lê o número armazenado na variável 'OPCAO' e executa a opção correspondente.
case $OPCAO in
'Java') # Opção 1
# Executando os comandos...
echo "Você está estudando Java."
# Finaliza o menu
break
;;
'Shell Script') # Opção 2
# Executando os comandos...
echo 'Você está estudando Shell Script.'
# Finaliza o menu
break
;;
'C++') # Opcao 3
# Executando os comandos...
echo 'Você está estudando C++.'
# Finaliza o menu
break
;;
'Sair') # Finalizar script
echo 'Saindo...'
exit 0
;;
*) # Opção inválida. (nenhuma das opções anteriores).
# O comando break não é executado para que o fluxo do script
# permaneça preso ao menu, forçando o usuário a selecionar uma
# opção válida.
# Executando os comandos..
echo 'Opção seleciona é inválida.'
echo
;;
esac
done
echo 'Continuando a execução...'
Mesmo utilizando o comando select, o uso do case é necessário para avaliar o valor armazenado na variável. Ele cria um menu com as opções enumeradas, inserindo um prompt de entrada, para que o usuário informe a opção deseja. Quando o usuário informa o número, a variável recebe o nome da opção ao invés do número; por essa razão,os nomes são avaliados no case.
Vamos testar o script, selecionando a opção 2.
./menu2.sh
Selecione a linguagem que está estudando.
1) Java
2) Shell Script
3) C++
4) Sair
#? 2
Você está estudando Shell Script.
Continuando a execução...
Selecione a linguagem que está estudando.
1) Java
2) Shell Script
3) C++
4) Sair
#? 2
Você está estudando Shell Script.
Continuando a execução...
O '#?' é o prompt de entrada do comando select, que lê o número da opção.
Ao informar o valor '2', a variável OPCAO recebe a expressão 'Shell Script' que por sua vez é lida e avaliada pelo case.
Escolhendo uma opção inválida.
Selecione a linguagem que está estudando.
1) Java
2) Shell Script
3) C++
4) Sair
#? 9
Opção seleciona é inválida.
#?
1) Java
2) Shell Script
3) C++
4) Sair
#? 9
Opção seleciona é inválida.
#?
No caso de uma opção inválida, imprime a mensagem de erro e reexibe o prompt.
Essa foi uma simples demonstração de como criar um menu textual sem complicações. No lugar do case, você pode utilizar o 'if' para avaliar as opções; particularmente não recomendaria; porque dependendo da quantidade de itens, você teria que aninhar if's atrás de else if's e cai entre nós; isso tudo para um simples menu ?
Comentários
Postar um comentário