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:

Menu com Comando SELECT em shell scripting - exemplo 01

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.

 

Sobre Fábio dos Reis (1192 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*