Bash Scripting là gì? Hướng dẫn viết script cho người mới

Bash Scripting là gì?

Bash scripting là kỹ thuật viết các tập lệnh (script) chạy trên shell Bash – trình thông dịch dòng lệnh mặc định của hầu hết hệ điều hành Linux và macOS. Một script Bash là file văn bản chứa chuỗi lệnh được thực thi tuần tự, giúp tự động hóa các tác vụ lặp lại trên máy tính.

Thay vì gõ từng lệnh bằng tay mỗi lần, bạn viết chúng một lần trong file và chạy khi cần. Từ việc sao lưu dữ liệu, xử lý log đến triển khai ứng dụng, bash scripting là kỹ năng nền tảng của mọi quản trị viên hệ thống và lập trình viên làm việc với Linux.

Cửa sổ terminal Linux hiển thị trang hướng dẫn lệnh ls trong bash

Cấu trúc cơ bản của một script Bash

Một script Bash bắt đầu bằng shebang – dòng đầu tiên khai báo trình thông dịch sẽ chạy script:

#!/bin/bash
echo "Xin chào từ script đầu tiên"

Lưu file với đuôi .sh, sau đó phân quyền thực thi và chạy bằng lệnh chmod +x hello.sh rồi ./hello.sh, hoặc đơn giản là bash hello.sh. Shebang giúp hệ điều hành biết dùng Bash thay vì shell khác khi bạn chạy trực tiếp file.

Biến trong Bash

Bash không yêu cầu khai báo kiểu dữ liệu, gán biến trực tiếp không có khoảng trắng quanh dấu bằng: ten="Linux", sau đó truy cập bằng $ten. Luôn đặt biến trong dấu ngoặc kép khi dùng: echo "$ten" để tránh lỗi khi giá trị chứa khoảng trắng. Tham số dòng lệnh được truyền qua $1, $2… và $# đếm số tham số.

Câu điều kiện và vòng lặp

Câu lệnh điều kiện kiểm tra giá trị và rẽ nhánh luồng thực thi:

if [ $diem -gt 5 ]; then
  echo "Đậu"
else
  echo "Trượt"
fi

Các toán tử so sánh số gồm -eq (bằng), -ne (khác), -gt (lớn hơn), -lt (nhỏ hơn); kiểm tra file dùng -f (file tồn tại) và -d (thư mục tồn tại). Vòng lặp for duyệt danh sách và while lặp theo điều kiện:

for i in {1..5}; do
  echo "Lần lặp $i"
done

dem=0
while [ $dem -lt 3 ]; do
  echo "Đếm: $dem"
  ((dem++))
done

Poster shell scripting với cửa sổ editor hiển thị mã bash script mẫu

Hàm trong Bash

Hàm giúp đóng gói logic tái sử dụng, khai báo bằng cú pháp đơn giản:

log_message() {
  local message="$1"
  echo "$(date): $message"
}

log_message "Script bắt đầu chạy"

Biến local giới hạn phạm vi bên trong hàm, tránh xung đột với biến toàn cục. Hàm nhận tham số qua $1, $2 như script chính, và trả về mã thoát qua lệnh return.

Tự động hóa tác vụ với cron

Cron là bộ lập lịch của Linux, chạy script tự động theo thời gian định sẵn. Lệnh crontab -e mở bảng lịch biểu, mỗi dòng có năm trường: phút, giờ, ngày trong tháng, tháng, ngày trong tuần. Ví dụ 30 2 * * * /home/user/backup.sh chạy script sao lưu lúc 2:30 sáng mỗi ngày, */5 * * * * chạy mỗi 5 phút.

Đây là ứng dụng phổ biến nhất của bash scripting trong vận hành: sao lưu tự động, dọn log cũ, gửi báo cáo qua email, đồng bộ dữ liệu giữa máy chủ. Một script viết tốt chạy âm thầm mỗi đêm, thay thế hàng giờ làm việc thủ công.

Kỹ thuật viết script an toàn

Script càng phức tạp càng dễ sai, nên áp dụng các kỹ thuật sau từ đầu: set -euo pipefail ở đầu script khiến nó dừng ngay khi gặp lỗi, báo lỗi biến chưa khai báo và lỗi pipeline. Kiểm tra mã thoát $? sau mỗi lệnh, 0 nghĩa là thành công. Dùng trap để dọn dẹp file tạm khi script thoát, tránh để lại rác trên hệ thống.

Trong thực tế DevOps, script kiểm tra sức khỏe dịch vụ thường viết dạng vòng lặp thử lại: chạy curl kiểm tra endpoint, nếu thất bại chờ vài giây rồi thử lại tối đa 5 lần trước khi báo lỗi. Cách này giúp tự động hóa đáng tin cậy ngay cả khi hệ thống phụ thuộc chưa sẵn sàng ngay.

Prompt bash trống trên terminal minh họa môi trường chạy script

Ví dụ script hoàn chỉnh

Kết hợp các kiến thức trên thành script sao lưu đơn giản:

#!/bin/bash
set -euo pipefail
backup_dir="/home/user/backups"
mkdir -p "$backup_dir"
timestamp=$(date +%Y%m%d_%H%M%S)
tar -czf "$backup_dir/data_$timestamp.tar.gz" /home/user/data
echo "Sao lưu hoàn tất: data_$timestamp.tar.gz"

Script tạo thư mục lưu trữ nếu chưa có, đóng gói thư mục dữ liệu thành file nén kèm thời gian, rồi in thông báo. Thêm dòng 0 2 * * * /home/user/backup.sh vào crontab là bạn đã có hệ thống sao lưu tự động hoàn chỉnh.

Kết luận

Bash scripting biến những tác vụ thủ công lặp lại thành tự động hóa đáng tin cậy. Bắt đầu từ script vài dòng với biến và điều kiện, rồi dần thêm hàm, cron và kỹ thuật xử lý lỗi. Đây là kỹ năng có giá trị lâu dài cho bất kỳ ai làm việc với Linux, từ quản trị hệ thống đến phát triển phần mềm.

Tham khảo thêm: hướng dẫn bash scripting cho người mới của freeCodeCamp, bash scripting cơ bản cho DevOps engineertự động hóa tác vụ Linux với Bash.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Sơ đồ workflow migrate và sqlc trong CI/CD pipeline

Database migration an toàn với Golang golang-migrate sqlc Atlas so sánh

Tại sao cần database migration tool trong Golang Khi xây dựng ứng dụng production với Golang, việc quản lý thay đổi schema database là bài toán bắt buộc. Ba công…

Xem thêm

TypeScript 5.5: type inference cải tiến, decorators chuẩn hóa, isolated declarations

Giới thiệu TypeScript 5.5 mang đến những cải tiến đáng kể cho hệ thống kiểu dữ liệu, khiến mã nguồn an toàn hơn và dễ bảo trì hơn. Bài viết…

Xem thêm

So sánh các web framework Python phổ biến

Giới thiệu So sánh các web framework Python phổ biến là một trong những chủ đề nóng nhất trong thời gian qua. Bài viết này sẽ cung cấp một cái…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất