Skip to content

Instantly share code, notes, and snippets.

@lionc2240
Last active June 11, 2026 10:09
Show Gist options
  • Select an option

  • Save lionc2240/189c6c78d9be8b4407b823bb35604de0 to your computer and use it in GitHub Desktop.

Select an option

Save lionc2240/189c6c78d9be8b4407b823bb35604de0 to your computer and use it in GitHub Desktop.
Tô màu output Script Shell

Tô màu output Script Shell

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.


1. Cách hoạt động của mã màu ANSI

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.


2. Các mã màu cơ bản (Định dạng chữ - Foreground)

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
Đỏ ($\color{red}\text{Lỗi}$) 31 echo -e "\e[31mĐây là chữ màu đỏ\e[0m" Đây là chữ $\color{red}\text{màu đỏ}$
Xanh lá ($\color{green}\text{Thành công}$) 32 echo -e "\e[32mĐây là chữ màu xanh lá\e[0m" Đây là chữ $\color{green}\text{màu xanh lá}$
Vàng ($\color{yellow}\text{Cảnh báo}$) 33 echo -e "\e[33mĐây là chữ màu vàng\e[0m" Đây là chữ $\color{yellow}\text{màu vàng}$
Xanh dương ($\color{blue}\text{Tiến trình}$) 34 echo -e "\e[34mĐây là chữ màu xanh dương\e[0m" Đây là chữ $\color{blue}\text{màu xanh dương}$
Tím ($\color{purple}\text{Bố sung}$) 35 echo -e "\e[35mĐây là chữ màu tím\e[0m" Đây là chữ $\color{purple}\text{màu tím}$
Xanh ngọc ($\color{cyan}\text{Gợi ý}$) 36 echo -e "\e[36mĐây là chữ màu xanh ngọc\e[0m" Đây là chữ $\color{cyan}\text{màu xanh ngọc}$

3. Cách viết chuyên nghiệp: Đặt biến trong Script

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... $\color{green}\text{[HOÀN THÀNH]}$
$\color{red}\text{LỖI: Không thể kết nối đến cơ sở dữ liệu!}$
$\color{yellow}\text{CẢNH BÁO: Bộ nhớ đệm đã đầy 85}$%
$\color{blue}\text{=== BẮT ĐẦU CẬP NHẬT HỆ THỐNG ===}$


4. Tô màu nền (Background) cho chữ

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)
highligh_output_shell


5. Mẹo nâng cao: Định nghĩa hàm Log màu sắc

Để 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ả:
$\color{green}\text{[SUCCESS]}$ Đã sao lưu dữ liệu thành công.
$\color{red}\text{[ERROR]}$ Thư mục không tồn tại.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment