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