Shell Scripting: Từ Xử Lý Tham Số Đến Quản Lý Tiến Trình

Trong môi trường Linux và UNIX, shell scripting là công cụ thiết yếu giúp tự động hóa tác vụ và quản lý hệ thống hiệu quả. Việc thành thạo các lệnh cốt lõi không chỉ nâng cao năng suất mà còn giúp xây dựng các script linh hoạt và mạnh mẽ.

Xử lý tham số dòng lệnh với getopts

Lệnh getopts cho phép phân tích cú pháp các tùy chọn dòng lệnh một cách có cấu trúc. Thay vì xử lý thủ công các đối số, bạn có thể dùng vòng lặp để kiểm tra từng tùy chọn:

while getopts "vhr:" opt; do
  case $opt in
    v) echo "Chế độ hiển thị chi tiết" ;;
    h) echo "Hiển thị trợ giúp"; exit 0 ;;
    r) radius=$OPTARG; echo "Bán kính: $radius" ;;
    *) echo "Lỗi: Tham số không hợp lệ" >&2; exit 1 ;;
  esac
done

Sau khi xử lý xong các tùy chọn, sử dụng shift $((OPTIND-1)) để truy cập các tham số vị trí còn lại.

Tìm kiếm mẫu trong văn bản bằng grep

grep là công cụ mạnh mẽ để lọc nội dung theo biểu thức chính quy. Cú pháp cơ bản:

grep [tùy-chọn] 'mẫu' tập_tin

Ví dụ tìm các dòng chứa từ "error" (không phân biệt hoa thường):

grep -i "error" /var/log/syslog

Các tùy chọn phổ biến bao gồm -v (loại trừ), -n (hiển thị số dòng), -r (tìm đệ quy).

Tối ưu hiệu năng với hash

Shell lưu trữ đường dẫn tuyệt đối của các lệnh đã thực thi vào bảng băm để tăng tốc lệnh tiếp theo. Dùng hash để xem hoặc thêm mục:

hash tar        # Ghi nhớ vị trí lệnh tar
hash            # Liệt kê các lệnh đã lưu
hash -r         # Xóa toàn bộ bảng băm

Định nghĩa bí danh bằng alias

Dùng alias để tạo tên viết tắt cho lệnh dài. Ví dụ:

alias ll='ls -alF'
alias gs='git status'

Bí danh chỉ tồn tại trong phiên hiện tại, trừ khi được khai báo trong file khởi tạo như .bashrc.

Truy xuất lịch sử lệnh

Lệnh history liệt kê các lệnh đã nhập gần đây. Bạn có thể:

  • Dùng !n để chạy lại lệnh thứ n
  • Dùng !! để lặp lại lệnh trước
  • Dùng !grep để chạy lại lệnh bắt đầu bằng grep

Tùy chọn history | tail -10 giúp lọc kết quả.

Rẽ nhánh điều kiện với if

Cấu trúc if kiểm tra trạng thái thoát của lệnh (0 = thành công). Cú pháp tiêu chuẩn:

if [[ $age -gt 18 ]]; then
  echo "Đủ tuổi"
elif [[ $age -eq 18 ]]; then
  echo "Vừa đủ tuổi"
else
  echo "Chưa đủ tuổi"
fi

Kiểm tra chuỗi, tệp và biểu thức phức tạp đều hỗ trợ thông qua [[ ]].

Biến số nguyên và tính toán

Để thực hiện phép tính hiệu quả, khai báo biến kiểu số nguyên:

typeset -i count=5
count+=3
echo $count  # Xuất: 8

Hỗ trợ đầy đủ các toán tử số học: +, -, *, /, %, **.

Quản lý tiến trình nền

Khi chạy lệnh nền (ví dụ: sleep 10 &), dùng jobs để xem trạng thái:

jobs -l  # Hiển thị PID và trạng thái

Dùng kill để gửi tín hiệu đến tiến trình:

kill -TERM 1234   # Yêu cầu thoát
kill -KILL 1234   # Buộc dừng (không thể bắt)
kill %1           # Dừng công việc nền số 1

Thẻ: Shell Scripting Bash getopts grep Hash

Đăng vào ngày 30 tháng 6 lúc 12:01