Danh sách bài viết trong series Bashscript từ cơ bản đến áp dụng vào DevOps
- Bài 1. Cơ Bản Bash Script trong DevOps
- Bài 2. Điều Kiện trong Bash DevOps: Xử Lý Logic Cơ Bản
- Bài 3. Vòng Lặp trong Bash DevOps: Tự Động Hóa Lặp Lại Hiệu Quả
- Bài 4. Xử Lý File trong Bash DevOps: Đọc, Ghi và Quản Lý Hiệu Quả
- Bài 5. Text Processing trong Bash DevOps: Grep, Awk, Sed Hiệu Quả
- Bài 6. Function trong Bash DevOps: Tái Sử Dụng Code Hiệu Quả
- Bài 7. Quản Lý Biến và Môi Trường trong Bash DevOps
- Bài 8. Cron Job trong Bash DevOps: Tự Động Hóa Theo Lịch Hiệu Quả
- Bài 9. Debug trong Bash DevOps: Tìm và Sửa Lỗi Hiệu Quả
- Bài 10. Error Handling Bash DevOps: Xử Lý Ngoại Lệ Hiệu Quả
- Bài 11. Bash trong CI/CD DevOps: Tích Hợp Pipeline Hiệu Quả
- Bài 12. Quản Lý Hệ Thống với Bash DevOps: Theo Dõi và Can Thiệp Hiệu Quả
- Bài 13. Tự Động Hóa SSH với Bash DevOps: Quản Lý Multi-Server Hiệu Quả
- Bài 14. Bash và Docker trong DevOps: Quản Lý Container Hiệu Quả
- Bài 15. Monitoring với Bash DevOps: Báo Cáo Hệ Thống Hiệu Quả
- Bài 16. Bash Nâng Cao: Parallel Execution trong DevOps Hiệu Quả
- Bài 17. Bash và API trong DevOps: Gọi và Xử Lý API Hiệu Quả
- Bài 18. Bash và Cloud CLI trong DevOps: Quản Lý Cloud Hiệu Quả
- Bài 19. Bash và Security trong DevOps: Bảo Mật Script Hiệu Quả
- Bài 20. Best Practice trong Bash DevOps: Làm Chủ Script Hiệu Quả
Debug Cơ Bản trong Bash – Tìm và Sửa Lỗi trong DevOps
Viết script Bash là một chuyện, nhưng khi nó không chạy như ý – lỗi cú pháp, logic sai, hay output trống – bạn cần kỹ năng debug trong Bash DevOps. Trong bài thứ chín của series Bash Script Chuyên Sâu cho DevOps, tôi sẽ dẫn bạn qua cách tìm lỗi Bash với set -x Bash, kiểm tra cú pháp Bash, và thực hành sửa lỗi thực tế. Đây là những mẹo tôi học được từ việc vật lộn với script trong pipeline và hệ thống, không chỉ là lý thuyết đâu nhé!
Tại Sao Debug Quan Trọng?
Lỗi trong Bash
Script Bash dễ lỗi vì:
- Cú pháp sai (VD: quên
$
trước biến). - Logic sai (VD: điều kiện không đúng).
- Môi trường khác nhau (VD: chạy local ổn, CI fail).
Ví dụ: Script kiểm tra disk chạy local thì OK, nhưng cron job không ghi log – debug giúp tìm ra nguyên nhân.
Lợi Ích trong DevOps
- Nhanh chóng: Tìm lỗi trong phút thay vì giờ.
- Ổn định: Đảm bảo script chạy đúng trong pipeline/production.
- Học hỏi: Hiểu sâu hơn về Bash qua debug.
Thực tế: Tôi từng debug script cron fail vì thiếu đường dẫn tuyệt đối – 5 phút với set -x
thay vì mò cả ngày.
Công Cụ Debug Cơ Bản trong Bash
Set -x Bash: Theo Dõi Thực Thi
Thêm set -x
để in từng lệnh khi chạy:
#!/bin/bash
set -x
DISK=$(df -h / | tail -1 | awk '{print $5}')
echo "Disk: $DISK"
- Chạy:
./script.sh
- Output:
- df -h /
- tail -1
- awk ‘{print $5}’
- DISK=42%
- echo ‘Disk: 42%’
Disk: 42%
- Output:
Tips: Dùng -x
khi chạy: bash -x script.sh
.
Kiểm Tra Cú Pháp Bash
Kiểm tra lỗi cú pháp mà không chạy:
bash -n script.sh
- Nếu có lỗi (VD: thiếu
fi
), Bash sẽ báo:script.sh: line 5: syntax error: unexpected end of file
Set -e: Thoát Khi Lỗi
Thêm set -e
để dừng script nếu lệnh fail:
#!/bin/bash
set -e
ls /nonexistent # Lỗi, script dừng
echo "Không chạy tới đây"
Kiểm Tra Exit Code
Dùng $?
để xem kết quả lệnh trước:
ls /nonexistent
if [ $? -ne 0 ]; then
echo "Lệnh thất bại"
fi
Thực Hành: Debug Script Kiểm Tra Hệ Thống
Script Có Lỗi
Tạo buggy_check.sh
(cố tình thêm lỗi):
#!/bin/bash
# Thiếu $ trước biến
DISK_USAGE=df -h / | tail -1 | awk '{print $5}'
if [ DISK_USAGE -gt 80 ]; then # Sai cú pháp
echo "Disk cao: $DISK_USAGE"
else
echo "Disk OK: $DISK_USAGE"
fi
# Lệnh lỗi không xử lý
cat /nonexistent/log
echo "Tiếp tục chạy" # Không nên chạy
Debug Bước Từng Bước
-
Kiểm tra cú pháp:
bash -n buggy_check.sh
- Báo lỗi:
buggy_check.sh: line 5: [: DISK_USAGE: integer expression expected
- Báo lỗi:
-
Dùng set -x:
bash -x buggy_check.sh
- Output:
+ df -h / | tail -1 | awk '{print $5}' + DISK_USAGE='df -h /' + '[' DISK_USAGE -gt 80 ']' buggy_check.sh: line 5: [: DISK_USAGE: integer expression expected
- Phát hiện: Thiếu
$
ởDISK_USAGE=$(...)
.
- Output:
-
Sửa lỗi cú pháp:
DISK_USAGE=$(df -h / | tail -1 | awk '{print $5}' | cut -d'%' -f1) if [ "$DISK_USAGE" -gt 80 ]; then echo "Disk cao: $DISK_USAGE%" else echo "Disk OK: $DISK_USAGE%" fi
-
Thêm set -e:
#!/bin/bash set -e DISK_USAGE=$(df -h / | tail -1 | awk '{print $5}' | cut -d'%' -f1) if [ "$DISK_USAGE" -gt 80 ]; then echo "Disk cao: $DISK_USAGE%" else echo "Disk OK: $DISK_USAGE%" fi cat /nonexistent/log # Dừng tại đây echo "Không chạy tới đây"
-
Chạy lại:
./buggy_check.sh
- Kết quả mẫu:
Disk OK: 42% cat: /nonexistent/log: No such file or directory
- Kết quả mẫu:
Giải thích:
set -x
: Hiển thị lỗi thiếu$
.-n
: Tìm lỗi cú pháp trước khi chạy.set -e
: Ngăn script chạy tiếp khi lỗi.
DevOps: Script này có thể dùng trong cron để kiểm tra disk, dừng nếu lỗi nghiêm trọng.
Debug Thực Tế
- Thêm log debug:
echo "Debug: DISK_USAGE=$DISK_USAGE" >&2
- Kiểm tra cron log:
grep CRON /var/log/syslog
Thực tế: Tôi từng debug script fail trong cron vì biến rỗng – set -x
và log stderr cứu tôi.
Ứng Dụng trong DevOps
Debug Pipeline
- Thêm debug trong CI:
check_system: script: - bash -x ./buggy_check.sh
Giám Sát Hệ Thống
- Script an toàn hơn:
#!/bin/bash set -e DISK=$(df -h / | tail -1 | awk '{print $5}' | cut -d'%' -f1) || exit 1 echo "Disk: $DISK%"
Case study: Một team debug script backup fail vì thiếu quyền – set -e
giúp dừng sớm, tránh overwrite file rỗng.
Kết Luận
Debug trong Bash DevOps với set -x Bash, kiểm tra cú pháp Bash, và các mẹo cơ bản giúp bạn tìm lỗi Bash nhanh chóng. Thực hành với buggy_check.sh
cho thấy bạn có thể sửa lỗi hiệu quả – kỹ năng cần thiết trong tự động hóa DevOps. Bài tiếp theo, chúng ta sẽ khám phá Error Handling trong Bash – cách xử lý ngoại lệ như pro.