Como criar menus com o comando SELECT em Shell Script
Criar menus com Select em Shell Script
Neste tutorial mostro como podemos usar o comando SELECT no Linux para criar menus interativos em Shell Script para que o usuário possa ver e escolher uma opção específica em uma lista, que executará uma função programada qualquer.
Este comando se trata de uma construção de loop que exibe um menu numerado e aguarda a seleção do usuário para executar um código especificado.
Sintaxe
A sintaxe básica do comando SELECT é a seguinte:
select ITEM in [LISTA] do [COMANDOS] done
Onde LISTA pode ser uma sequência de strings separadas por espaços, a saída de um comando, um intervalo numérico, um array, etc.
Podemos criar um prompt personalizado para o menu select usando a variável de ambiente PS3.
Quando o bloco select é executado, cada item da lista é mostrado na tela, precedido por um número sequencial de identificação (“número do item”).
Quando o usuário digita um desses números (“escolhe um item”), esse valor é armazenado na variável REPLY, e o valor da variável ITEM recebe o item.
Um bloco de código pode ser associado a cada item que for escolhido, e será executado nesse momento. O select então realiza um loop e exibe novamente o menu, até que um comando break seja executado, encerrando o processo.
Exemplos
Vejamos um exemplo simples.
Exemplo 01
#!/bin/bash PS3="Escolha um número: " select autor in Asimov Clarke Herbert 'H. G. Wells' Tolkien Verne do echo "Autor escolhido: $autor" echo "Número digitado: $REPLY" done
Saída:
Este script irá exibir um menu que consiste nos nomes de autores com um número associado e o prompt definido na variável PS3. Quando o usuário digita um dos números, será impresso na tela o autor correspondente e seu número respectivo.
Note que o autor H. G. Wells foi colocado entre aspas, pois como o espaço é usado como separador de itens pelo select, seu nome (que contém espaços) seria interpretado de forma incorreta ao exibir o menu.
Para encerrar esse programa é necessário pressionar Ctrl+C, pois ainda não programamos uma rotina de saída com a instrução break, o que faremos no próximo exemplo.
Exemplo 02
No exemplo a seguir vamos criar um menu com opções de gerenciamento de pacotes que o usuário pode escolher, incluindo atualização das listas de repositórios, instalação de pacotes no sistema e manutenção do cache:
PS3="O que deseja fazer? " select opcao in Atualizar Instalar 'Ver Cache' 'Limpar Cache' Sair do case $opcao in Atualizar) sudo apt update ;; Instalar) read -p "Qual pacote deseja instalar? " pacote sudo apt install $pacote ;; 'Ver Cache') ls /var/cache/apt/archives/ ;; 'Limpar Cache') sudo apt clean ;; Sair) break ;; *) echo "A opção $REPLY é inválida" ;; esac done
Neste exemplo usamos uma estrutura CASE para programar cada caso que o usuário pode vir a escolher, e incluímos uma opção para sair do menu e uma opção para tratar a escolha de um valor inválido, usando a variável de ambiente $REPLY.
Conclusão
Neste tutorial mostrei como usar, de forma simples, o comando “select” para criar menus interativos em Shell Script. Outras opções existem para esta tarefa, como as caixas de diálogo “dialog” e “whiptail“, e o emprego de bibliotecas externas como “ncurses”, “newt” e “zenity“, entre outras, que são abordadas em outros tutoriais aqui no site.
Escreva um comentário