Postagem em destaque

Criando bot do Telegram em Shell script com ShellBot

Criando menu textual

Os scripts em sua maioria são desenvolvidos para receber argumentos via linha de comando durante sua chamada e que determinam o comportamento do mesmo por todo o processo. Porém, em alguns casos é necessário que o usuário especifique qual ação ou opção é mais adequada para uma determinada tarefa no atual momento e é através do menu textual que essas opções são apresentadas, criando uma interação programa/usuário.

Vou apresentar duas abordagens para criação de menu textuais e quão práticos podem ser.

1. while + case + read

Aplica um loop infinito para manter a exibição constante das opções, enquanto o comando read lê o primeiro caractere digitado que posteriormente é verificado pelo case que executa o bloco equivalente a opção selecionada.

#!/bin/bash

# Loop infinito.
while :; do
    # limpa a tela
    clear

    # Menu
    echo ===== DATA/HORA =====
    echo
    echo '1) Exibir hora.'
    echo '2) Exibir data.'
    echo '3) Sair.'

    # Lê somente o primeiro caractere digitado.
    read -n1 -p 'Opção: ' opc
    echo

    # Verifica o valor armazenado em 'opc' e
    # executa o bloco referente.
    case $opc in
        1)  printf 'Hora: %(%H:%M:%S)T\n';;
        2)  printf 'Data: %(%d/%m/%Y)T\n';;
        3)  break;; # Interrompe o loop e finaliza a exibição do menu.
        *)  echo 'OPÇÃO INVÁLIDA !!'
    esac

    read -p 'Pressione qualquer tecla para voltar...'
done

echo 'Saindo...'

2. select + case

O select (builtin) é um comando especifico para esse tarefa e já acompanha rotinas que substitui algumas das implementações anteriores, entre as quais está o controle de loop para manter o menu ativo e a leitura e atribuição automática da opção selecionada.

#!/bin/bash

# Inicializa um array com as opções do menu.
opcoes=('Exibir hora.' 'Exibir data.' 'Sair.')

# limpa a tela
clear

# Menu
echo ===== DATA/HORA =====
echo

# Lista os elementos contidos em 'opcoes'.
select opc in "${opcoes[@]}"; do

    # Verifica o valor armazenado em 'opc' e
    # executa o bloco referente.

    # Fica armazenado em cada vetor em 'opc' o texto literal da opção e é
    # através do qual é feito a validação.
    #
    # Exemplo:
    #   ${opcoes[0]} = Exibir hora.
    #   ${opcoes[1]} = Exibir data.
    #   ${opcoes[2]} = Sair.
    #
    case $opc in
        ${opcoes[0]})   printf 'Hora: %(%H:%M:%S)T\n';;
        ${opcoes[1]})   printf 'Data: %(%d/%m/%Y)T\n';;
        ${opcoes[2]})   break;; # Finaliza o select.
        *)  echo 'OPÇÃO INVÁLIDA !!'
    esac

    read -p 'Pressione qualquer tecla para voltar...'
done

echo 'Saindo...'

Participe compartilhando a experiência de perguntar e responder questões pertinentes ao shell script, afim de promover a troca de informações e conhecimentos.
Acesse nosso fórum clicando aqui

Comentários

Contato

Nome

E-mail *

Mensagem *