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"