Busca

Visite também: UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 



 

Aprenda inglês em casa

Baixe gratuitamente as duas primeiras aulas

English for Reading and Listening

Receba por email, diariamente, mensagens contendo materiais para leitura e audição, incluindo arquivos no formato MP3 gravados por falantes nativos.

Saiba mais e faça sua inscrição

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

Versão para impressão
  • Currently 3.10/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.1 /5 (157 votos)

Artigos Publicados


Linux Shell Script em Newsgroup

Servidor: news.gmane.org

Grupo: gmane.org.user-groups.programming.shell.brazil


Para se manter atualizado sobre as novidades desta coluna, consulte sempre o newsfeed RSS

Cantinho do Shell NewsFeed RSS

Para saber mais sobre RSS, leia o artigo O Padrão RSS - A luz no fim do túnel.


Opinião dos Leitores

Stefan da Silva Billieri
25 Jul 2007, 12:58
Ótima dica. Eu freqüentemente uso cores nos scripts, pois a saída fica mais legível.

Concordo com o Mascarenhas: o uso de variáveis no lugar do "hard code" é melhor por diversos motivos; um deles: pode-se unset as variáveis caso for conveniente desabilitar os recursos do terminal.

Eu acho + prático:

echo -e "\e[32;5;1m PISCANDO \e[m"

E se o bash estiver configurado com:
shopt -s xpg_echo

echo "\e[32;5;1m PISCANDO \e[m"

é o suficiente, dispensando o uso da opção -e .
Marisete Alves de Oliveira
22 Jul 2007, 15:42
Olá!
Obrigada pela "dica"!
Gostaria de obter "dicas" também de inglês instrumental. O que fazer?
Já enviei mensagem oculta.
Obrigada!
Marisete
Jose Fernando Scheid Mascarenhas
20 Jul 2007, 19:59
Incluir caracteres de controle no corpo de um shell script, apesar de funcionar, não é uma boa pratica. Podem ocorrer problemas em determinados editores ou mesmo "endoidar" a impressora ao tentarmos imprimir o script.

O mais correto e utilizar a opção -e do comando echo e informar valor octal do caractere ESCAPE da seguinte forma:

echo -e "\033[7m TESTE REVERSO \033[m"

ou se preferir:

ESC="\033"
echo -e "${ESC}[7m TESTE REVERSO{ESC}[m"

Porém, se você estiver no polo norte, sentado em frente a um terminal WYSE-60 (o primeiro terminal a gente nunca esquece), ligado à um servidor Linux na porta COM1, à incrível velocidade de 38400 bps, seu script irá falhar.

Para torna-lo portável utilize o comando tput para buscar as características, específicas de cada terminal no banco de dados TERMINFO.

Assim sendo o script ficaria:

VREV=`tput rev` # Reverso
VNOR=`tput sgr0` # Normal
VPIS=`tput blink` # Sublinhado
VBRI=`tput bold` # Escuro
FVMO=`tput setab 1` # Fundo vermelho
CVMO=`tput setaf 1` # Caracter Vermelho
....
....
....
echo "${VREV} REVERSO ${VNOR}"
echo "${VPIS} PISCANTE ${VNOR}"
echo "${VREV}${VPIS} REV E PISCANTE ${NOR}"

Tanto você quanto os esquimós ficarão felizes para sempre.



fernando.scheid @ G M A I L . C O M
*Nome:
Email:
Me notifique sobre novos comentários nessa pagina
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script

Recomende este site
Recomendar este artigo