中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Shell腳本的書寫規范與優秀的開發習慣

發布時間:2020-03-22 08:25:02 來源:網絡 閱讀:5904 作者:2012hjtwyf 欄目:開發技術



<--目錄-->
1)腳本模塊名
2)代碼框架
3)函數規范
4)腳本存放規范
5)補充規范19條
6)優秀的開發習慣

【腳本模塊名】
1、常規Shell腳本使用統一后輟:.sh,例:wsyht.sh
2、模塊的啟動和停止腳本統一命名為start_{模塊名}.sh和sop_{模塊名}.sh
3、監控腳本可以*_mon.sh為后輟,控制腳本以*_ctl.sh為后輟
4、模塊(及其腳本和二進制程序)命名應該代表其特性和功能,不要使用個人名字縮寫等形式命名
5、模塊中的腳本和二進制程序命名禁止和其它腳本和二進制程序重名

【代碼框架】
1、腳本開頭解釋器聲明為 #!/bin/bash,也可以為#!/bin/sh,盡量統一
2、配置文件及庫函數腳本等的引用如,source conf/httpd.conf
3、主腳本過程只實現程序主干,功能實現盡量封裝在子函中
4、對于能獨立執行的腳本要有 usage 和 version 函數,可以輸出腳本用法和版本信息

5、規范代碼樹如下:
[root@localhost ~]# tree
|-- bin
| `-- ipsecct
|-- conf
| `-- ipsec.cfg
`-- func
`-- functions

【函數規范】
1、函數定義時在函數名前加上function保留字,雖然/etc/init.d/functions中沒有這樣做
2、盡量一行一條語句,而不是使用":"將多個語句隔開,盡可能多的判斷操作是否成功,并對其進行相應處理
3、對于重要的函數,需說明函數用途,參數,返回值,作者,版本

【腳本存放規范】
1、服務控制腳本統一放置在/service/scripts目錄下;如果多個運維人員,可以放在以自已用戶命名的二級目錄下

      如/server/scrips/username;比如我開發的腳本可以放在/server/scripts/wsyht下

【補充規范19條】
1、必須要有基本的日志輸出
2、要關注腳本的效率和系統消耗,綜合、平衡的考慮
3、函數參數傳遞:在調用函數時,向函數傳遞的參數如果是以變量的方式進行傳遞

     必須使用雙引號將變量引起,這是為了防止某個變量中以多個空格分隔的字段,導致函數誤認為是多個參數
4、避免cat大文件。比如for id in `cat id_file`;do … ;done。而是采用readline形試讀入文件
5、對上一個命令需要if [ $? ]判斷返回值,對于異常分支,需有相應的處理策略;或打印warning日志,或提示后退出
6、sort超過1G數據文件時,必須用-T指定臨時文件夾,推薦在使用到sort的時候就使用-T指定到自身的TMP目錄
7、避免使用大的while/for循環,如果實在需要,請考慮用awk命令替代
8、對于一系列有嚴格依賴關系的命令,請使用&&來處理

      比如:make mydir && mv myfile mydir; 對于有前后次序的腳本,禁止采用后臺運行 & 命令。(推薦)
9、腳本運行前后,注意清除過期數據(上次運行生成的數據),注意rm的風險,可考慮替代方法,如find
10、對于功能較為復雜的腳本,考慮使用一些函數對功能點進行封裝。這樣可以使腳本清晰易讀。(推薦)
11、任何出錯情況必須將出錯信息打印到日志中;嚴重的錯誤必須以郵件或短信報警的形式發出。(必須)
12、對于邏輯比較復雜的腳本,可以使用 set -x 來打印命令執行情況,便于調式和排錯(推薦)。
13、wget之前,注意先刪除本地文件;(推薦)
14、拷貝比較大的文件,最好先將文件cp到一個臨時文件夾,然后mv到目標文件夾,避免下游模塊讀取到不完整文件
15、mv,cp模塊,注意要使用命令全路徑,直接強制替換,如/bin/cp -ap wsyht /tmp
16、腳本中,要注意對單引號'' 雙引號"" 的轉義,不明確轉義啟義的,在自測的時候多加小心。(推薦)
17、例用ps axuw|grep 來獲取信息時,注意ps打印的最大寬度。建議多打幾個w,例如ps auxwww|grep … ;(推薦)
18、使用sort,uniq,join,comm等命令時,要注意兩點:

1) 是否要求排序(例如uniq,join,comm要求輸入文件是排好序的);
2) 如果排序,要求以什么方式排序(例如,comm要求輸入文件是排好序的,而不是數值序);(推薦)

19、對于Java程序腳本要環境變量的,寫腳本前最好通過export重新聲明環境變量,以免在定時任務場合使用出問題

【優秀的開發習慣】
1、盡量少用中文注釋:如果非要用,要根據自身的客戶端對服務器進行字符集調整
      如:export LANG="zh_CN.GB18030"在腳本中,調整下了符集

2、盡量以.sh為擴展名
      例:script-name.sh

3、書寫代碼習慣:
      a.成對內容的一次寫出來。如:
     {}、[]、''、``、""
      b.流程控制語然一次書寫完,如:
      if語句格式一次完成:
      c: 書寫[]時,添內容之前直接兩端的空格留出來,例: [ content ]
      d.變量的字符串定義加雙引號,等號前后不能有空格。WSYHT_FILE="test.txt"
      e.變量的引用加雙引號,大括號,"{WSYHT_FILE}"
      f.特別注意,腳本中的單引號

4、調整vim語法配置,及內容自動補便配置


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

忻城县| 定州市| 怀远县| 曲阳县| 兴隆县| 水城县| 九台市| 泽库县| 洪湖市| 九寨沟县| 蒙阴县| 易门县| 偏关县| 紫金县| 合江县| 新竹县| 库尔勒市| 东城区| 门源| 金溪县| 如皋市| 洞头县| 苏尼特右旗| 会理县| 安化县| 林州市| 秦皇岛市| 肥乡县| 边坝县| 郧西县| 平山县| 合川市| 峡江县| 合水县| 义乌市| 拉孜县| 武川县| 涟水县| 宜黄县| 西林县| 德阳市|