Bóson Treinamentos em Ciência e Tecnologia

Como criar menus com o comando SELECT em Shell Script

Como criar menus com o comando SELECT em shell script no Linux

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.

 

Sair da versão mobile