2011-08-22 113 views
5

如何檢查包含在KSH shell腳本語法的正確性不執行呢?爲了明確我的觀點:在perl中我們可以執行命令:shell腳本 - 檢查語法

perl -c test_script.pl 

檢查語法。是類似於這在ksh中可用?

回答

4

ksh -n

大部分Borne Shell家族都接受-n。 tcsh也是如此。在如果

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

注意失蹤]:

+0

它似乎並不奏效。我執行KSH -n test.sh但它並沒有列出這是那裏test.sh – sachin

+0

是它的工作的語法錯誤。我相信沒有語法錯誤。如果您向我們展示腳本,我們可以分析您的期望是否發現語法錯誤是正確的。 – Jens

+1

然後用'sh -n腳本'嘗試。它應該工作。但是,如果您的語法錯誤位於無效的命令名稱中,則只會在運行時捕獲。 'sh -n'只檢查實際的shell語法。 – tripleee

1

我做了一個小測試用下面的代碼。現在我輸入了

bash -n buggyScript.sh 

並且缺少]未被檢測到。

第二個測試腳本是這樣的:

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

注意失蹤Fi的在IF結束。此測試與

bash -n buggyScript.sh 

返回

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

結論: 測試與n選項的腳本檢測到一些錯誤,但絕不是全部。所以我想你只有在執行腳本時纔會發現所有錯誤。

1

您說的測試未能檢測到語法錯誤,其中語法錯誤實際上不是語法錯誤... echo是一個命令(確定是內置的,但仍然是命令),所以ksh/bash不會檢查拼寫/你的命令的語法。 類似地,「[」,有效地是用於測試命令的別名,並且命令預計閉括號「]」作爲它的語法,而不是KSH/bash的的一部分。 So -n在罐子上說什麼,你只是沒有正確閱讀錫罐! :-)