Menu em bash

Publicado por Perfil removido (última atualização em 23/04/2013)

[ Hits: 4.675 ]

Download menu-001.sh




Um "pretenso" sistema de menu nostálgico 100% em bash script.

Podem ser incluídos novos menus.
Serve para usar em uma agenda em bash, por exemplo.

Necessita de suporte a unicode no terminal.
Favor verificar.

Obs. [1]: Gostaria de saber se existe algo semelhante (ou melhor) feito (sempre há). Me poupará trabalho.
Obs. [2]: Se estiver tudo OK, funcionará com as setas do teclado (--> e <-- ). Gostaria também de descobrir em quais casos isto falhará em outras máquinas.

  



Esconder código-fonte

#!/bin/bash 

moldura() {

   LI=$1
   CI=$2
   LF=$3
   CF=$4

   CC=$5
   SW=$6


   ESC="{FONTE}33["
   BOX=(2552 2550 2555 2502 2519 2501 2515 2502)
#          ╒   ═     ╕    │    ┙   ━     ┕    │
#          0   1     2    3    4   5     6    7
   PLANO=2592;
#          ▒


   echo -ne "$ESC""$CC"

   echo -ne "$ESC$LI;$CI""H""\u${BOX[0]}"
   echo -ne "$ESC$LI;$CF""H""\u${BOX[2]}"
   echo -ne "$ESC$LF;$CF""H""\u${BOX[4]}"
   echo -ne "$ESC$LF;$CI""H""\u${BOX[6]}"

   for ((coluna=$CI+1;coluna<=$CF-1;coluna++)); do
      echo -ne "$ESC$LI;$coluna""H""\u${BOX[1]}"
      echo -ne "$ESC$LF;$coluna""H""\u${BOX[5]}"
   done

   for ((linha=$LI+1;linha<=$LF-1;linha++)); do
      echo -ne "$ESC$linha;$CI""H""\u${BOX[3]}"
      echo -ne "$ESC$linha;$CF""H""\u${BOX[7]}"
   done

   echo -ne "$ESC""$SW"

   for ((coluna=$CI+2;coluna<=$CF+2;coluna++)); do
      echo -ne "$ESC$((LF+1));$coluna""H""\u$PLANO"
   done

   for ((linha=$LI+1;linha<=$LI+2;linha++)); do
      echo -ne "$ESC$linha;$((CF+1))""H""\u$PLANO""\u$PLANO"
   done


}

TECLA=("\x1b\x5b\x41" "\x1b\x5b\x42" "\x1b\x5b\x43" "\x1b\x5b\x44" "\x0a")

for i in {0..4}; do
   TECLA[$i]=`echo -ne ${TECLA[$i]}`
done


ESC="{FONTE}33["

LIN=(3 3 3 3 3 21 0)
COL=(12 24 36 48 60 26)


TELA="$ESC"'44m'
COR=('0m' '22m' '8m' '1;25;27;33;44m' '1;5;27;37;41m' '1;25;27;36;44m' '1;37;44m' '1;30m')


opcao[0]="Inclusao";
opcao[1]="Alteracao";
opcao[2]="Exclusao";
opcao[3]="Consulta";
opcao[4]="Sair";

mess[0]="   Realiza uma inclusão   ";
mess[1]="   Realiza uma alteracao  ";
mess[2]="   Realiza uma exclusao   ";
mess[3]="   Realiza uma consulta   ";
mess[4]="      Sai do programa     ";


echo -ne "$TELA"

clear

moldura 2 4 4 76 "${COR[6]}" "${COR[7]}"
moldura 20 20 22 60 "${COR[6]}" "${COR[7]}"

op=0
cor=0
tecla="";

while true; do

   tecla=""

   for i in {0..4}; do
      COORD="$ESC${LIN[$i]};${COL[$i]}H"
      C_MESS="$ESC${LIN[5]};${COL[5]}H"
      [[ i -eq op ]] && cor=4 || cor=3;
      echo -ne "$ESC${COR[$cor]}""$COORD""${opcao[$i]}"
      echo -ne "$ESC${COR[5]}""$C_MESS""${mess[$op]}"

   done

   read -s -p "" -n 3 tecla;

   if [[ "$tecla" == "${TECLA[2]}" ]]; then
      let op++
      let op%=5;
   elif [[ "$tecla" == "${TECLA[3]}" ]]; then
      let op--
      let op%=5
   fi;

   [[ op -lt 0 ]] && let op+=5

   [[ "$tecla" = "" && op -eq 4 ]] && break


done;

echo -e "\n$ESC${COR[0]}"

Scripts recomendados

Atualização Multilib no Slackware

Make Luks

Script para ripar CDs de audio e codificar as faixas para MP3

Avisar quando partição estiver 90% ocupada

DioPSI - Script multidistro para instalar programas


  

Comentários
[1] Comentário enviado por iagolira em 12/08/2016 - 22:11h

muito bom :)
Nome: Francisco Iago Lira Passos
Curso: Mestrando em Física

[2] Comentário enviado por leeloolinux em 05/04/2024 - 20:27h

Caraca!!!
E eu fazendo menuzinhos meia boca...
Vou levar uns dias para conseguir entender isso...
Parabens, achei lindo, fantastico!!!!



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts