Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Cách thực hiện chế độ gỡ lỗi kiểm tra cú pháp trong tập lệnh Shell

Chúng tôi đã bắt đầu loạt bài gỡ lỗi tập lệnh shell bằng cách giải thích các tùy chọn gỡ lỗi khác nhau và cách bật chế độ gỡ lỗi tập lệnh shell.

Sau khi viết các tập lệnh shell của bạn, chúng tôi khuyên bạn nên kiểm tra thực tế cú pháp trong các tập lệnh trước khi chạy chúng, thay vì xem xét đầu ra của chúng để xác nhận rằng chúng đang hoạt động chính xác.

Trong phần này của loạt bài này, chúng ta sẽ giới thiệu cho các bạn cách sử dụng chế độ gỡ lỗi kiểm tra cú pháp. Hãy nhớ rằng chúng tôi đã giải thích các tùy chọn gỡ lỗi khác nhau trong phần đầu tiên của loạt bài này và ở đây, chúng tôi sẽ sử dụng chúng để thực hiện gỡ lỗi tập lệnh.

Bật chế độ gỡ lỗi chi tiết

Trước khi chuyển sang trọng tâm chính của hướng dẫn này, hãy cùng chúng tôi khám phá ngắn gọn chế độ chi tiết . Nó được kích hoạt bởi -v tùy chọn gỡ lỗi, yêu cầu trình bao hiển thị tất cả các dòng trong một tập lệnh khi chúng được đọc.

Để chứng minh cách hoạt động của điều này, dưới đây là đoạn mã shell mẫu để chuyển đổi hàng loạt hình ảnh PNG sang định dạng JPG.

Nhập (hoặc sao chép và dán) nó vào một tệp.

#!/bin/bash
#convert
for image in *.png; do
        convert  "$image"  "${image%.png}.jpg"
        echo "image $image converted to ${image%.png}.jpg"
done
exit 0

Sau đó, lưu tệp và làm cho tập lệnh có thể thực thi bằng lệnh bên dưới:

$ chmod +x script.sh

Chúng ta có thể gọi tập lệnh và hiển thị tất cả các dòng trong đó khi chúng được trình bao đọc như vậy:

$ bash -v script.sh
Cách thực hiện chế độ gỡ lỗi kiểm tra cú pháp trong tập lệnh Shell

Bật chế độ gỡ lỗi kiểm tra cú pháp trong tập lệnh Shell

Quay lại chủ đề nhấn mạnh của chúng tôi, -n kích hoạt chế độ kiểm tra cú pháp. Nó hướng dẫn shell về cơ bản đọc tất cả các lệnh, tuy nhiên không thực thi chúng, nó (shell) chỉ kiểm tra cú pháp được sử dụng.

Trong trường hợp có lỗi trong tập lệnh shell của bạn, shell sẽ xuất ra các lỗi trên thiết bị đầu cuối, nếu không, nó sẽ không hiển thị gì.

Cú pháp kích hoạt kiểm tra cú pháp như sau:

$ bash -n script.sh

Bởi vì cú pháp trong tập lệnh là chính xác, lệnh trên sẽ không hiển thị bất kỳ đầu ra nào. Do đó, chúng ta hãy thử xóa done từ đóng vòng lặp for và xem nó có hiển thị lỗi không:

Dưới đây là tập lệnh shell đã sửa đổi để chuyển đổi hàng loạt hình ảnh png sang định dạng jpg có lỗi.

Tập lệnh
#!/bin/bash
#script with a bug
#convert
for image in *.png; do
        convert  "$image"  "${image%.png}.jpg"
        echo "image $image converted to ${image%.png}.jpg"

exit 0

Lưu tệp, sau đó chạy nó trong khi thực hiện kiểm tra cú pháp trong đó:

$ bash -n script.sh
Cách thực hiện chế độ gỡ lỗi kiểm tra cú pháp trong tập lệnh Shell

Từ kết quả đầu ra ở trên, chúng ta có thể thấy rằng có vấn đề về cú pháp với tập lệnh của chúng ta, vòng lặp for thiếu dấu đóng done từ khóa. Và shell đã tìm kiếm nó cho đến cuối tệp và một khi nó không tìm thấy nó ( xong ), trình bao đã in một lỗi cú pháp:

script.sh: line 11: syntax error: unexpected end of file

Chúng tôi cũng có thể kết hợp chế độ chi tiết và chế độ kiểm tra cú pháp với nhau:

$ bash -vn script.sh
Cách thực hiện chế độ gỡ lỗi kiểm tra cú pháp trong tập lệnh Shell

Ngoài ra, chúng ta có thể bật kiểm tra cú pháp bằng cách sửa đổi dòng đầu tiên của tập lệnh ở trên như trong ví dụ tiếp theo.

#!/bin/bash -n
#altering the first line of a script to enable syntax checking

#convert
for image in *.png; do
    convert  "$image"  "${image%.png}.jpg"
    echo "image $image converted to ${image%.png}.jpg"

exit 0

Như trước đây, hãy lưu tệp và chạy nó trong khi thực hiện kiểm tra cú pháp:

$ ./script.sh

script.sh: line 12: syntax error: unexpected end of file

Ngoài ra, chúng tôi có thể sử dụng lệnh tích hợp trình bao để bật chế độ gỡ lỗi trong tập lệnh ở trên.

Trong ví dụ dưới đây, chúng tôi chỉ kiểm tra cú pháp của vòng lặp for trong tập lệnh của chúng tôi.

#!/bin/bash
#using set shell built-in command to enable debugging
#convert

#enable debugging
set -n
for image in *.png; do
    convert  "$image"  "${image%.png}.jpg"
    echo "image $image converted to ${image%.png}.jpg"

#disable debugging
set +n
exit 0

Một lần nữa, hãy lưu tệp và gọi tập lệnh:

$ ./script.sh 

Tóm lại, chúng tôi phải luôn đảm bảo rằng chúng tôi kiểm tra cú pháp các tập lệnh shell của mình để nắm bắt bất kỳ lỗi nào trước khi thực thi chúng.

Để gửi cho chúng tôi bất kỳ câu hỏi hoặc phản hồi nào liên quan đến hướng dẫn này, hãy sử dụng biểu mẫu phản hồi bên dưới. Trong phần thứ ba của loạt bài này, chúng ta sẽ chuyển sang giải thích và sử dụng chế độ gỡ lỗi theo dõi trình bao.