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 ()
{
[ “$_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 ({}):
#! / 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ẹ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 :
- Cài đặt LAMP Stack trên Ubuntu 18.04
- Hướng dẫn cài đặt cấu hình định tuyến tĩnh trên Router Cisco
- 8 cách bảo mật mạng không dây wifi giúp làm việc, lướt web an toàn
- 7 cách mở Task Manager trên máy tính Windows 8
- Tổng quan và cách cài đặt NGINX
- Cài đặt Postfix trên CentOS 7
- Những điều cần biết về Computer Forensics
- Cách chèn code Google Analytics vào WordPress đơn giản dễ dàng nhất
- Cách cài đặt IP tĩnh cho thiết bị trên router wifi mạng VNPT đơn giản nhất
- Sử dụng Node.js dễ dàng cho lập trình viên trên máy chủ ảo của BizFly Cloud
- VGA là gì? Bí quyết chọn card màn hình (VGA) phù hợp cho máy tính
- Cách reset win 10 không bị lỗi cho laptop, máy tính
- Nâng cấp win 10 lên những phiên bản cao cấp hơn để sử dụng nhiều tính năng hơn cho máy tính
- 3 cách đổi mật khẩu wifi trên điện thoại cực đơn giản
- Hướng dẫn cách làm trò chơi trên PowerPoint cực đơn giản
- Cách kiểm tra nhiệt độ CPU máy tính bằng phần mềm trên win 10
- Khắc phục lỗi “remote desktop can’t connect to remote computer” – Hướng dẫn chi tiết nhất
- 7 cách làm mờ ảnh online nhanh nhất cho hiệu ứng như ý muốn trên máy tính, điện thoại
- 5 cách nhắn tin trên instagram bằng máy tính cực kỳ đơn giản
- Pagespeed Insights
Xem thêm nhiều Thủ Thuật mới hay