Menu em bash
Publicado por Perfil removido (última atualização em 23/04/2013)
[ Hits: 4.940 ]
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]}"
DELETAR arquivos a X semanas passadas
NetProfiler - Um solução para quem passeia por várias redes.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
How can I remove duplicate MSG files from my folders effectively? (0)
O programa assinador digital (0)
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)









