Màn hình console thật nhàm chán nếu không có màu sắc. Tuy nhiên để hiển thị được màu sắc đòi hỏi tôi phải nhớ một mớ ký tự escape lộn xộn rắc rối. Vì thế tôi làm script này để khỏi phải quan tâm đến chúng nữa.

Đoạn script sau sinh ra mã escape với những tham số đầu vào là màu chữ (foreground), màu nền (background) là tên 8 màu sắc cơ bản và phiên bản màu sáng hơn của chúng (Thêm tiền tố bright-); và style (bold hoặc underline) nếu có.

/usr/local/bin/color.sh

#!/bin/bash
# color.sh [-f FOREGROUND] [-b BACKGROUND] [-s STYLE] [TEXT]
# @author: Nguyen Hong Hai
#

# colors
BASHFMT_black=0
BASHFMT_red=1
BASHFMT_green=2
BASHFMT_yellow=3
BASHFMT_blue=4
BASHFMT_magenta=5
BASHFMT_cyan=6
BASHFMT_white=7
 
# styles
BASHFMT_bold=1
BASHFMT_underline=4
 
# generate the color code
color()
{
  local p
  local c=${1}
 
  if [[ "${c:0:7}" == 'bright-' ]]; then
    c=BASHFMT_${c:7}
    p=';9'
  else
    c=BASHFMT_${c}
    p=';3'
  fi
  if [ -n "${!c}" ]; then
    echo -n "${p}${!c}"
  fi
}
 
# generate the background code
background()
{
  local p
  local c=${1}
 
  if [[ "${c:0:7}" == "bright-" ]]; then
    c=BASHFMT_${c:7}
    p=';10'
  else
    c=BASHFMT_${c}
    p=';4'
  fi
  if [ -n "${!c}" ]; then
    echo -n "${p}${!c}"
  fi
}
 
# generate the style code
style()
{
  local s=BASHFMT_${1}
  if [ -n "${!s}" ]; then
    echo -n "${!s}"
  else
    echo 0
  fi
}

while getopts ":f:b:s:" o; do
  case "${o}" in
    f )
      FOREGROUND="${OPTARG}"
      ;;
    b )
      BACKGROUND="${OPTARG}"
      ;;
    s )
      STYLE="${OPTARG}"
      ;;
    \? )
      echo "Invalid Option: -${OPTARG}" 1>&2
      exit 1
      ;;
    : )
      echo "Invalid Option: -${OPTARG}requires an argument" 1>&2
      exit 1
      ;;
  esac
done
shift $((OPTIND-1))

TEXT="$@"

echo -e "\e[$(style ${STYLE})$(color ${FOREGROUND})$(background ${BACKGROUND})m${TEXT}\e[0m"

Phân quyền executable cho script.

$ sudo chmod +x /usr/local/bin/color.sh

Cách dùng

color.sh [-f COLOR] [-b COLOR] [-s STYLE] [TEXT]

-f: Màu chữ
-g: Màu nền
-s: Kiểu chữ bold (in đậm) hoặc underline (gạch chân)

Trong đó các màu sắc bao gồm

black    red        green    yellow
blue     magenta    cyan     white

Ngoài ra để màu sáng hơn thì thêm tiền tố bright- bên cạnh tên màu, ví dụ bright-red.

Kết quả ra là một chuỗi escape tương ứng với cấu hình màu sắc từ tham số.

Ví dụ để in một đoạn text Hello World màu vàng trên nền đỏ và có gạch chân như sau:

$ color.sh -f yellow -g red -s underline "Hello World"