編寫shell指令碼的規範

青絲一夜走發表於2020-10-29

編寫shell指令碼的一些規範

直譯器

shell指令碼一般選擇bash作為直譯器,指令碼開頭應為

#!/bin/bash
或
#!/bin/sh

新增指令碼版本和註釋功能

在指令碼的開頭加註釋,說明指令碼作者、編寫時間、指令碼功能,最好可以加上指令碼的版本號。shell中指令碼註釋用#,註釋語句和#號之間有一個空格

#!/bin/bash

# 指令碼版本
# 指令碼作者
# 指令碼時間
# 指令碼功能

新增指令碼除錯

通過set命令新增指令碼除錯,如果報錯,指令碼直接退出,不繼續執行,對於管道錯誤也可以直接退出

#!/bin/bash

# 指令碼版本
# 指令碼作者
# 指令碼時間
# 指令碼功能

set -e 
set -o pipfail

變數命名

變數命名要統一規範,shell變數建議使用全部大寫,意思清晰明瞭,如果是多個字元,可以採用下劃線進行切割,如APACHE_LOG_PATH,對於變數的引用可以直接使用$,如果有下劃線分割槽的變數,建議使用${APACHE_LOG_PATH}

全域性變數和區域性變數

全域性變數可以採用前面時候的定義方式,如果是函式中的區域性變數,建議使用local進行變數宣告。這個防止全域性變數和區域性變數混淆,區域性變數可以採用小寫,用來區分區域性變數和全域性變數。

function TestFunc(){
	local name='xiaolangjun'
	echo ${name}
}

如果存在變數合併的情況,比如目錄和檔名合併,這樣可以重新賦值成一個新的變數,這樣方便以後呼叫。

命名規範

函式命名

函式命名一般單詞的首字母大寫,比如GetInformation,意思清晰。

  • 獲取最大值或最小值時字尾使用MaxMin
  • 獲取資訊或者返回值的函式可以使用Get作為字首
  • 判斷函式可以使用Is作為字首

指令碼命名

指令碼命名,根據指令碼功能進行命名,字尾為.sh,如果在指令碼執行過程中產生一些臨時檔案,建議採用PID為字尾,如果指令碼執行完成,這個檔案沒有用途,則自動進行刪除。

PID=$$
TMP_FILE="ip_list".${PID}

函式

  • 函式定義,建議新增function關鍵字
  • 函式中縮排可以使用4個空格
  • 函式中使用判斷或者迴圈語句,使用統一風格,不要有的換行,有的不換行
  • 多管道語句,建議可以進行拆分,增加可讀性,可以將通用部分提取
  • 使用 &&|| 可以簡化判斷語句,語義更加清晰

引用模組或檔案

引用指令碼或者模組檔案時,新增註釋,簡要說明模組的主要功能和作用,使用.或者source

指令碼日誌

指令碼中建議新增日誌函式,這樣方便指令碼除錯,指令碼執行中各函式的輸出和狀態,日誌檔案中包括時間-日誌級別-函式,日誌建立log目錄,有常規的log和錯誤log。

配置檔案

在工程目錄下建立conf目錄,配置檔案以.conf為字尾,配置欄位要風格統一,每個配置提供相關配置註釋

其他

  • 指令碼中路徑變數,建議使用絕對路徑,最後面不要使用/結尾,例如:LOG_DIR="/var/log"
  • 如果指令碼中有重要檔案拷貝,建議使用md5進行一致性檢查,尤其是遠端拷貝

相關文章