腳本編寫規范

腳本編寫規范

  1. 腳本名稱以.sh結尾,名稱見名知意
  2. 盡量使用UTF-8編碼,注釋及輸出盡量使用英文
  3. 一般給到執行權限,但一些關于變量的配置文件不用加執行權限
  4. 執行的時候可以使用bash執行,或者使用bash -x 調試執行
  5. 腳本首行以#!/bin/bash,無空格,不帶選項
  6. 第二行為空格或者添加一行空注釋
  7. 開始注釋內容: 
    #!/bin/bash 
    #(空行)
    #Filename:文件名
    #Dscription:描述
    #Author:作者
    #Revision:版本號
    #Email:坐著聯系方式
    #Date:日期
    #Note:注意事項 #(空行)
  8. 注釋內容之后空一行開始定義腳本中的變量
  9. 腳本內的變量定義,盡量使用大寫,或者駝峰寫法,或者使用下劃線鏈接的方式,避免使用a,b,c類似的定義,變量的定義前后不要空格

    駝峰寫法:YourName=xiaoming
    大寫:YOURNAME=xiaoming
    下劃線鏈接:YOU_NAME=xiaoming 
    注意:
    1、如果是整形,需要使用declare -i聲明
    2、如果是數組,需要使用declare -a聲明
    3、如果是只讀變量,需要使用declare -r聲明
    4、變量值盡量使用雙引號括起,如果使用強引用,如變量值中包含$符號,則使用''單引號將其引用
    5、如果將命令的執行結果賦值給變量,則使用$()或者“

  10. 單引號和雙引號混合使用場景

    echo 'Welcome to "My school"'

  11. 在某些特殊環境下,shell腳本里面引用的命令,有可能是自己定義的bin路徑,在執行的時候會爆出 command not found。

    解決方法:在執行命令的時候跟全路徑,或者在腳本的開始,顯示的設置一下PATH變量
    如: 
    > export PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/apps/bin"

  12. 腳本在執行開始重讀一下/etc/profile;或者是自己定義關于環境斌量的配置文件,使用source或者.號:

    source /etc/profile source /opt/sh/appenv.sh

  13. 使用here documene

    如果腳本在執行的時候需要大段的輸出提示信息,可以使用一下方式:
    cat << EOF
    This scripts used for XX
    Usage:$0 [option]
    Pls be careful
    Enjoy Yourself
    EOF

  14. 如果需要在腳本里生成配置文件的模板,可以使用here document的方式 cat>>/etc/rsyncd.conf<<EOF
    log file = /usr/local/logs/rsyncd.log
    transfer logging = yes
    syslog facility
    timeout = 300
    [data1]
    path=/home/username
    list=yes
    ignore errors
    auth users = date1user
    secrets file=/etc/rsyncd/rsyncd.secrstc
    comment = some description about this moudle
    exclude = test1/ test2/
    EOF
  15. 創建臨時文件

     

    mktemp -d /tmp/file$$

  16. 條件測試的時候,使用[[ ]],對比[]或者test,[[]]功能更加強大
  17. 使用算數運算時,使用(())或者是[],括號內的變量不加$

     

    (12+i)) 而不是((12+$i))

  18. 變量的高級用法

     

    ${YourName:?"LiJing"}確保關鍵斌量已經定義
    ${YourName:="S1"}或者設置默認值
    否則:rm -rf ${GameAone}/* 危險

  19. 使用 && || 代替if then fi 語句
  20. 盡量給沒調語句或者代碼段的執行返回一個執行結果的狀態,使用$?檢查前面每一條命令的執行狀態。
  21. 流程控制語句盡量使用以下方式:

     

    for I in {1..10};do(在使用{1..$1}的時候,使用sed命令

    done
    或者
    while true;do

    done
    以及
    if [];then
    fi

  22. 如果命令過長,可以分成多行來寫:

     

    ./configure \
    –prefix=/usr \
    –sbin-path=/usr/sbin/nginx \

  23. shell 腳本并不強制要求縮進,但可以養成縮進習慣
  24. 盡可能多的寫注釋信息
  25. 在獲取當前腳本所在目錄,可以使用

     

    ScriptDir=$(cd $(dirname $0)&& pwd)

  26. 盡可能使用函數的功能,將不同的功能定義為函數,直接引用函數
  27. 如果自定義環境變量,可以專門寫到一個文件中,避免在/etc/profile中添加
  28. 禁止使用SUID和SGID和ACL用戶訪問列表的功能,如果如果需要極高的權限,可以使用sudo切換到root
  29. 關鍵的操作必須有日志的輸出,專門記錄操作的成功或者失敗以及執行的時間點。
  30. 腳本內可能包含銘感信息,在公開之前先確認敏感信息是否已經刪除

原創文章,作者:半斤八兩,如若轉載,請注明出處:http://www.www58058.com/73427

(0)
半斤八兩半斤八兩
上一篇 2017-04-16 15:26
下一篇 2017-04-16 15:54

相關推薦

  • N-28作業第一周

    N-28作業第一周小結:以前看存儲視頻里面講存儲架構里不清楚的部分居然開始清晰?;A命令需要多花時間熟悉。

    2017-12-05
  • Nginx+Apache+Tomcat實現LANMT動靜分離

    Nginx+Apache+Tomcat實現LANMT動靜分離          目的:    本次實驗主要目的為實現以Nginx作為反向代理,并實現分別訪問動靜態服務的效果。   拓撲結構:     &nbsp…

    Linux干貨 2016-12-05
  • N25-第七周博客作業

    1、創建一個10G分區,并格式為ext4文件系統; (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;(2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; 查看當前分區情況 [root@han ~]# fdisk -l Disk /dev/sda: 42…

    Linux干貨 2017-02-23
  • Sed文本文件工具的使用詳解

    Sed文本文件工具的使用詳解 一、概述 sed 工具實際上就是一個非交互式的編輯器,主要是為了處理文本而生的,我們知道處理文本的三劍客是 grep sed awk 我們之前學習過 grep 文本過濾工具,它的主要作用是為了過濾文本,而sed 工具也是過濾文本,只不過sed工具針對的是文件中的每一行,而且sed工具更加強大,下面還具體說明一下sed 工具的原理…

    Linux干貨 2016-10-09
  • 第一周博客作業

    1、描述計算機的組成及其功能。
    2、按系列羅列Linux的發行版,并描述不同發行版之間的聯系與區別。
    3、描述Linux的哲學思想,并按照自己的理解對其進行解釋性描述。
    4、說明Linux系統上命令的使用格式;詳細介紹ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相應的示例來闡述。
    5、如何在Linux系統上獲取命令的幫助信息,請詳細列出,并描述man文檔的章節是如何劃分的。
    6、請羅列Linux發行版的基礎目錄名稱命名法則及功用規定

    Linux干貨 2018-03-13
  • SHELL中的變量

    SHELL中的變量            運行SHELL腳本中的單個命令自然有用,但這有其自身的限制。通常你會需要在SHELL命令使用其他數據來處理信息。這可以通過變量來實現。變量允許你臨時性地將信息存儲在SHELL腳本中,以便和腳本中的其他命令一起使用。 1 環境變量…

    Linux干貨 2017-04-16

評論列表(1條)

  • renjin
    renjin 2017-04-21 10:28

    主要介紹了bash腳本的書寫規范及示例說明,內容很的很詳細,排版如果可以再好一些就更好了!

欧美性久久久久