Menu em bash
Publicado por Perfil removido (última atualização em 23/04/2013)
[ Hits: 4.829 ]
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.
#!/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]}"
Cracking protocolo WPS aprimorado
Troca de imagem da tela de bloqueio de usuário no Linux Mint MATE
Baixar fontes em massa utilizando o terminal Linux
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
Zorin OS - Virtual Box não consigo abrir maquinas virtuais (1)
O que você está ouvindo agora? [2] (180)