Khi bạn muốn tạo màu sắc cho các dòng văn bản hoặc từng chữ trong output (kết quả đầu ra) của một Script Shell khi chạy trên Terminal, cách tốt nhất và chuẩn nhất là sử dụng Mã màu ANSI (ANSI Escape Codes).
Dưới đây là cách thiết lập chi tiết từ cơ bản đến nâng cao để bạn áp dụng trực tiếp vào script của mình.
Mã màu ANSI là các chuỗi ký tự đặc biệt giúp Terminal hiểu rằng nó cần đổi màu cho đoạn văn bản phía sau. Cú pháp cơ bản trong Shell thường là \e[mã_màu m hoặc \033[mã_màu m.
Để tránh việc màu sắc bị "lem" sang các dòng lệnh tiếp theo của hệ thống, bạn luôn luôn phải reset màu về mặc định ở cuối câu bằng mã \e[0m.
Dưới đây là danh sách các mã màu phổ biến nhất mà bạn có thể dùng với lệnh echo -e (thao tác -e giúp echo hiểu được các ký tự điều khiển như \e hoặc \033):
| Màu sắc | Mã màu | Ví dụ câu lệnh trong Script | Minh họa |
|---|---|---|---|
| Đỏ ( |
31 |
echo -e "\e[31mĐây là chữ màu đỏ\e[0m" |
Đây là chữ |
| Xanh lá ( |
32 |
echo -e "\e[32mĐây là chữ màu xanh lá\e[0m" |
Đây là chữ |
| Vàng ( |
33 |
echo -e "\e[33mĐây là chữ màu vàng\e[0m" |
Đây là chữ |
| Xanh dương ( |
34 |
echo -e "\e[34mĐây là chữ màu xanh dương\e[0m" |
Đây là chữ |
| Tím ( |
35 |
echo -e "\e[35mĐây là chữ màu tím\e[0m" |
Đây là chữ |
| Xanh ngọc ( |
36 |
echo -e "\e[36mĐây là chữ màu xanh ngọc\e[0m" |
Đây là chữ |
Việc gõ trực tiếp các chuỗi \e[31m rất dễ nhầm lẫn và làm code bị rối. Cách viết sạch đẹp và chuyên nghiệp nhất là khai báo chúng thành các biến ở đầu file script:
#!/bin/bash
# Khai báo các biến màu sắc
RED='\e[31m'
GREEN='\e[32m'
YELLOW='\e[33m'
BLUE='\e[34m'
BOLD='\e[1m'
NC='\e[0m' # No Color (Reset lại màu mặc định)
# 1. Tô màu cho TỪNG CHỮ mong muốn trong dòng
echo -e "Trạng thái tiến trình: Đang tải... [${GREEN}HOÀN THÀNH${NC}]"
# 2. Tô màu cho CẢ DÒNG
echo -e "${RED}LỖI: Không thể kết nối đến cơ sở dữ liệu!${NC}"
echo -e "${YELLOW}CẢNH BÁO: Bộ nhớ đệm đã đầy 85%.${NC}"
# 3. Kết hợp chữ in đậm và màu sắc
echo -e "${BOLD}${BLUE}=== BẮT ĐẦU CẬP NHẬT HỆ THỐNG ===${NC}"
Kết quả:
Trạng thái tiến trình: Đang tải...
Nếu muốn chữ nổi bật hơn nữa bằng cách tạo một khối màu nền phía sau chữ, bạn chỉ cần thay đổi số mã màu (Mã nền thường bắt đầu bằng đầu số 4):
- Nền Đỏ, chữ trắng:
\e[41;37m - Nền Xanh lá, chữ đen:
\e[42;30m - Nền Vàng, chữ đen:
\e[43;30m
#!/bin/bash
BG_RED='\e[41;37m'
NC='\e[0m'
echo -e "${BG_RED} CRITICAL ERROR ${NC} Hệ thống bị sập!"
Kết quả:
CRITICAL ERROR Hệ thống bị sập! (Đây là minh họa)

Để tái sử dụng nhanh trong toàn bộ script, bạn có thể viết các hàm log như sau:
#!/bin/bash
log_success() {
echo -e "\e[32m[SUCCESS]\e[0m $1"
}
log_error() {
echo -e "\e[31m[ERROR]\e[0m $1"
}
# Sử dụng cực kỳ ngắn gọn
log_success "Đã sao lưu dữ liệu thành công."
log_error "Thư mục không tồn tại."
Kết quả: