Giới Thiệu
Shell script đóng vai trò quan trọng trong tự động hóa triển khai hệ thống, nhưng các vấn đề về cú pháp hoặc phong cách viết không nhất quán thường gây ra lỗi nghiêm trọng. Công cụ shfmt từ dự án gh_mirrors/sh1/sh giúp giải quyết thách thức này bằng khả năng phân tích tĩnh và định dạng tự động, đảm bảo script hoạt động ổn định trước khi triển khai.
Tại Sao Nên Dùng shfmt?
- Hỗ trợ đa chuẩn: POSIX Shell, Bash, mksh
- Phát hiện lỗi cú pháp: Dấu ngoặc không đóng, biến chưa khai báo
- Đồng nhất phong cách code trong team
Hướng Dẫn Cài Đặt
1. Qua Go (Yêu Cầu Go 1.24+)
go install mvdan.cc/sh/v3/cmd/shfmt@latest
2. Dùng Trình Quản Lý Gói
# Ubuntu/Debian
sudo apt install shfmt
# macOS (Homebrew)
brew install shfmt
3. Chạy Qua Docker
docker run --rm -v "$PWD:/mnt" -w /mnt mvdan/shfmt:latest
Tính Năng Chính
1. Định Dạng và Kiểm Tra Cú Pháp
shfmt -l -w deploy.sh # Định dạng đơn lẻ
shfmt -d . # Kiểm tra toàn bộ thư mục
Ví dụ: Tự động sửa if[ -x ];then thành if [ -x ]; then
2. Tùy Chỉnh Quy Tắc Định Dạng
shfmt -i 4 -bn -ci -w script.sh
-i 4: Độ thụt lề 4 ký tự-bn: Xuống dòng sau dấu ngoặc-ci: Thụt lề trong khối case
3. Tích Hợp Vào CI/CD
# .github/workflows/shell-check.yml
jobs:
shfmt:
steps:
- uses: actions/checkout@v4
- run: sudo apt install shfmt
- run: shfmt -d .
Kỹ Thuật Nâng Cao
- VS Code Extension: Cài đặt plugin shell-format để định dạng tự động khi lưu
- Git Hook: Cấu hình .pre-commit-config.yaml để kiểm tra trước commit
- Phân Tích JSON: Xuất script thành JSON để phân tích cấu trúc phức tạp:
shfmt -tojson app.sh > app.json
Giải Quyết Vấn Đề Thường Gặp
Câu hỏi: Làm sao khi shfmt báo lỗi sai?
Trả lời: Dùng -ln bash để hỗ trợ cú pháp Bash mở rộng:
shfmt -ln bash script.sh
Câu hỏi: Bỏ qua định dạng với file cụ thể?
Trả lời: Tạo file .shfmtignore và thêm đường dẫn:
logs/
tmp/