腳本編寫規范
- 腳本名稱以.sh結尾,名稱見名知意
- 盡量使用UTF-8編碼,注釋及輸出盡量使用英文
- 一般給到執行權限,但一些關于變量的配置文件不用加執行權限
- 執行的時候可以使用bash執行,或者使用bash -x 調試執行
- 腳本首行以#!/bin/bash,無空格,不帶選項
- 第二行為空格或者添加一行空注釋
-
開始注釋內容:
#!/bin/bash
#(空行)
#Filename:文件名
#Dscription:描述
#Author:作者
#Revision:版本號
#Email:坐著聯系方式
#Date:日期
#Note:注意事項 #(空行) - 注釋內容之后空一行開始定義腳本中的變量
-
腳本內的變量定義,盡量使用大寫,或者駝峰寫法,或者使用下劃線鏈接的方式,避免使用a,b,c類似的定義,變量的定義前后不要空格
駝峰寫法:YourName=xiaoming
大寫:YOURNAME=xiaoming
下劃線鏈接:YOU_NAME=xiaoming
注意:
1、如果是整形,需要使用declare -i聲明
2、如果是數組,需要使用declare -a聲明
3、如果是只讀變量,需要使用declare -r聲明
4、變量值盡量使用雙引號括起,如果使用強引用,如變量值中包含$符號,則使用''單引號將其引用
5、如果將命令的執行結果賦值給變量,則使用$()或者“ -
單引號和雙引號混合使用場景
echo 'Welcome to "My school"'
-
在某些特殊環境下,shell腳本里面引用的命令,有可能是自己定義的bin路徑,在執行的時候會爆出 command not found。
解決方法:在執行命令的時候跟全路徑,或者在腳本的開始,顯示的設置一下PATH變量
如:
> export PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/apps/bin" -
腳本在執行開始重讀一下/etc/profile;或者是自己定義關于環境斌量的配置文件,使用source或者.號:
source /etc/profile source /opt/sh/appenv.sh
-
使用here documene
如果腳本在執行的時候需要大段的輸出提示信息,可以使用一下方式:
cat << EOF
This scripts used for XX
Usage:$0 [option]
Pls be careful
Enjoy Yourself
EOF -
如果需要在腳本里生成配置文件的模板,可以使用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 -
創建臨時文件
mktemp -d /tmp/file$$
- 條件測試的時候,使用[[ ]],對比[]或者test,[[]]功能更加強大
-
使用算數運算時,使用(())或者是[],括號內的變量不加$
(12+i)) 而不是((12+$i))
-
變量的高級用法
${YourName:?"LiJing"}確保關鍵斌量已經定義
${YourName:="S1"}或者設置默認值
否則:rm -rf ${GameAone}/* 危險 - 使用 && || 代替if then fi 語句
- 盡量給沒調語句或者代碼段的執行返回一個執行結果的狀態,使用$?檢查前面每一條命令的執行狀態。
-
流程控制語句盡量使用以下方式:
for I in {1..10};do(在使用{1..$1}的時候,使用sed命令
…
done
或者
while true;do
…
done
以及
if [];then
fi -
如果命令過長,可以分成多行來寫:
./configure \
–prefix=/usr \
–sbin-path=/usr/sbin/nginx \
… - shell 腳本并不強制要求縮進,但可以養成縮進習慣
- 盡可能多的寫注釋信息
-
在獲取當前腳本所在目錄,可以使用
ScriptDir=$(cd $(dirname $0)&& pwd)
- 盡可能使用函數的功能,將不同的功能定義為函數,直接引用函數
- 如果自定義環境變量,可以專門寫到一個文件中,避免在/etc/profile中添加
- 禁止使用SUID和SGID和ACL用戶訪問列表的功能,如果如果需要極高的權限,可以使用sudo切換到root
- 關鍵的操作必須有日志的輸出,專門記錄操作的成功或者失敗以及執行的時間點。
- 腳本內可能包含銘感信息,在公開之前先確認敏感信息是否已經刪除
原創文章,作者:半斤八兩,如若轉載,請注明出處:http://www.www58058.com/73427
主要介紹了bash腳本的書寫規范及示例說明,內容很的很詳細,排版如果可以再好一些就更好了!