sábado, 9 de março de 2019

Criando menu textual

0 comentários
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...'



Fonte: http://shellscriptx.blogspot.com/2018/04/criando-menu-textual.html

Leave a Reply