Hướng dẫn cách debug một Bash Shell Script trên Linux/ UNIX

Làm cách nào để gỡ lỗi Bash Shell Script trên Linux / UNIX? Đây là câu hỏi phổ biến được người dùng hệ điều hành mới hoặc Linux / UNIX hỏi nhiều nhất. Có nhiều cách khác nhau để gỡ lỗi tập lệnh shell.

Bạn cần chuyển đối số -x hoặc là -v hãy để bash shell đi qua từng dòng trong script.

Hãy xem cách gỡ lỗi tập lệnh bash chạy trên Linux và Unix bằng các phương pháp khác nhau.

Tùy chọn -x để gỡ lỗi một tập lệnh bash shell

Chạy một tập lệnh shell với các tùy chọn -x.

$ bash -x script-name

$ bash -x domains.sh

Sử dụng lệnh set

Bash shell cung cấp các tùy chọn gỡ lỗi có thể được 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à đố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 của shell khi chúng được đọc.

Bạn có thể sử dụng hai lệnh trên trong chính tập lệnh shell:

#! / bin / bash

thông thoáng

# bật chế độ gỡ lỗi

set -x

cho f trong *

đến hạn

File $ f

làm xong

# tắt chế độ gỡ lỗi

đặt x

ls

# lệnh khác

Bạn có thể thay thế dòng Shebang tiêu chuẩn:

#! / bin / bash

với mã sau (để gỡ lỗi):

#! / bin / bash -xv

Sử dụng thông minh chức năng GỠ LỖI

Đầu tiên, thêm một biến đặc biệt có tên _DEBUG. Đặt _DEBUG thành ‘bật’ khi bạn cần gỡ lỗi tập lệnh:

_DEBUG = “trên”

Đặt hàm sau ở đầu tập lệnh:

hàm DEBUG ()

Mình nghĩ bạn cần xem =>  Cách ẩn ổ đĩa trống trong File Explorer trên Windows

{

[ “$_DEBUG” == “on” ] && $ @

}

Bạn cần gỡ lỗi chỉ cần sử dụng hàm GỬI như sau:

Gỡ lỗi echo “File là $ filename”

Hoặc là:

DEBUG set -x

Cmd1

Cmd2

DEBUG đặt x

Khi bạn gỡ lỗi xong (và trước khi chuyển tập lệnh của bạn sang sản xuất), hãy đặt _DEBUG thành ‘tắt’. Không cần xóa các dòng gỡ lỗi.

_DEBUG = “off” # được đặt thành bất kỳ thứ gì nhưng không thành ‘bật’

Ví dụ:

#! / bin / bash

_DEBUG = “trên”

hàm DEBUG ()

{

[ “$_DEBUG” == “on” ] && $ @

}

Gỡ lỗi echo ‘Đang đọc File’

cho tôi trong *

đến hạn

grep ‘something’ $ i> / dev / null

$? -eq 0]&& echo “Đã tìm thấy trong File $ i”

làm xong

DEBUG set -x

a = 2

b = 3

c = $ (($ a $ b))

DEBUG đặt x

echo “$ a $ b = $ c”

Lưu và đóng tập tin. Chạy tập lệnh như sau:

$ ./script.sh

Đầu ra:

Đọc File

Tìm thấy trong File xyz.txt

a = 2

b = 3

c = 5

DEBUG đặt x

”[‘ on == on ‘]’đặt x

2 3 = 5

Bây giờ đặt DEBUG thành tắt (bạn cần chỉnh sửa File):

_DEBUG = “tắt”

Chạy tập lệnh:

$ ./script.sh

Đầu ra:

Tìm thấy trong File xyz.txt

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 bí danh thay vì hàm.

Gỡ lỗi các lỗi Bash Shell Scripting phổ biến

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 File

Khi bạn viết tập lệnh shell bash hello world đầu tiên của mình, bạn có thể sẽ gặp lỗi sau:

bash: ./hello.sh: Quyền bị từ chối

Đặt quyền bằng lệnh chmod:

$ chmod x hello.sh

$ ./hello.sh

$ bash hello.sh

Lỗi kết thúc File đột ngột

Nếu bạn nhận được thông báo lỗi không mong muốn Kết thúc File, hãy mở File kịch bản của bạn và đảm bảo File có cả dấu ngoặc kép mở và đóng. Trong ví dụ này, câu lệnh echo có một câu trích dẫn mở nhưng không có một câu trích dẫn đóng:

#! / bin / bash

…. echo ‘Lỗi: Không tìm thấy File

^^^^^^^

báo thiếu

Ngoài ra, hãy đảm bảo rằng bạn kiểm tra các dấu ngoặc nhọn và dấu ngoặc nhọn ({}):

Mình nghĩ bạn cần xem =>  Những cách đơn giản tăng độ bền cho laptop

#! / bin / bash

…..

[ ! -d $DIRNAME ] && {echo “Lỗi: Chroot dir not found”; lối ra 1;

^^^^^^^^^^^^^

thiếu dấu ngoặc nhọn}

Thiếu các từ Key như fi, esac, ;;, …

Nếu bạn bỏ lỡ từ Key kết thúc như fi hoặc ;; Bạn sẽ nhận được một lỗi như “xxx bất ngờ”. Xem trang bash man để biết các yêu cầu về cú pháp. Trong ví dụ này, fi bị thiếu:

#! / bin / bash

echo “Đang bắt đầu …”

….

nếu [ $1 -eq 10 ]

sau đó

nếu [ $2 -eq 100 ]

sau đó

echo “Làm gì đó”

fi

cho f trong $ File

đến hạn

echo $ f

làm xong

# ghi chú fi bị thiếu

Di chuyển hoặc chỉnh sửa tập lệnh shell trên hộp Windows hoặc Unix

Không tạo tập lệnh trên Linux / Unix và chuyển sang Windows. Một vấn đề khác là chỉnh sửa tập lệnh bash shell trên Windows 10 và di chuyển / tải lên máy chủ Unix. Nó sẽ dẫn đến một lỗi như không tìm thấy dòng chữ do ký tự xuống dòng (DOS CR-LF). Bạn có thể chuyển đổi DOS newlines CR-LF sang định dạng Unix / Linux bằng cú pháp sau:

dos2unix my-script.sh

Mẹo 1: Gửi thông báo gỡ lỗi tới stderr

Lỗi chuẩn là thiết bị xuất lỗi 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 một thông báo đến thiết bị lỗi mặc định:

# Ghi lỗi vào stdout

echo “Lỗi: không tìm thấy File $ 1”

#

# Ghi lỗi vào stderr (lưu ý 1> & 2 ở cuối lệnh echo)

#

echo “Lỗi: $ 1 File không tìm thấy” 1> & 2

Mẹo 2: Bật Đánh dấu cú pháp khi sử dụng trình soạn thảo văn bản vim

Hầu hết các trình soạn thảo văn bản hiện đại đều cho phép bạn thiết lập các tùy chọn tô sáng cú pháp. Đ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 dấu ngoặc kép. Bạn có thể thấy tập lệnh bash bằng các màu khác nhau. Tính năng này giúp việc viết trong các cấu trúc shell script dễ dàng hơn và các lỗi cú pháp sẽ khác nhau một cách trực quan. Đánh dấu không ảnh hưởng đến ý nghĩa của văn bản; nó chỉ dành cho bạn. Trong ví dụ này, tô sáng cú pháp vim được sử dụng cho tập lệnh bash:

Mình nghĩ bạn cần xem =>  3 cách đổi mật khẩu wifi trên điện thoại cực đơn giản

Mẹo 3: Sử dụng shellcheck để lint script

ShellCheck là một công cụ phân tích tĩnh cho các tập lệnh shell, giúp tìm ra lỗi trong các tập lệnh shell. 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 tập lệnh shell bash / sh bằng công cụ này.

Dịch từ: cyberciti.biz/tips/debugging-shell-script.html

>> 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.

✤ Top 20 bài viết Thủ Thuật mới nhất :

Xem thêm nhiều Thủ Thuật mới hay

Leave A Reply

Your email address will not be published.