você está aqui: Home  → Colunistas  →  Cantinho do Shell

 

Usando cores e formatação em shell scripts

Por Angelo Roberto Bonfieti Junior

Data de Publicação: 20 de Julho de 2007

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

Recomende este artigo nas redes sociais

 

 

Veja a relação completa dos artigos desta coluna