Menu em bash

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

[ Hits: 3.186 ]

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

tint2 bar config

tira_usb.sh - Remover dispositivo USB

Log do Squid em terminal

Escrever números, datas, horas e outros por extenso

Corrigir nome dos arquivos pelo Nautilus


  

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


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts