Hướng dẫn đầy đủ về Bash Script trên Ubuntu | Tự động hóa & Tối ưu quản lý tác vụ

1. Cơ bản về Bash

Bash Shell là gì?

Bash (Bourne Again Shell) là giao diện dòng lệnh được sử dụng phổ biến nhất trong các bản phân phối Linux. Công cụ đơn giản nhưng mạnh mẽ này cung cấp một nền tảng để người dùng tương tác với hệ thống, thực hiện các thao tác như quản lý tệp, chạy chương trình và quản lý tác vụ.

Lợi ích của Bash

  • Khả năng lập trình mạnh mẽ: Bash cho phép tự động hóa các tác vụ phức tạp bằng cách sử dụng shell script.
  • Hỗ trợ rộng rãi: Được hỗ trợ trên hầu hết các hệ điều hành dạng Unix và các bản phân phối Linux.
  • Tính tùy chỉnh cao: Người dùng có thể tùy chỉnh môi trường làm việc của mình thông qua alias và hàm trong shell.
# Ví dụ lệnh Bash đơn giản
echo "Hello, World!"

2. Các lệnh cơ bản trong Bash

Quản lý tệp

Dưới đây là các lệnh thao tác tệp phổ biến trong Bash.

  • ls: Hiển thị danh sách nội dung của thư mục.
  • cd: Chuyển đổi thư mục.
  • cp: Sao chép tệp hoặc thư mục.
  • mv: Di chuyển hoặc đổi tên tệp.
  • rm: Xóa tệp.
# Hiển thị nội dung thư mục chi tiết
ls -l

# Di chuyển đến thư mục chính
cd ~

# Sao chép tệp
cp source.txt destination.txt

# Đổi tên hoặc di chuyển tệp
mv old_name.txt new_name.txt

# Xóa tệp
rm unwanted_file.txt

Thông tin hệ thống và quản lý tiến trình

Các lệnh kiểm tra thông tin hệ thống và quản lý tiến trình rất quan trọng.

  • ps: Hiển thị danh sách tiến trình đang chạy.
  • top: Hiển thị danh sách tiến trình theo thời gian thực và thông tin hệ thống.
  • kill: Gửi tín hiệu để kết thúc một tiến trình.
# Hiển thị danh sách tiến trình đang chạy
ps aux

# Hiển thị thông tin hệ thống và tiến trình
top

# Kết thúc tiến trình có ID 1234
kill 1234

 

3. Cách viết Bash Script

Cấu trúc cơ bản của script

Bash script là một tập tin chứa nhiều lệnh Bash. Việc tạo script giúp tự động hóa và thực hiện một loạt thao tác một cách dễ dàng.

#!/bin/bash
# Dòng này gọi là "shebang", xác định shell dùng để chạy script.

echo "Hello, World!"  # Lệnh echo hiển thị chuỗi ký tự

Sử dụng biến

Biến giúp lưu trữ dữ liệu và tái sử dụng trong script.

#!/bin/bash
message="Hello, Bash Scripting!"
echo $message

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

Điều kiện và vòng lặp được sử dụng để xử lý logic phức tạp và lặp lại tác vụ.

#!/bin/bash
# Ví dụ về câu lệnh if
if [ $1 -gt 100 ]
then
  echo "Số lớn hơn 100."
else
  echo "Số nhỏ hơn hoặc bằng 100."
fi

# Ví dụ về vòng lặp for
for i in 1 2 3 4 5
do
  echo "Lặp... số $i"
done

4. Tự động hóa tác vụ với Bash

Tổng quan về tự động hóa

Sử dụng Bash script để tự động hóa các tác vụ định kỳ giúp tiết kiệm thời gian và công sức. Ví dụ như sao lưu hệ thống, đồng bộ dữ liệu và tạo báo cáo.

Script sao lưu tự động

Để bảo vệ dữ liệu hàng ngày, script dưới đây sẽ sao lưu thư mục được chỉ định.

#!/bin/bash
SRC_DIR="/home/user/documents"
DST_DIR="/backup/documents"
DATE=$(date +%Y%m%d)

# Tạo thư mục sao lưu nếu chưa tồn tại
if [ ! -d "$DST_DIR" ]; then
  mkdir -p "$DST_DIR"
fi

# Nén và sao lưu dữ liệu
tar -czf "$DST_DIR/backup_$DATE.tar.gz" -C "$SRC_DIR" .
echo "Sao lưu hoàn tất thành công."

Tự động chạy script với cron job

Sử dụng cron để chạy script sao lưu trên vào lúc 2 giờ sáng mỗi ngày.

0 2 * * * /path/to/backup.sh

Xử lý lỗi và thông báo

Thêm xử lý lỗi để gửi thông báo khi sao lưu thất bại.

#!/bin/bash
SRC_DIR="/home/user/documents"
DST_DIR="/backup/documents"
LOG_FILE="/var/log/backup.log"
DATE=$(date +%Y%m%d)

if [ ! -d "$DST_DIR" ]; then
  mkdir -p "$DST_DIR"
fi

if tar -czf "$DST_DIR/backup_$DATE.tar.gz" -C "$SRC_DIR" .; then
  echo "Sao lưu thành công vào ngày $DATE" >> $LOG_FILE
else
  echo "Sao lưu thất bại vào ngày $DATE" | mail -s "Backup Failure" admin@example.com
fi

 

5. Khắc phục sự cố và lỗi thường gặp

Hiểu và xử lý lỗi Bash

Trong quá trình chạy Bash script, có thể gặp phải một số lỗi phổ biến. Dưới đây là các lỗi thường gặp và cách khắc phục.

Lỗi “command not found”

Lỗi này xảy ra khi lệnh cần chạy không được cài đặt hoặc đường dẫn không được đặt đúng.

command not found
  • Cách khắc phục: Kiểm tra xem lệnh đã được cài đặt chưa, đồng thời kiểm tra biến môi trường $PATH.

Lỗi quyền truy cập (Permission denied)

Lỗi này xảy ra khi không có quyền truy cập vào tệp hoặc thư mục.

Permission denied
  • Cách khắc phục: Sử dụng tài khoản có quyền phù hợp hoặc thay đổi quyền bằng lệnh chmod hoặc chown.

Lỗi cú pháp (Syntax error)

Lỗi này xảy ra khi Bash script chứa mã không hợp lệ hoặc sai cú pháp.

syntax error: unexpected end of file
  • Cách khắc phục: Kiểm tra kỹ mã script để tìm và sửa lỗi cú pháp.

Lỗi “No such file or directory”

Lỗi này xảy ra khi tệp hoặc thư mục được chỉ định không tồn tại.

No such file or directory
  • Cách khắc phục: Kiểm tra lại đường dẫn tệp hoặc thư mục và đảm bảo rằng chúng tồn tại.

Sử dụng công cụ gỡ lỗi (Debugging)

Để kiểm tra lỗi trong Bash script, có thể sử dụng set -x để hiển thị từng lệnh được thực thi, giúp xác định nguyên nhân lỗi.

set -x  # Kích hoạt chế độ debug cho script

6. Tự động hóa nâng cao với Bash

Tổng quan về tự động hóa nâng cao

Bash có thể được sử dụng để tự động hóa các quy trình phức tạp như quản lý hệ thống, giám sát tệp và xử lý dữ liệu.

Giám sát tệp với Bash

Dưới đây là một script giám sát thay đổi trong một thư mục cụ thể và ghi lại log.

#!/bin/bash
WATCH_DIR="/home/user/watched_dir"
LOG_FILE="/var/log/file_changes.log"

inotifywait -m -e create,delete,modify "$WATCH_DIR" |
while read path action file; do
  echo "$(date): $file đã $action tại $path" >> "$LOG_FILE"
done

Tích hợp Bash với các công cụ khác

Bash có thể được tích hợp với các công cụ khác như Python để xử lý dữ liệu hiệu quả hơn.

#!/bin/bash
python3 my_script.py

Tự động gửi thông báo qua email

Script sau đây gửi email thông báo khi một sự kiện quan trọng xảy ra.

#!/bin/bash
TO_EMAIL="admin@example.com"
SUBJECT="Cảnh báo hệ thống"
MESSAGE="Có một sự kiện quan trọng xảy ra trên máy chủ."

echo "$MESSAGE" | mail -s "$SUBJECT" "$TO_EMAIL"

7. Kết luận

Bash là một công cụ mạnh mẽ giúp tự động hóa và quản lý hệ thống hiệu quả. Từ các lệnh cơ bản đến script phức tạp, Bash giúp tối ưu hóa quy trình làm việc và tăng hiệu suất. Nếu bạn muốn nâng cao kỹ năng Bash, hãy thực hành viết script và thử nghiệm với các tình huống thực tế!