Hướng dẫn cách debug code shell script trên Linux
Làm thế nào để debug một Bash Shell Script trên Linux/ UNIX? Đây là câu hỏi phổ biến được hỏi nhiều nhất bởi các sysadmins mới hoặc Linux/ UNIX users. Có nhiều cách khác nhau để debug một shell script.
Bạn cần phải vượt qua đối số -x hoặc -v để bash shell đi qua từng dòng trong tập lệnh.
Cùng Bizfly Cloud xem cách gỡ lỗi một tập lệnh bash chạy trên Linux và Unix bằng cách sử dụng các phương thức khác nhau.
Tùy chọn -x để debug một bash shell script
Chạy một shell script với tùy chọn -x.
Sử dụng set command
Bash shell cung cấp các tùy chọn gỡ lỗi có thể bật hoặc tắt bằng cách sử dụng lệnh set:
set -x: Hiển thị các lệnh và các đối số của chúng khi chúng được thực thi.
set -v: Hiển thị các dòng đầu vào shell khi chúng được đọc.
Bạn có thể sử dụng trên hai lệnh trong chính shell script:
#!/bin/bash
clear
# turn on debug mode
set -x
for f in *
do
file $f
done
# turn OFF debug mode
set x
ls
# more commands
Bạn có thể thay thế dòng Shebang chuẩn:
#!/bin/bash
với mã sau đây (để gỡ lỗi):
#!/bin/bash -xv
Sử dụng chức năng DEBUG thông minh
Đầu tiên, thêm một biến đặc biệt gọi là _DEBUG. Đặt _DEBUG thành 'on' khi bạn cần gỡ lỗi tập lệnh:
_DEBUG="on"
Đặt hàm sau vào đầu tập lệnh:
function DEBUG()
{
[ "$_DEBUG" == "on" ] && $@
}
Bạn cần gỡ lỗi chỉ cần sử dụng chức năng DEBUG như sau:
DEBUG echo "File is $filename"
Hoặc:
DEBUG set -x
Cmd1
Cmd2
DEBUG set x
Khi thực hiện xong việc gỡ lỗi (và trước khi chuyển script của bạn sang production), đặt _DEBUG thành 'off'. Không cần phải xóa các dòng gỡ lỗi.
_DEBUG="off" # set to anything but not to 'on'
Ví dụ:
#!/bin/bash
_DEBUG="on"
function DEBUG()
{
[ "$_DEBUG" == "on" ] && $@
}
DEBUG echo 'Reading files'
for i in *
do
grep 'something' $i > /dev/null
$? -eq 0 ] && echo "Found in $i file"
done
DEBUG set -x
a=2
b=3
c=$(( $a $b ))
DEBUG set x
echo "$a $b = $c"
Lưu và đóng tập tin. Chạy script như sau:
$ ./script.sh
Output:
Reading files
Found in xyz.txt file
a=2
b=3
c=5
DEBUG set x
'[' on == on ']' set x
2 3 = 5
Bây giờ hãy đặt DEBUG thành tắt (bạn cần chỉnh sửa tệp):
_DEBUG="off"
Chạy script:
$ ./script.sh
Output:
Found in xyz.txt file
2 3 = 5
Trên đây là một kỹ thuật đơn giản nhưng khá hiệu quả. Bạn cũng có thể thử sử dụng DEBUG làm alias thay vì function.
Debugging lỗi Bash Shell Scripting thông dụng
Bash hoặc sh hoặc ksh cung cấp các thông báo lỗi khác nhau trên màn hình và trong nhiều trường hợp, thông báo lỗi có thể không cung cấp thông tin chi tiết.
Bỏ qua để áp dụng quyền thực thi trên tệp
bash: ./hello.sh: Permission denied
Đặt quyền sử dụng lệnh chmod:
$ chmod x hello.sh
$ ./hello.sh
$ bash hello.sh
Lỗi kết thúc tệp không mong muốn
#!/bin/bash
...
.... echo 'Error: File not found
^^^^^^^
missing quote
Ngoài ra, hãy đảm bảo bạn kiểm tra dấu ngoặc và dấu ngoặc bị thiếu ({}):
#!/bin/bash
.....
[ ! -d $DIRNAME ] && { echo "Error: Chroot dir not found"; exit 1;
^^^^^^^^^^^^^
missing brace }
...
Thiếu các keyword như fi, esac, ;;,...
Nếu bạn bỏ lỡ ending keyword như fi hoặc ;; bạn sẽ gặp lỗi như "xxx unexpected". Xem trang bash man để biết các yêu cầu cú pháp. Trong ví dụ này, fi bị thiếu:
#!/bin/bash
echo "Starting..."
....
if [ $1 -eq 10 ]
then
if [ $2 -eq 100 ]
then
echo "Do something"
fi
for f in $files
do
echo $f
done
# note fi is missing
Di chuyển hoặc chỉnh sửa shell script trên các boxes Windows hoặc Unix
dos2unix my-script.sh
Tip 1: Gửi Debug Message tới stderr
Standard error là error output device mặc định, được sử dụng để ghi tất cả các thông báo lỗi hệ thống. Vì vậy, bạn nên gửi tin nhắn tới default error device:
# Write error to stdout
echo "Error: $1 file not found"
#
# Write error to stderr (note 1>&2 at the end of echo command)
#
echo "Error: $1 file not found" 1>&2
Tip 2: Bật tính năng Syntax Highlighting khi sử dụng vim text editor
Hầu hết các trình soạn thảo văn bản hiện đại cho phép bạn đặt tùy chọn syntax highlighting. Điều này rất hữu ích để phát hiện cú pháp và ngăn ngừa các lỗi phổ biến như mở hoặc đóng quote. Bạn có thể thấy bash script với các màu khác nhau. Tính năng này giúp việc viết trở nên dễ dàng hơn trong shell script structures, và các lỗi cú pháp sẽ khác biệt một cách trực quan. Highlighting không ảnh hưởng đến ý nghĩa của văn bản; nó chỉ dành riêng cho bạn. Trong ví dụ này, vim syntax highlighting được sử dụng cho tập bash script:
Tip 3: Sử dụng shellcheck để lint script
ShellCheck là một công cụ phân tích tĩnh cho các shell scripts, giúp tìm lỗi trong shell scripts. Nó được viết bằng Haskell. Bạn có thể tìm thấy các cảnh báo và gợi ý cho các script bash/ sh shell bằng công cụ này.
Dịch từ: cyberciti.biz/tips/debugging-shell-script.html
Theo Bizfly Cloud chia sẻ
>> Có thể bạn quan tâm: Hướng dẫn tạo, thêm và xóa các ràng buộc duy nhất trong SQL Server.