shell腳本書寫規范


N年后的第一更,這里主要記錄一些平時自己不太注意的點

 

1. shell腳本開頭要注明解釋器,並且推薦下面這種方式:

#!/usr/bin/env bash

 

2. 一行代碼太長,需要用 “\” 進行分行,看起來更美觀

./configure \
-prefix=/usr \
-sbin-path=/usr/sbin/nginx \
-conf-path=/etc/nginx/nginx.conf

 

3. 在腳本中獲取外部命令返回值的正確方式:

Num=$(wc -l FileName.txt|awk '{print $1}')

 

4. 在定義函數時,最好對函數的輸入輸出類型做注釋

[] <- ()  # 輸入空,輸出空
[String] <- (var1: String, var2: String) # 輸入兩個字符型變量,輸出字符型
[Boolean] <- (var1: String, var2: Int) # 輸入字符型變量1,整型變量2,輸出布爾值
[] <- (var1: String)

例如:
#[string] <- (string)
Test(){
  Name=$1
  echo "Hello! My Name is:" ${Name}
}

 

5. 一般用於外部調用的函數,用function定義;如果僅腳本內部使用,建議不加function關鍵詞

# 通常情況下用於外部調用
function External(){
    XXXX
}

# 通常情況下僅腳本內使用
Internal(){
    XXXX
}

 

6. 在函數內部定義變量時,盡量使用local進行定義,限制變量作用范圍

func(){
    local var=2
    echo ${var}
}    

 

7. shell腳本函數返回值只能是整數,string類型的返回值是會報錯的;

通常情況下整數推薦使用echo;Boolean類型推薦使用return;

獲取函數返回值可以使用return或者在函數內用echo

func(){
    echo "Nothing print"
}
Info=$(func)
echo "This is from Func ${Info}."
# 或者使用return返回,在獲取返回值時,只能用 $? 進行捕獲
func(){ local var
=2 return ${var} } func echo "Function return value is:" $?

 

8. shell函數調用

調用外部腳本中的函數之前,需要先source一下腳本,推薦使用相對路徑!(source腳本時,會將腳本中的全局變量、函數加載到當前腳本中)(外部調用的函數,在定義時最好使用function定義)

在腳本內部執行外部腳本: bash + 腳本名稱

#!/usr/bin/env bash
source .
/../../BaseShell/Log/BaseLog.sh function f1(){   echo "I am f1" }
function main(){   log_info "LINENO:${LINENO} 開始執行" #調用 ./../../BaseShell/Log/BaseLog.sh 中的函數,需要先用source BaseLog.sh   f1 #在函數內部調用當前腳本內的函數   log_success "LINENO:${LINENO} 結束執行" #調用 ./../../BaseShell/Log/BaseLog.sh 中的函數 }
main #在腳本內部調用當前腳本內的函數 bash ChangBaiShanFetcher.
sh #執行其他腳本 bash ChangBaiShanFetcher.sh main #執行其他腳本的main方法,前提是 ChangBaiShanFetcher.sh 腳本 支持按函數名調用

 

9. 會使用shellcheck對代碼進行檢查


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM