Muitos terminais unix podem reconhecer alguns (mas geralmente não todos) códigos Ansi Escape
Assim, você pode usá-los (os que funcionam no seu terminal) para alterar a exibição conforme necessário.
Um exemplo muito simples (eu uso o printf como ele é portátil em muitos shells diferentes (e antigos!)):
export _norm_="$(printf '3[0m')" #reset "everything" to normal
export _bold_="$(printf '3[1m')" #set bold
export _rred_="$(printf '3[0;1;5;31m')" #"reverse red"
echo "This is an ${_rred_}ERROR${_norm_} and this is ${_bold_}A WARNING${_norm_}"
Por favor, não estes podem variar dependendo do tipo de terminal (TERM = ...), e do programa que você conecta com aquela máquina (mais notavelmente: reverse pode ficar "piscando" quando usar algum terminal Windows como F- seguro em vez de Putty, por exemplo ..)
Em outras palavras: isso não é totalmente portátil e depende de muitas coisas. Mas "negrito" está sempre funcionando. "reverso" é mais propenso a ser dependente do terminal.
tput
também é melhor para usar, já que está tomando cuidado para descobrir a sequência adequada para o seu terminal, mas nem sempre está disponível (não em máquinas antigas, por exemplo)