shell腳本的規範
1、腳本的解釋器
shell腳本開頭(第一行)會指出由哪個程序(解釋器)來解釋腳本中的內容。這一行必須在腳本頂端的第一行,如果不是第一行則爲註釋。不管寫什麼腳本最好養成好習慣,都加上解釋器名稱,例如:#!/bin/bash。”#!”又稱爲幻數
sh和bash的區別爲:sh爲bash的軟鏈接,這裏推薦用標準寫法#!/bin/bash
下面是Linux中常用腳本語言開頭的編碼寫法,不同語言腳本的開頭一般都要加上如下相應語言的開頭標識內容。
#!/bin/sh #!/bin/bash #!/usr/bin/awk #!/bin/sed #!/usr/bin/tcl #!/usr/bin/expect #!/usr/bin/perl #!/usr/bin/env python
注意:如果腳本的開頭不指定解釋器,那麼腳本就會使用系統默認的解釋器執行,這樣在某些情況下就會出現錯誤,所以一定要養成良好的習慣,在腳本的第一行指定解釋器。
2、腳本註釋
在shell腳本中跟在”#”號後面的內容爲註釋,用來對腳本進行說明,註釋部分不會被執行,僅僅是方便人們查看和理解腳本。必須要養成寫註釋的良好習慣,可以方便團隊協作。同時也方便自己以後查看更加方便。
3、shell腳本的執行
當shell腳本以非交互式運行時,它會先查找環境變量ENV,該變量指定了一個環境文件(通常是.bashrc),然後從該環境變量文件開始執行,當讀取了ENV文件後,shell纔開始執行shell腳本中的內容。
shell腳本執行的三種方式,例如執行/root/install_httpd.sh:
a、bash腳本文件名(不需要執行權限即可執行)
例如:bash /root/install_httpd.sh
b、絕對路徑/腳本文件名(需要執行權限)
例如:chmod +x /root/install_httpd.sh && /root/install_httpd.sh
c、source腳本文件名(需要執行權限)
例如:chmod +x /root/install_httpd.sh && source /root/install_httpd.sh
注意:在腳本文件中如果想調用另外的腳本文件,不能使用sh或bash,只能使用點或者source來進行調用。
4、shell腳本開發基本規範
4.1、開頭指定腳本解釋器
#!/bin/sh 或 #!/bin/bash
4.2、開頭注意加時間、作者、聯繫郵箱、腳本作用等信息
可配置vim編輯文件時自動加上以上信息,方法是修改~/.vimrc配置文件
4.3、腳本中儘量不要使用中文註釋
儘量使用英文註釋,防止切換系統環境後出現中文亂碼問題
4.4、shell腳本使用.sh結尾
例:script-name.sh,這樣方便自己或他人識別這是shell腳本文件
5、代碼書寫習慣
5.1、成對的符號儘量一次性寫出來,防止遺漏
有很多人在編寫shell腳本時,由於各種原因多寫或漏寫了符號,導致最終運行腳本時出錯,從而浪費不必要的時間進行排錯。例如:大括號{},中括號[],小括號(),單引號’’,雙引號””,反引號``,等成對出現的符號儘量一次性寫出來,然後在其中寫入合適的代碼即可,這樣就避免了符號的遺漏導致的報錯問題。
3.2、括號的保留空格習慣
中括號[ ]兩端需要留有空格,不然會報錯。書寫時即可留出空格然後書寫內容。如果不知道大括號{},中括號[],小括號(),到底哪種括號需要兩端留空格,可以在書寫這些括號的時候兩端都保留空格來進行書寫,這樣可以有效避免因空格導致的各種錯誤。
3.3、流程控制語句一次性書寫完再添加內容
例1:if語句格式一次書寫完成
if 條件內容 then 條件成立後執行的代碼 fi
例2:for循環格式一次書寫完成
for條件內容 do 條件成立後執行的代碼 done
提示:while、until、case等語句也是一樣
3.4、代碼縮進提高可讀性
例如:下面的代碼輸出1-50之間所有的偶數
#!/bin/bash for i in $(seq 50); do if (( $i%2 == 0 ));then echo $i fi done
6、變量的命名規則
1、變量名必須是以字母或下劃線”_”開頭,後面跟字母、數字或下劃線。
2、變量名中間不能有空格,可以使用下劃線連接。
3、變量名不要使用問號”?”、星號”*”或其他特殊字符。
4、變量名不能使用標點符號,更不能使用bash裏的關鍵字,例如:if,for,while,do等關鍵字。
5、變量名的命名儘量要有意義,最好能夠讓別人一眼能看出什麼意思。
6、自定義變量儘量不要和系統環境變量衝突。
7、局部變量最好使用local進行定義。