Este artigo foi retirado do site Dicas-L
http://www.dicas-l.com.br:
Colaboração: Angelo Roberto Bonfieti Junior
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"
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 INTENSID |
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.
Boa programação e boa diversão :)