Piano Gripe 3 - Caracteres de controle

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.

[ Hits: 20.211 ]

Por: Pablo Fernandes em 11/06/2004


Piano gripe e shell script



Olá amigos!

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:
Aqui temos uma screenshot dele:


Clique para ampliar

Tudo isso é shell com caracteres de controle.

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;
  • Manipular conteúdos direto da internet;
  • Como acessar banco de dados;
  • E muitos outros.

Até mais a todos!

[]'s
Pablo Fernandes

   

Páginas do artigo
   1. Piano gripe e shell script
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Brincando com pseudoterminais e redirecionamentos

Simples sistema de backup com acesso remoto

Receba seu IP externo via e-mail ou ensine o bash a ler e enviar e-mails

Conheça o projeto BASHSRC

Aprendendo a melhorar os seus scripts

  
Comentários
[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?

Valeu cara!

[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:

echo -ne '{COMENTARIO}33[10;750]{COMENTARIO}33[11;250]\a'

[3] Comentário enviado por pablues em 11/06/2004 - 20:58h

o que saiu {COMENTARIO} subsitua por uma barra -> \

Na verdade eu digitei uma barra igual a essa, mas por configuração do vivaolinux ele substituiu por {COMENTARIO} :) deve ter sido um Bugzinho :D

[4] Comentário enviado por pablues em 12/06/2004 - 09:31h

ATENÇÃO!!!!!!!!!!!!!

Caros amigos, em todo o Artigo, tudo que tem {TEXTO} ou {QUALQUERCOISA} SUBSTITUA POR UMA \

ALGUM MECANISMO DO VIVAOLINUX SUBSTITUIU TODAS AS BARRAS \ ENTRE ' ' POR {TEXTO} OU {COMENTARIO} .

[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 :)

[]'s
Pablo Fernandes

[6] Comentário enviado por pablues em 12/06/2004 - 14:35h

Poxa, esta trocando toda hora :( . Vou tentar mais uma vez: Toda vez que virem \33 na verdade é \ 0 3 3 (barra,zero,três,três)

é uma pena não conseguir nem explicar o erro.

[7] Comentário enviado por removido em 12/06/2004 - 21:40h

Nâo se pode nem abrir um terminal no X pra executar? Pois no momento (agora) fiz assim e não executa, diz que:

bad interpreter: Arquivo ou diretório não encontrado

e ele está lá....

[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)

[]'s
Pablo Fernandes

[9] Comentário enviado por removido em 13/06/2004 - 12:34h

sem stress, eu li as instrucoes. é que na hora eu estava no kde, porém depois que eu sai do kde rodei o arquivo na console e deu o mesmo erro...

[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

Muito Obrigado
Pablo Fernandes

[11] Comentário enviado por removido em 14/06/2004 - 22:01h

olha só:

digitei:
./gripe
retornou:
:bad interpreter: arquivo ou diretorio nao encontrado

coloquei o arquivo dentro do /home e digitei dali mesmo..estou usando um slack 9.0

[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.

[]'s
Pablo Fernandes

[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.

Obrigado
Pablo Fernandes

[15] Comentário enviado por removido em 16/06/2004 - 15:34h

claro, vou testar no kurumin e no kalango, pois tenho essas 2 junto com o slack, depois te dou o retorno...

[16] Comentário enviado por removido em 16/06/2004 - 15:42h

ahh e eu testei nos 2 kereis que tenho na maquina, 2.4.20 e 2.4.22

[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.


Parabéns

[19] Comentário enviado por mailws em 11/11/2005 - 20:23h

Gostei muito dessa idéia. Isso da possibilidade para construir programas, em MIDI para serem usados no Linux.

[20] Comentário enviado por x em 17/10/2006 - 21:01h

ow muito massa esse script brother !!!!!!
Parabéns !

[21] Comentário enviado por nickmarinho em 19/01/2007 - 13:24h


Adorei o script, estou testando aqui no meu Gentoo pra ver se funciona como mencionado, abraço.

http://www.lucianomarinho.com.br/
http://www.racaboxer.com.br/

[22] Comentário enviado por CerberusBH em 10/03/2008 - 02:04h

Tenho executado o programa em Slackware 12 sem nenhum problema.
Parabéns!

[23] Comentário enviado por j3f1nh0 em 21/11/2011 - 16:48h

Pow cara, esse artigo seu é excelente! Agora sim comsegui compreender esses caracteres de controle, nem tem tanto segredo assim. Muito obrigado!

[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!





Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts