04 setembro 2008

Shellscripts - usando cores e formatação em shell Scripts

Já se deparou com a necessidade (ou vontade) de destacar texto ou simplesmente fazer o output do seu script tornar-se visualmente chamativo ?

Normalmente programadores (especialmente em shell script) não adotam isso por gostarem do texto puro, da linha de comando. Telinha preta :)

Todavia, se você é daqueles que acredita que seus scripts podem ficar melhores com alguma "cosmética", acredite, eles ficam mesmo. Pelo menos visualmente.

Inserir cores e diferenciar texto pode ser interessante quando você quiser destacar um erro, evidenciar diferenças ou, simplesmente, chamar à atenção para algo importante.

Sendo assim, aqui vai uma dica para inserir cores em um script (ou texto):

Essa dica foi testada em vi e funciona legal em terminais que suportam o formato ANSI. Basta que você adicione uma certa sequência ao comando echo para alcançar seu objetivo.

A sintaxe genérica é:

  echo "^[[#m<texto>"


Onde: ^[ é um caracter especial produzido pressionando Crtl-v e, em seguida, Esc;



O hash (#) é substituído por um número, dependendo do tipo de efeito que voce pretende adicionar ao seu texto;



O segundo [ e a letra m são caracteres normais;



Sendo assim, a sequencia



  echo "^[[33mTestando apenas^[[0m"


ira mostrar o texto Testando apenas em amarelo



Enquanto a sequencia:



  echo "^[[31m^[[1mTestando apenas^[[0m"


ira mostrar o texto Testando apenas em vermelho e negrito (um vermelho um pouco mais forte)



Para imprimir o resultado de uma variável, basta definí-la corretamente e não permitir que o comando echo a interprete. Assim, segue um exemplo de como imprimir a variável TESTE com fundo azul, texto vermelho, negrito e sublinhado:



  TESTE="Testing Only"
echo "^[[4m^[[1m^[[44m^[[31m${TESTE}^[[0m"


Neste exemplo, alem de formatar o texto, também delimitei o início e fim do nome da variável com {} - isso para evitar qualquer erro de interpretação pelo echo e pelos caracteres especiais.



Note que eu sempre termino com a sequencia ^[[0m. Esse é o código passado ao echo que irá retornar seu cursor ao estado "normal", ou seja, como estava previamente (sem cores).



Abaixo anexo uma pequena tabela C de várias cores e formatos. Existem mais códigos, mas esse são os que eu mais utilizo. Sugiro que, se houver tempo e disposição, você descubra as outras combinações e possibilidades... ;)





Tabela de códigos:





CORES DE TEXTO



PRETO 30



VERMELHO 31



VERDE 32



AMARELO 33



AZUL 34



MAGENTA 35



CIANO 36



BRANCO 37



CORES DE FUNDO



PRETO 40



VERMELHO 41



VERDE 42



AMARELO 43



AZUL 44



MAGENTA 45



CIANO 46



BRANCO 47



MODOS ANSI



NORMAL 0



NEGRITO 1



BAIXA INTENSIDADE 2



ITALICO 3



SUBLINHADO 4



PISCANDO 5



PISCA RAPIDO 6



INVERSO 7



INVISIVEL 8





Note que alguns comandos nativos do Unix, como cat e pg, por exemplo, já mostram o resultado formatado, ou seja, colorido. Outros comandos, como more irão mostrar o código completo. O interessante, aqui, é notar que no último exemplo (com variável), o cat naquele script exibira:



  TESTE="Testing Only"
echo "${TESTE}"


Onde o texto ${TESTE} já será mostrado colorido.



Mas note também que um simples (e famoso) Crtl-c dessa sequência, seguido de Ctrl-v no vi não irá funcionar. Isso porque os caracteres ^[ são especiais e não um texto puro. Assim, é necessário que eles sejam "passados" para o vi como tal... copiar o arquivo, ou fazer um cat dele direcionar a saida para outro arquivo, no entanto, funcionam perfeitamente.





FONTE: Cantinho do Shell - http://www.dicas-l.com.br/cantinhodoshell

Postar um comentário