新聞中心
在Linux/Unix平臺下編寫B(tài)ash的時候,shellcheck是一款不錯的工具。當(dāng)編譯大量的Bash代碼的,常常會花掉大量的時間,然而通過shellcheck你可以提前知道腳本的語法問題,shellcheck也會給出糾錯提示。

公司主營業(yè)務(wù):成都做網(wǎng)站、網(wǎng)站設(shè)計、外貿(mào)營銷網(wǎng)站建設(shè)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出龍湖免費做網(wǎng)站回饋大家。
安裝shellcheck
要在基于 Debian/Apt 的 Linux 發(fā)行版(如 Ubuntu 和 Mint)上安裝shellcheck,請在終端中執(zhí)行以下命令:
linuxmi@linuxmi:~/www.linuxmi.com$ sudo apt install shellcheck
要在基于 RedHat/Yum 的 Linux 發(fā)行版(如 RHEL、Centos 和 Fedora)上安裝shellcheck,請在終端中執(zhí)行以下命令:
linuxmi@linuxmi:~/www.linuxmi.com$ sudo yum install shellcheck
運行*shellcheck*
在安裝了 shellcheck 后,我們就可以用一個損壞的腳本做一個簡單的測試。首先我們定義我們的腳本linuxmi.com.sh如下:
#!/bin/hash
echo 'Bash 不是 Hash echo 為我回應(yīng)更多錯誤www.linuxmi.com" if [ -d ./linuxmi }; than echo 'sure!
你能找到多少bug?(提示:有 8 個!)。接下來讓我們看看 shellcheck 對這段代碼的影響:
linuxmi@linuxmi:~/www.linuxmi.com$ shellcheck linuxmi.sh
1、它立即在第一行發(fā)現(xiàn)shebang規(guī)范存在問題。我們的 shebang 這一行#!/bin/hash應(yīng)該是#!/bin/bash。讓我們解決這個問題。問題 1/8 已修復(fù)!我們還將同時修復(fù) shellcheck 立即識別的另外兩個問題:2、您是否忘記關(guān)閉這個單引號字符串?(Did you forget to close this single quoted string?),對于第二行:很準(zhǔn)!問題 2/8 已修復(fù)。3、對于第三個問題,我們/開發(fā)人員對 shellcheck 的意圖有點混亂,這是可以預(yù)料的,因為第2 行打開了一個字符串,該字符串'僅在第 5 行看到另一個'時才終止!由于第三個問題是第二個問題的結(jié)果,因此這次運行將允許我們暫時修復(fù)兩個問題。我們的腳本現(xiàn)在看起來像這樣:
#!/bin/bash
echo 'Bash 不是 Hash'
echo 為我回應(yīng)更多錯誤www.linuxmi.com" if [ -d ./linuxmi }; than echo 'sure!
在進(jìn)行更正后,讓我們再次運行 shellcheck,看看輸出是什么。在這種情況下,shellcheck 看到一個 "在第 3 行打開(即使它在行尾,它實際上是一個打開的雙引號),并且即使在腳本結(jié)尾(注意第 8 行的指示,這在我們的6行腳本中并不存在,在最后一行之后只有一個空行。讓我們清理這一空行,并修復(fù)第3行開頭的雙引號問題,現(xiàn)在可以很容易地理解。問題3/8已修復(fù)!我們的腳本現(xiàn)在看起來像這樣:
#!/bin/bash
echo 'Bash 不是 Hash'
echo "為我回應(yīng)更多錯誤www.linuxmi.com"
if [ -d ./linuxmi }; than
echo 'sure!
重新運行 shellcheck(注意這些步驟與在其他編碼語言中使用編譯器有多么相似):再清楚不過了;提到的語法錯誤出現(xiàn)在這個 if 表達(dá)式中,并且預(yù)期測試將在這里結(jié)束。我們將按照建議進(jìn)行操作并將 }更改為],使該行變?yōu)?code>if [ -d ./linuxmi ]; than. 問題 4/8 已修復(fù)!我們重新運行 shellcheck,現(xiàn)在顯示以下內(nèi)容:另一個單引號問題。我們已經(jīng)知道如何解決這些問題。讓我們更改echo 'sure! 為echo 'sure!' (問題 5/8 已修復(fù)?。┎⒃俅沃匦逻\行 shellcheck:有趣的是,我們看到 shellcheck 無法解析一行。雖然這看起來像是 shellcheck 中的一個缺點,但進(jìn)一步閱讀,我們會發(fā)現(xiàn)then中的 e 應(yīng)該為 a。哦哦!我們要放置than而不是then. 多么粗心的錯誤 很容易修復(fù)(問題 6/8 已修復(fù)!)。我們的腳本現(xiàn)在看起來像這樣:
#!/bin/bash
echo 'Bash 不是 Hash'
echo "為我回應(yīng)更多錯誤www.linuxmi.com"
if [ -d ./linuxmi ]; then
echo 'sure!'
另一個 shellcheck 運行為我們提供了另一個有用的信息:我們把fi弄丟了!哦哦,是的,fif不行。我們要在腳本的最后一行更改fif為fi。(問題 7/8)修復(fù)。并再次運行 shellcheck!重定向問題。老實說,我沒想到shellcheck也會發(fā)現(xiàn)這個錯誤,因為它也可以在 Bash 中使用,但它確實發(fā)現(xiàn)了。事實上,我們的重定向是為了>代替.問題 8/8 – 所有問題 – 已修復(fù)!這就引出了最后一個腳本
#!/bin/bash
echo 'Bash 不是 Hash'
echo "為我回應(yīng)更多錯誤www.linuxmi.com"
if [ -d ./linuxmi ]; then
echo 'sure!' > start
fi
讓我們看看 shellcheck 現(xiàn)在是怎么想的。完美的!從第一次執(zhí)行開始,腳本運行完美。如果您查看各種 shellcheck 命令的輸出,您還會注意到 shellcheck 的另一個非常方便的功能。尤其是對于初學(xué)者:顯示一組超鏈接(網(wǎng)站鏈接),可以在終端窗口中單擊鼠標(biāo),或者您可以選擇(如有必要)> 右鍵單擊以復(fù)制然后粘貼到瀏覽器中。單擊此類鏈接將帶您進(jìn)入shellcheck GitHub 項目。
想要快速檢查
如果您只想快速檢查最重要的選項,您可能希望查看該--severity={SEVERITY}選項,您可以將{SEVERITY}其中的一個替換為error, warning, info, style.因此,您只是在尋找錯誤和警告,您將使用--severity=warning(包括更高級別,在這種情況下僅為error)作為shellcheck的選項。
總結(jié)
如果腳本中的邏輯沒有問題,則shellcheck在執(zhí)行腳本之前運行并修復(fù)所有發(fā)現(xiàn)的問題將確保第一次運行時準(zhǔn)完美。您甚至可以在該編碼挑戰(zhàn)中使用 shellcheck 進(jìn)行下一次現(xiàn)場 Bash 編碼面試!在本文中,我們探討了腳本中可能出現(xiàn)的各種問題以及如何shellcheck處理它們。
當(dāng)前文章:通過shellcheck查找和修復(fù)LinuxShell腳本錯誤
文章URL:http://m.5511xx.com/article/coijcdj.html


咨詢
建站咨詢
