作為一個天天與Linux打交道,並以此為生的Linux運維工程師,最常用的工具性語言恐怕就是shell了, 而對於大多數的Linux和一些類Unix而言,其預設的shell就是Bash。使用Bash一般有兩種場景,一是直接使用命令,二是,將這些命令組合起來,加上邏輯判斷、迴圈、加上異常文本處理工具、 ...
作為一個天天與Linux打交道,並以此為生的Linux運維工程師,最常用的工具性語言恐怕就是shell了, 而對於大多數的Linux和一些類Unix而言,其預設的shell就是Bash。使用Bash一般有兩種場景,一是直接使用命令,二是,將這些命令組合起來,加上邏輯判斷、迴圈、加上異常文本處理工具、加上函數構成shell腳本。用於自動、快速的執行某些批量操作。
為達到某個目的,Bash往往有多種實現方法,比如在腳本中 反引號 ` ` 與$() 是相同的, 這種特性提供方便的同時也為代碼的複雜度和可讀性帶來一定的影響,Bash沒有所謂的規範,只有所謂不同的使用習慣,如下是我平時使用時的一些積累,同時也參考了許多優秀的博客,記錄如下,目的呢就是單純的與大家分享,畢竟互聯網環境下就是互相分享,彼此借鑒,在原有的基礎的創新,最重要的不是人云亦云,而是真正領悟之後的相互點評、思想碰撞。
1.添加註釋
這個不用過多解釋,無論哪種語言這甚至都是必須的,目的是增強可讀性,節約他人和以後的自己熟悉腳本的時間。
2.構建一種一致的格式
我這裡主要指的是縮進 1-- 使用空格(2個或者4個,我一般用4個)取代tab。 2--代碼分層要明確,屬於一級的要對其,這一點Python做的很好,強制要求的。這樣寫出來的shell自己看著心情也不同。
3.編碼習慣上的一些註意
這裡純屬個人習慣,但如下這樣做的好處是使代碼風格更統一,目的還是提高可讀性
1--使用花括弧 { } 。 用花括弧括起來所有的變數名。比如 ${name} 而不是 $name
2--計算表達式中用$() 代替反引號 `` 這樣易於閱讀。
4.比較變數的值時建議採用雙引號將變數括起來。如下:
這樣寫的好處至少有: 當變數為空時依然可以執行。 當變數中有特殊字元時(接收用戶輸入的情況下)依然可以執行。
#!/bin/bash if [ ${name} == "wencheng" ];then echo "hello" fi #####推薦使用如下 #!/bin/bash if [ "${name}" == "wencheng" ];then echo "hello" fi #
5.異常退出時要使用異常退出代碼 如: exit 500 。這樣在此腳本被其他調用時能夠更好的判斷是否執行完成,如若錯誤也能判斷錯誤類型。
6.儘量避免單行代碼過長的問題。 這樣在不同的終端,都能夠正常的顯示。
7.避免命令的複雜性,這個是仁者見仁智者見智的問題,有的時候你是發現不了自己代碼的臃腫程度的。比如:
grep cut 等組合使用達到的效果就不如 awk 來的直接。
借用一個例子:
檢索用戶ID為502的用戶: (第三種會比較的高效)
#一。 cat /etc/passwd | grep 502 |cut -d: -f1 #二。 grep 502 /etc/passwd |awk -F":" '{print $1}' #三。 awk -F ":" '$3 == 502{print $1}' /etc/passwd
先總結這些,歡迎指正。
另外附上控制輸出終端顏色的方法 : https://misc.flogisoft.com/bash/tip_colors_and_formatting