Viết Bash script để tự động hóa công việc lặp đi lặp lại

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

Nếu bạn gõ cùng một chuỗi lệnh lần thứ ba, đó là dấu hiệu nên viết script. Bash có sẵn trên hầu hết máy chủ Linux và macOS nên bạn không cần cài gì thêm. Bài này giới thiệu các thành phần cốt lõi để viết script đáng tin cậy.

Script đầu tiên

Tạo file hello.sh:

#!/bin/bash
TEN="Cuong"
echo "Xin chao, $TEN"

Dòng đầu (#!/bin/bash, gọi là shebang) cho hệ thống biết dùng chương trình nào để chạy. Cấp quyền chạy và thực thi:

chmod +x hello.sh
./hello.sh

Lưu ý: khi gán biến không được có khoảng trắng quanh dấu bằng (TEN="Cuong", không phải TEN = "Cuong"). Khi dùng giá trị, thêm dấu $ và nên đặt trong ngoặc kép.

Ba dòng an toàn nên có ở đầu script

set -euo pipefail
  • -e: dừng script ngay khi một lệnh lỗi.
  • -u: báo lỗi khi dùng biến chưa khai báo, tránh các lỗi kiểu xóa nhầm đường dẫn rỗng.
  • -o pipefail: một pipeline bị coi là lỗi nếu bất kỳ lệnh nào trong đó lỗi.

Tham số truyền vào

#!/bin/bash
set -euo pipefail

if [ "$#" -lt 1 ]; then
  echo "Cach dung: $0 <thu-muc>"
  exit 1
fi

THUMUC="$1"
echo "Se xu ly: $THUMUC"

$1, $2 là các tham số, $# là số lượng tham số, $0 là tên script. Luôn kiểm tra đầu vào rồi mới làm việc.

Điều kiện

if [ -f "$FILE" ]; then
  echo "File ton tai"
elif [ -d "$FILE" ]; then
  echo "Day la thu muc"
else
  echo "Khong tim thay"
fi

Các toán tử hay dùng: -f (là file), -d (là thư mục), -z (chuỗi rỗng), -eq và -lt (so sánh số), == (so sánh chuỗi). Chú ý có khoảng trắng bên trong dấu ngoặc vuông.

Vòng lặp

for f in *.log; do
  gzip "$f"
done

while read -r dong; do
  echo "Doc: $dong"
done < danh-sach.txt

Vòng for nén từng file log, vòng while read đọc file theo từng dòng. Việc đặt biến trong ngoặc kép giúp xử lý đúng tên file có khoảng trắng.

Hàm và xử lý lỗi

ghi_log() {
  echo "[$(date '+%F %T')] $1"
}

ghi_log "Bat dau sao luu"
if ! tar -czf backup.tar.gz ./du-an; then
  ghi_log "Sao luu that bai"
  exit 1
fi
ghi_log "Hoan tat"

Hàm giúp tái sử dụng đoạn mã và làm script dễ đọc. Mã thoát 0 nghĩa là thành công, khác 0 là lỗi; các công cụ CI và cron dựa vào đây để biết tác vụ có thành công không.

Thói quen viết script tốt

  1. Luôn đặt biến trong ngoặc kép: "$bien".
  2. Dùng tên biến viết hoa cho hằng số và chữ thường cho biến cục bộ để dễ phân biệt.
  3. Thêm chú thích cho phần khó hiểu.
  4. Kiểm tra script bằng công cụ ShellCheck, nó chỉ ra nhiều lỗi tinh vi.
  5. Thử script trên dữ liệu giả trước, đặc biệt với lệnh xóa.
  6. Khi script dài và phức tạp, cân nhắc chuyển sang Python.

Kết luận

Bash không đẹp, nhưng nó có mặt ở mọi nơi và rất hợp để kết dính các lệnh nhỏ thành quy trình hoàn chỉnh. Hãy chọn một việc bạn hay làm tay mỗi tuần và biến nó thành script, đó là cách học nhanh nhất.

Nếu bạn muốn luyện thêm kỹ năng tự động hóa và vận hành trong dự án thật, hãy tham khảo thêm tại codebem.com.

author_photo
Nguyễn Đình Cường

0 comment