Este artigo nos apresenta ao Piano Gripe 3, um shell script criado por mim totalmente em bash e que usa muitos caracteres de controle. Quer aprender a colocar cores nos seus scripts? Mover o cursor do console e editar textos onde quiser da tela? Controlar os sons do beep do seu gabinete? Leia este artigo.
Quando comecei a estudar shell script decidi fazer um programa
completo, com manual, site e tudo. Vi que muito pouco se
falava sobre caracteres de controle nas documentações de shell
e resolvi fazer o meu programa de estudo, utilizando bastante
caracteres de controle.
O nome do programa é Piano Gripe. Para acessá-lo, visite:
O código fonte do programa tem comentários ensinando a trabalhar com os
caracteres. Aqui estou copiando e colando diretamente dos comentários do fonte.
Iniciando:
Caracteres de controle em shell script, possibilita muitas coisas. Vou descrever
as 3 que mais gosto. Todo o texto está retirado de comentários;
######### CONSEGUINDO TIRAR SONS DO BEEP PELO COMANDO ECHO #################
#
# Para conseguir um som do speaker do seu computador, basta utilizar o
# caractere barra-letra \a (ALERTA). Se você digitar echo -ne '\a', vai
# ver que um beep soará. Basta agora você definir o tom e duração
# do beep. Para isso, use:
#
# echo -ne '\033[10;N1]\a' -> onde N1 é a freqüência. Quanto maior o
# valor da freqüência (Hz), mais agudo a nota
# sairá. Quanto menor for o valor, mais grave.
# echo -ne '\033[11;N1]\a' -> onde N1 é a duração do som.
# __________________________________________
# ---> O normal é \033[10;750] e \033[11;100] <---
#
# OBS1: Depois de brincar com o seu beep, não esqueça de voltar para os
# valores normais do beep.
#
# DICA: Defina a duração antes de definir o tom.
# ex: echo -ne '\033[11;500]\033[10;1000]\a'
# (Defina duração 500, defina tom 1000, toque um beep com \a)
#
# OBS2: Esse caractere de controle do beep, não toca um beep, ele apenas
# define o tom e duração. Quem toca o beep é o "\a", entre outras
# formas.
OBS: O piano é todo feito assim, os sons são tirados dessa forma. Eu sou
"músico" e tirei as freqüências verdadeiras de um instrumento musical. O mesmo
dó do piano, é o dó de qualquer instrumento.
##### APRENDENDO A MODIFICAR A POSIÇÃO DO CURSOR ############################
#
# 1) Sempre que você ver um "VAIPARA N1 N2", quer dizer que o cursor muda
# da linha atual, para a linha N1 e coluna N2. Exemplo: VAIPARA 1 1 ->
# Nesse caso o cursos vai para a linha 1 e coluna 1. Todo "echo" (ou o
# que seja) abaixo desse VAIPARA será inserido na linha 1, coluna 1.
# Aquele aviso inicial do programa, bem centralizado, pq está em uma das
# linhas centrais do monitor, e em uma das colunas centrais também.
# São 25 linhas e 80 colunas. Faça o teste, digite
# echo -e '\33[N1;N2Htexto aqui!' substituindo N1 pela linha e N2
# pela coluna. Existem outros caracteres de controle para indicar a
# direção do cursor, mas o H é o que eu mais gosto :)
function VAIPARA() { echo -ne "\033[$1;$2H" ;} #1
OBS: Foi muito útil ter construído essa função para fazer os gráficos do
programa. Utilize e faça relógios, barras de rolagem (espera), tudo.
##### APRENDENDO A COLORIR TEXTOS ##########################################
#
# Para colorir um texto usando o comando echo, veja a sintaxe:
# echo -e '\033[N1mTexto aqui!\033[m'
#
# Onde: N1 -> Código da cor ou propriedade.
# m -> indica que depois dele começa o texto
# \033[m -> no final do comando para que a cor volte ao normal,
# caso contrário, a cor será definida para os textos
# seguintes.
#
# Código de cores da letra -> vai de 30 a 37
# Código de cores do fundo -> vai de 40 a 47
# Código de propriedades -> 5 (pisca-pisca)
# 7 (cores invertidas)
# 1 (cor brilhante)
# 0 (sem cores)
#
# 1) Para usar um fundo azul com cor da letra vermelho e piscando?
# R: echo -e '\033[44;31;5mTexto aqui!\033[m'
#
# 2) Para usar somente a cor da letra vermelha?
# R: echo -ne '\033[31mTexto aqui!\033[m'
#
# Entendeu? Você vai misturando os números, separando-os com ";".
#
# DICA1: A propriedade 1 (cor brilhante), deve ser usado junto com a cor
# da letra. Em alguns casos, mudam a cor e em outros casos apenas
# deixa a cor da letra mais clara.
#
# DICA2: Teste os códigos das cores e monte uma tabela para consulta :D
# ou use o zzcores do funcoeszz (mão na roda para programadores
# Shell. Pegue em http://aurelio.net/zz)
OBS: Nem se fala nesse ponto. Todo o piano é colorido (até demais).
Bom, espero que todos visitem o site, escreva no livro de visitas,
deixem seus comentários e digam no livro de visitas qual a sua
distribuição e se funcionou bem.
Vou postar depois comentários de outros programas que tenho:
Como fazer aplicações cliente servidor em shell script;
Como usar CGI+Shell para aplicações WEB;
Como fazer sites WAP para celular usando shell script;
[1] Comentário enviado por jose_maria em 11/06/2004 - 19:02h
Gostei muito da sua iniciativa de colocar seu programa em forma de artigo. É muito bom que um software livre tenha uma boa documentação livre.
Eu rodei o programa no Kurumin 3.0, em modo texto, mas os sons não sairam, mesmo utilizando o root. Talvez seja meu pc-speaker que esteja desplugado. Alguem com o Kurumin conseguiu?
[2] Comentário enviado por pablues em 11/06/2004 - 20:56h
Opa
com certeza. Eu testei em Kurumin tbm!
O que você pode tentar tbm é o seguinte: "modprobe pcspkr" . O fedora core 2, não coloca mais essa opção como parte integrada do kernel, por isso temos que carregar o módulo manualmente. Porém, se voce digitar e aparecer uma mensagem do tipo "modulo nao encontrado", é pq ele ja faz parte do kernel e seu beep poderia esta desplugado realmente. Tente provocar um beep no console (tipo digitando backspace varias vezes sem ter textos para apagar), pois se ele tiver ativo, vai funcionar.
Outra coisa que você pode fazer, é setá-lo pra os modos default:
[5] Comentário enviado por pablues em 12/06/2004 - 14:32h
ATENÇÃO 2!!!!!! (HEHEHE)
Descuplem mais uma vez. Ocorreu otura falhinha. Falei com Fábio (responsável pelo portal) e ele Corrigiu os problemas que falei acima. So que agora ficou com outro probleminha:
TODA VEZ QUE VOCÊS VIREM \33 , NA VERDADE É {COMENTARIO}33 (SUBSTITUAM).
SE ALGUEM NÃO ESTIVER CONSEGUINDO FAZER, ME AVISE QUE EU AJUDO :)
[8] Comentário enviado por pablues em 13/06/2004 - 04:13h
O Piano Gripe não pode ser executado em um XTERM. Existe um próprio aviso no inicio do programa e no site falando sobre isso. Os caracteres de controle do beep tbm nao funcionam no modo gráfico.
Execute como diz o aviso no começo do programa em modo texto e se for estudar caracteres de controle, escolha preferencialmente o modo texto (principalmente para os beeps)
[10] Comentário enviado por pablues em 13/06/2004 - 16:03h
Certo,
Deve ser algo da distribuição. Ele so foi testado por mim em Fedora Core 1, Fedora core 2, Red Hat 9, Coenctiva Linux 8, Conectiva linux 9, e outros usuários da internet aprovaram a execução em Debian (nao sei exatamente que versão), Mandrake e slackware.
qual a sua distro? você poderia fazer o download novamente no site, e tentar de novo, so pra ter a certeza do erro? (wget http://cltfc.sites.uol.com.br/gripe
Se der o erro, faça o seguinte:
1) Execute o gripe assim:
./gripe 2> erros
E depois coloque o conteúdo desse arquivo erros aqui pra eu poder dizer qual o problema e corrigir
[12] Comentário enviado por pablues em 14/06/2004 - 23:46h
tente digitar assim:
bash gripe
para ele forçar usar o bash como interpretador padrão....
voce tem o bash instalado? (acredito que sim)
voce fez o download novamente? wget http://cltfc.sites.uol.com.br/gripe
Qualquer duvida quanto a criar seus prórpios caracteres de controle, quanto ao piano gripe, me avise que eu explico ou tento resolver o problema.
[13] Comentário enviado por removido em 15/06/2004 - 23:01h
eis o que ocorre quando digitei
bash gripe
gripe: line 191: : command not found
gripe: line 192: : command not found
gripe: line 199: : command not found
gripe: line 204: : command not found
gripe: line 205: : command not found
gripe: line 207: : command not found
gripe: line 208: : command not found
gripe: line 215: : command not found
gripe: line 225: : command not found
gripe: line 251: : command not found
gripe: line 276: : command not found
gripe: line 277: : command not found
gripe: line 279: : command not found
gripe: line 280: : command not found
gripe: line 288: : command not found
gripe: line 301: : command not found
gripe: line 303: : command not found
gripe: line 304: : command not found
gripe: line 306: : command not found
gripe: line 307: syntax error near unexpected token `{'
gripe: line 307: `function MARKNOTAUP() {'
se tenho o bash, não sei, instalei o slack 9.0 e não devo ter mexido em algo errado, além do kernel, de ter desisntalado o mozilla, netscape, fwmv, icewm, blackbox e outras interfaces graficas o que não geraria tal erro por ser na console...
[14] Comentário enviado por pablues em 16/06/2004 - 09:49h
essas linhas que deu erro, são linhas em branco no fonte do Piano Gripe. Sinceramente, não sei pq está assim no seu computador, pq eu mesmo testei no slackware 9.1 e o 9.0 provavelmente deve ser a mesma coisa :/
Desculpe mas agora realmente não sei... se você tiver oportunidade de testar em outro computador (com slackware mesmo para testarmos ou com outra distro), ai você me fala se conseguiu.
[17] Comentário enviado por removido em 17/06/2004 - 14:09h
vai demorar um pouco, meu micro resolveu ter um probleminha de video/placa...
O kurumin não entra em modo texto, já alterei o inittab mas não deu..
Depois, outra hora tento..
A luta continua companheiro...
[18] Comentário enviado por hra em 01/06/2005 - 13:56h
Muito legal esse script.
É exatamente isso que está faltando nos usuários linux brasileiros, mostrar essa inovação, mesmo nas pequenas coisas, mesmo que só por diversão, só pra ver se é possível fazer mesmo.
Tenho certeza que o brasil está cheio de gente capaz de fazer coisas geniais como essa, mas fica tudo escondido no hd e depois de um tempo desaparece.
Os programadores tem a tendencia de só mostrar os grandes projetos, e esconder os pequenos programinhas de aprendizado, como se os pequenos programas fossem inuteis.
Esse tipo de programa é incrivelmente didático, muito util para os autodidatas.
Um bom código fonte vale mais que mil tutoriais.
Obs: coloca o script na seção de scripts e posta o link no comentário, evita os problemas de conversão de texto do engine do vol.
[24] Comentário enviado por MMinguante em 15/09/2017 - 11:07h
Bacana esse guia, Pablo!
Estou começando a utilizar software livre e querendo pôr a mão na massa na base de dados. Ainda estou aprendendo bastante e é bom ter um material como o seu pra eu começar a mexer nos comandos de caracteres. Obrigado mesmo por disponibilizar esse material!
Estou lendo uns tutoriais e encontrei coisas mais avançadas, como esse da Hostinger (https://www.hostinger.com.br/tutoriais/como-gerenciar-processos-no-linux-usando-linha-de-comando/) de como gerenciar processos no Linux usando comandos. Tem me ajudado bastante e acredito q possa ajudar mais usuários!