<--目錄-->
1)腳本模塊名
2)代碼框架
3)函數(shù)規(guī)范
4)腳本存放規(guī)范
5)補充規(guī)范19條
6)優(yōu)秀的開發(fā)習慣
【腳本模塊名】
1、常規(guī)Shell腳本使用統(tǒng)一后輟:.sh,例:wsyht.sh
2、模塊的啟動和停止腳本統(tǒng)一命名為start_{模塊名}.sh和sop_{模塊名}.sh
3、監(jiān)控腳本可以*_mon.sh為后輟,控制腳本以*_ctl.sh為后輟
4、模塊(及其腳本和二進制程序)命名應(yīng)該代表其特性和功能,不要使用個人名字縮寫等形式命名
5、模塊中的腳本和二進制程序命名禁止和其它腳本和二進制程序重名
【代碼框架】
1、腳本開頭解釋器聲明為 #!/bin/bash,也可以為#!/bin/sh,盡量統(tǒng)一
2、配置文件及庫函數(shù)腳本等的引用如,source conf/httpd.conf
3、主腳本過程只實現(xiàn)程序主干,功能實現(xiàn)盡量封裝在子函中
4、對于能獨立執(zhí)行的腳本要有 usage 和 version 函數(shù),可以輸出腳本用法和版本信息
5、規(guī)范代碼樹如下:
[root@localhost ~]# tree
|-- bin
| `-- ipsecct
|-- conf
| `-- ipsec.cfg
`-- func
`-- functions
【函數(shù)規(guī)范】
1、函數(shù)定義時在函數(shù)名前加上function保留字,雖然/etc/init.d/functions中沒有這樣做
2、盡量一行一條語句,而不是使用":"將多個語句隔開,盡可能多的判斷操作是否成功,并對其進行相應(yīng)處理
3、對于重要的函數(shù),需說明函數(shù)用途,參數(shù),返回值,作者,版本
【腳本存放規(guī)范】
1、服務(wù)控制腳本統(tǒng)一放置在/service/scripts目錄下;如果多個運維人員,可以放在以自已用戶命名的二級目錄下
如/server/scrips/username;比如我開發(fā)的腳本可以放在/server/scripts/wsyht下
【補充規(guī)范19條】
1、必須要有基本的日志輸出
2、要關(guān)注腳本的效率和系統(tǒng)消耗,綜合、平衡的考慮
3、函數(shù)參數(shù)傳遞:在調(diào)用函數(shù)時,向函數(shù)傳遞的參數(shù)如果是以變量的方式進行傳遞
必須使用雙引號將變量引起,這是為了防止某個變量中以多個空格分隔的字段,導致函數(shù)誤認為是多個參數(shù)
4、避免cat大文件。比如for id in `cat id_file`;do … ;done。而是采用readline形試讀入文件
5、對上一個命令需要if [ $? ]判斷返回值,對于異常分支,需有相應(yīng)的處理策略;或打印warning日志,或提示后退出
6、sort超過1G數(shù)據(jù)文件時,必須用-T指定臨時文件夾,推薦在使用到sort的時候就使用-T指定到自身的TMP目錄
7、避免使用大的while/for循環(huán),如果實在需要,請考慮用awk命令替代
8、對于一系列有嚴格依賴關(guān)系的命令,請使用&&來處理
比如:make mydir && mv myfile mydir; 對于有前后次序的腳本,禁止采用后臺運行 & 命令。(推薦)
9、腳本運行前后,注意清除過期數(shù)據(jù)(上次運行生成的數(shù)據(jù)),注意rm的風險,可考慮替代方法,如find
10、對于功能較為復雜的腳本,考慮使用一些函數(shù)對功能點進行封裝。這樣可以使腳本清晰易讀。(推薦)
11、任何出錯情況必須將出錯信息打印到日志中;嚴重的錯誤必須以郵件或短信報警的形式發(fā)出。(必須)
12、對于邏輯比較復雜的腳本,可以使用 set -x 來打印命令執(zhí)行情況,便于調(diào)式和排錯(推薦)。
13、wget之前,注意先刪除本地文件;(推薦)
14、拷貝比較大的文件,最好先將文件cp到一個臨時文件夾,然后mv到目標文件夾,避免下游模塊讀取到不完整文件
15、mv,cp模塊,注意要使用命令全路徑,直接強制替換,如/bin/cp -ap wsyht /tmp
16、腳本中,要注意對單引號'' 雙引號"" 的轉(zhuǎn)義,不明確轉(zhuǎn)義啟義的,在自測的時候多加小心。(推薦)
17、例用ps axuw|grep 來獲取信息時,注意ps打印的大寬度。建議多打幾個w,例如ps auxwww|grep … ;(推薦)
18、使用sort,uniq,join,comm等命令時,要注意兩點:
1) 是否要求排序(例如uniq,join,comm要求輸入文件是排好序的);
2) 如果排序,要求以什么方式排序(例如,comm要求輸入文件是排好序的,而不是數(shù)值序);(推薦)
19、對于Java程序腳本要環(huán)境變量的,寫腳本前最好通過export重新聲明環(huán)境變量,以免在定時任務(wù)場合使用出問題
【優(yōu)秀的開發(fā)習慣】
1、盡量少用中文注釋:如果非要用,要根據(jù)自身的客戶端對服務(wù)器進行字符集調(diào)整
如:export LANG="zh_CN.GB18030"在腳本中,調(diào)整下了符集
2、盡量以.sh為擴展名
例:script-name.sh
3、書寫代碼習慣:
a.成對內(nèi)容的一次寫出來。如:
{}、[]、''、``、""
b.流程控制語然一次書寫完,如:
if語句格式一次完成:
c: 書寫[]時,添內(nèi)容之前直接兩端的空格留出來,例: [ content ]
d.變量的字符串定義加雙引號,等號前后不能有空格。WSYHT_FILE="test.txt"
e.變量的引用加雙引號,大括號,"{WSYHT_FILE}"
f.特別注意,腳本中的單引號
4、調(diào)整vim語法配置,及內(nèi)容自動補便配置
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)頁題目:Shell腳本的書寫規(guī)范與優(yōu)秀的開發(fā)習慣-創(chuàng)新互聯(lián)
URL鏈接:http://aaarwkj.com/article2/ccpsic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、云服務(wù)器、網(wǎng)站設(shè)計、App開發(fā)、網(wǎng)站制作、標簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)