1. 程式人生 > >編寫shell指令碼的規範

編寫shell指令碼的規範

[toc] # 編寫shell指令碼的一些規範 ## 直譯器 shell指令碼一般選擇bash作為直譯器,指令碼開頭應為 ```shell #!/bin/bash 或 #!/bin/sh ``` ## 新增指令碼版本和註釋功能 在指令碼的開頭加註釋,說明指令碼作者、編寫時間、指令碼功能,最好可以加上指令碼的版本號。shell中指令碼註釋用`#`,註釋語句和`#`號之間有一個空格 ```shell #!/bin/bash # 指令碼版本 # 指令碼作者 # 指令碼時間 # 指令碼功能 ``` ## 新增指令碼除錯 通過`set`命令新增指令碼除錯,如果報錯,指令碼直接退出,不繼續執行,對於管道錯誤也可以直接退出 ```shell #!/bin/bash # 指令碼版本 # 指令碼作者 # 指令碼時間 # 指令碼功能 set -e set -o pipfail ``` ## 變數命名 變數命名要統一規範,shell變數建議使用**全部大寫**,意思清晰明瞭,如果是多個字元,可以採用下劃線進行切割,如`APACHE_LOG_PATH`,對於變數的引用可以直接使用`$`,如果有下劃線分割槽的變數,建議使用`${APACHE_LOG_PATH}`。 ### 全域性變數和區域性變數 全域性變數可以採用前面時候的定義方式,如果是函式中的區域性變數,建議使用`local`進行變數宣告。這個防止全域性變數和區域性變數混淆,區域性變數可以採用小寫,用來區分區域性變數和全域性變數。 ```shell function TestFunc(){ local name='xiaolangjun' echo ${name} } ``` 如果存在變數合併的情況,比如目錄和檔名合併,這樣可以重新賦值成一個新的變數,這樣方便以後呼叫。 ## 命名規範 ### 函式命名 函式命名一般單詞的首字母大寫,比如`GetInformation`,意思清晰。 - 獲取最大值或最小值時後綴使用`Max`、`Min` - 獲取資訊或者返回值的函式可以使用`Get`作為字首 - 判斷函式可以使用`Is`作為字首 ### 指令碼命名 指令碼命名,根據指令碼功能進行命名,字尾為`.sh`,如果在指令碼執行過程中產生一些臨時檔案,建議採用PID為字尾,如果指令碼執行完成,這個檔案沒有用途,則自動進行刪除。 ```shell PID=$$ TMP_FILE="ip_list".${PID} ``` ## 函式 - 函式定義,建議新增`function`關鍵字 - 函式中縮排可以使用**4個空格** - 函式中使用判斷或者迴圈語句,使用統一風格,不要有的換行,有的不換行 - 多管道語句,建議可以進行拆分,增加可讀性,可以將通用部分提取 - 使用 `&&` 或 `||` 可以簡化判斷語句,語義更加清晰 ## 引用模組或檔案 引用指令碼或者模組檔案時,添加註釋,簡要說明模組的主要功能和作用,使用`.`或者`source` ## 指令碼日誌 指令碼中建議新增**日誌函式**,這樣方便指令碼除錯,**指令碼執行中各函式的輸出和狀態**,日誌檔案中包括時間-日誌級別-函式,日誌建立log目錄,有常規的log和錯誤log。 ## 配置檔案 在工程目錄下建立conf目錄,配置檔案以.conf為字尾,配置欄位要風格統一,每個配置提供相關配置註釋 ## 其他 - 指令碼中路徑變數,建議使用絕對路徑,最後面不要使用/結尾,例如:`LOG_DIR="/var/log"` - 如果指令碼中有重要檔案拷貝,建議使用**md5進行一致性檢查**,尤其是遠端拷貝