você está aqui: Home  → Arquivo de Mensagens

Cores na tela com o comando tput

Colaboração: Julio Cezar Neves

Data de Publicação: 04 de setembro de 2018

Mais um rápido anúncio, hoje, dia 4 de setembro, às 12h, abrem-se as inscrições para o curso Programação Shell Linux, com o Professor Julio Cezar Neves.

As inscrições ficarão abertas até o dia 14 de setembro ou até o encerramento das vagas disponíveis.

Saiba mais e faça sua inscrição


Podemos colorir a tela usando sequências de escape impossíveis de memorizar seus conteúdos, ou então usando tput setaf para especificar a cor das letras (foreground) e tput setab para especificar a cor de fundo (background).

Os valores de setaf e setab variam de 0 a 7, e 9 é o valor que restaura as cores do fonte e/ou do fundo para seu(s) padrão(ões). Veja seus valores e cores correspondentes na tabela a seguir:

Símbolo Cor
0 Preto
1 Vermelho
2 Verde
3 Amarelo
4 Azul
5 Magenta
6 Ciano
7 Branco
9 Volta a cor default

A seguir tem um programa que você deveria executar para ver todas as possibilidades de combinação de cores de fonte e de fundo usando o comando tput (como já foi dito, existem outras formas, mas essa é a melhor).

$ cat cores1.sh
#!/bin/bash
for ((b=0; b<=7; b++))
{
    tput setab 9; tput setaf 9; echo -n "|"
    for ((f=0; f<=7; f++))
    {
        tput setab $b; tput setaf $f; echo -n " b=$b f=$f "
        tput setab 9; tput setaf 9; echo -n "|"
    }
    echo
}
tput setab 9; tput setaf 9

Os matizes das cores das fontes variam um pouco se a opção tput bold estiver ativa (normalmente a cor com ênfase é um tom mais claro). Execute o programa a seguir que você verá essas diferenças.

$ cat cores4.sh
#!/bin/bash
# cores4.sh - Lista as cores da console com bold
clear
for ((Cor=0; Cor <=7; Cor++))
{
    for Modo in sgr0 bold
    {
        tput $Modo
        tput setaf $Cor
        printf -v Linha "%-$(tput cols)s" "-Em-modo-$([ $Modo = sgr0 ] && echo Normal || echo "Bold ")-"
        sed "s/ /?/g" <<< "$Linha"
    }
    tput sgr0
}

Neste exemplo o printf foi usado para formatar a saída, preenchendo-a com espaços em branco até o tamanho da linha do terminal e jogando-a na variável $Linha (por causa da opção -v). O sed trocou os espaços em branco por este símbolo que preenche todo o espaço destinado a cada letra.

E executando-o aparecerá o seguinte:



Veja a relação completa dos artigos de Julio Cezar Neves