2011-08-22 42 views
5

Làm thế nào để kiểm tra tính chính xác của cú pháp có trong kịch bản lệnh shell ksh mà không thực thi nó? Để làm rõ vấn đề của tôi: trong perl chúng ta có thể thực hiện lệnh:Shell script - kiểm tra cú pháp

perl -c test_script.pl 

để kiểm tra cú pháp. Là một cái gì đó tương tự như này có sẵn trong ksh?

Trả lời

4

ksh -n

Hầu hết gia đình Borne Shell đều chấp nhận -n. tcsh là tốt.

+0

Nó dường như không hoạt động. Tôi đã thi hành ksh -n test.sh nhưng nó không liệt kê ra lỗi cú pháp đã có trong test.sh – sachin

+0

Có nó không hoạt động. Tôi chắc chắn không có lỗi cú pháp. Nếu bạn chỉ cho chúng tôi kịch bản chúng tôi có thể phân tích nếu bạn mong đợi việc tìm ra lỗi cú pháp là chính xác. – Jens

+1

Sau đó thử với 'sh -n script'. Nó sẽ hoạt động. Tuy nhiên, nếu lỗi cú pháp của bạn nằm trong một tên lệnh không hợp lệ, điều đó sẽ chỉ bị bắt khi chạy. 'sh -n' chỉ kiểm tra cú pháp shell thực tế. – tripleee

1

Tôi đã làm một thử nghiệm nhỏ với đoạn mã sau:

#!/bin/bash 
if [ -f "buggyScript.sh" ; then 
    echo "found this buggy script" 
fi 

Lưu ý các thiếu] trong nếu. Bây giờ tôi đã nhập

bash -n buggyScript.sh 

và mất tích] không được phát hiện.

Các kịch bản thử nghiệm thứ hai trông như thế này:

#!/bin/bash 
if [ -f "buggyScript.sh" ]; then 
    echo "found this buggy script" 

Lưu ý fi mất tích tại ở cuối nếu. Thử nghiệm này với

bash -n buggyScript.sh 

trở

buggyScript.sh: line 5: syntax error: unexpected end of file 

Kết luận: kiểm tra kịch bản với tùy chọn n phát hiện một số lỗi, nhưng không có nghĩa là tất cả chúng. Vì vậy, tôi đoán bạn thực sự tìm thấy tất cả các lỗi chỉ trong khi thực hiện kịch bản.

1

Các kiểm tra mà bạn nói không phát hiện lỗi cú pháp, trong đó không có lỗi cú pháp thực tế ... echo là lệnh (OK nội trang, nhưng vẫn là lệnh) vì vậy ksh/bash sẽ không kiểm tra chính tả/cú pháp lệnh của bạn. Tương tự "[" thực sự là bí danh cho lệnh kiểm tra và lệnh hy vọng dấu ngoặc đóng "]" là một phần của cú pháp, không phải là ksh/bash. Vì vậy, -n những gì nó nói trên tin, bạn chỉ cần không đọc tin chính xác! :-)

Các vấn đề liên quan