(029) Linux之shell故障診斷

來源:互聯網
上載者:User

標籤:

十年營運系列之基礎篇 - Linux

曾林 

聯絡:[email protected]

網站:www.jplatformx.com

著作權:文章未經同意請勿轉載

一、引言

  隨著指令碼的複雜度越來越高,當指令碼出現錯誤或者執行情況和預期不同的時候,就需要看看是哪裡出現了問題。本章將講解一些指令碼中常見的錯誤類型以及幾種用於追蹤和解除錯誤的有用技巧。

 

二、語法錯誤

  語法錯誤是一種常見的錯誤類型,其中就包括了shell語句中一些元素的拼字錯誤。在大多數情況下,shell會拒絕執行含有此種類型錯誤的指令碼。

  在接下來的討論過程中,我們將使用以下指令碼(foo.sh)來示範常見的錯誤類型。具體如下代碼:

#!/bin/bash# foo: script to demonstrate common errorsnumber=1if [[ $number == 1 ]];then    echo "number is equal to 1." else    echo "number is not equal 1." fiexit

  此指令碼經過運行後並沒有錯誤,而且可以正常運行。運行結果如所示:

  

1. 引號缺失

  現在修改上述指令碼,刪除第一個echo命令後實參後的雙引號。具體如:

#!/bin/bash# foo: script to demonstrate common errorsnumber=1if [[ $number == 1 ]];then    echo "number is equal to 1.else    echo "number is not equal 1." fiexit

  運行後的結果如所示:

  此刪除動作使指令碼產生了兩個錯誤。有趣的是,錯誤報表指出的行並不是之前所刪除雙引號所在的行,而是之後的代碼。可以看到,當系統讀取到所刪除雙引號的位置之後,bash將繼續向下尋找與前雙引號對應的引號,這樣的行為會一直延續到bash找到目標,也就是在第二個echo命令後的第一個引號處。然後bash就陷入了混亂之中,即if命令的文法結構被破壞了,fi語句現在處於了引號標識(但是又只有一邊存在引號)的字串中。

  這種類型的錯誤在長指令碼中很難發現,而使用帶有文法結構反白功能的編輯器能夠協助找到這類錯誤。如果系統配備的是完整版的vim,可使用以下命令啟用vim的文法結構反白功能。文法如下:

  :syntax on

 

2. 符號缺失

  另一種常見的錯誤是如if或while這樣的複合命令結構不完整。比如我們現在就刪除上面指令碼中的if命令中的test部分後的分號,看看會發生什麼情況。代碼如下:

#!/bin/bash# foo: script to demonstrate common errorsnumber=1if [[ $number == 1 ]] then    echo "number is equal to 1." else    echo "number is not equal 1." fiexit

  執行結果如所示:

 

 

  

 

(029) Linux之shell故障診斷

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.