日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

03—Shell脚本编写规范

發布時間:2023/12/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 03—Shell脚本编写规范 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1shell腳本的第一行是指定賈肯解釋器,通常為:

?

#!/bin/bash

#bin/sh

?

2?shell腳本的開頭會加版本,版權等信息:

?

#Date:16:29???2017-3-1

#Author:Created?by??XXX?

#Bloghttp//XXX.com

#Description:?This??scripts??function?is?.....

#Version:1.1

?

3?shell腳本命名應以.sh為擴展名。

?

例如:name.sh

?

4?shell腳本應存放在固定的路徑下

?

例如:/server/scripts

?

5、盡量使用UTF-8編碼,注釋及輸出盡量使用英文

?

6、一般給到執行權限,但一些關于變量的配置文件不用加執行權限;

?

7、第二行為空格,或者是添加一行空注釋

?

8、接著開始注釋內容:文件名、功能描述、作者、最后修改日期、版本號以及一些說明,還加上郵箱/手機號做為聯系,如果可以,需要加上版權聲明;?

?

9?注釋內容之后空一行開始定義shell腳本中的變量;

?

10?腳本內的變量定義,盡量使用大寫,或者大小寫駝峰寫法,或者使用下劃線連接的方式。變量名要見名之意,避免a,b,c類似的定義,變量的定義前后不要用空格。

??????????如果是×××,需要使用declare?-i來聲明。

??????????如果是數組,則需要使用declare?-a來聲明。

??????????如果是只讀變量,則需要使用declare?-r來聲明。

??????????變量值盡量使用雙引號引起來,如果要使用強引用,如變量值中包含$符號,則使用”單引號引起來。

??????????如果要將命令的執行結果賦值給變量,則使用反引號,或者使用$().

11?變量的引用使用以下方式:

?????????${GameZone}

?????????$GameZone

?????????推薦使用第一種,如:tar?zcf?${GameZone}.tar.gz?/apps/data/

12?單引號和雙引號混合使用的場景:

?????????echo?Welcome?to?my?school”‘

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

?

????????解決的方式是在執行的時候命令跟全路徑,或者在腳本的開始,顯式的設置一下PATH?變量,

?

????????如:?export?PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/apps/bin/

?

14?建議在腳本執行的開始重讀下/etc/profile?或者是自己定義的關于環境變量的配置文件,推薦使用source

?

????????如:?source?/etc/profile

???????????????source?/opt/sh/appenv.sh

15?使用here?document

????????如果腳本在執行的時候需要大段輸出提示信息,可是使用以下方式:

????????cat?<<?EOF

???????This?scripts?used?for?XXX

???????Usage:$0?[option]

???????Pls?be?careful.

???????Enjoy?Yourself.

???????EOF

???????如果只是單行提示信息,可是使用echo的方式,可以添加顏色:

???????echo?Welcome?to?use?my?script

16?如果需要在腳本里生成配置文件的模板,也可以使用here?document的方式,示例如下:

???????cat>>/etc/rsyncd.conf<<EOF

???????log?file?=?/usr/local/logs/rsyncd.log

???????transfer?logging?=?yes

???????log?format?=?%t?%a?%m?%f?%b

???????syslog?facility?=?local3

???????timeout?=?300

???????[data1]

???????path=/home/username

???????list=yes

???????ignore?errors

???????auth?users?=?data1user

???????secrets?file=/etc/rsyncd/rsyncd.secrets

???????comment?=?some?description?about?this?moudle

???????exclude?=?test1/?test2/

???????EOF

17?如果需要創建臨時文件,可以使用如下方式:

???????mktemp?-d?/tmp/file$$

18?條件測試的時候,盡量使用[[]],而不用[]或者test,因為[[]]功能會更強大??????????????????????????????????????????????

???????[[?-d?/tmp/logs?]]

??????不在使用[?x$NAME”?==?x”?]這種方式;

19?算數運算使用(())或者是中括號,但是記得括號里面的變量不要再加$

???????((12+i))

???????而非((12+$i))

20?使用高級變量的用法,比如使用

???????${GameZone:?Error?Message}確保關鍵變量已經定義

???????${GameZone:=S1}?或者設置默認值

???????否則:

???????rm?-rf?${GameZone}/*?后果不堪設想

21?可以使用&&?||來替代簡單的if-then-else-fi語句。

22?盡量給每條語句或者代碼段的執行給一個執行結果狀態,如果某條命令執行失敗,則exit?N.

???????盡可能使用$?來檢查前面一條命令的執行狀態。

23?流程控制語句盡量使用一下方式:

???????for?I?in?{1..10};do

????????..

???????done

???????while?true;do

????????

???????done

???????if?[];then

????????

???????fi

24?如果命令過長,可以分成多行來寫,比如:

???????./configure?\

???????prefix=/usr?\

???????sbin-path=/usr/sbin/nginx?\

???????conf-path=/etc/nginx/nginx.conf?\

???????error-log-path=/var/log/nginx/error.log?\

???????http-log-path=/var/log/nginx/access.log?\

???????pid-path=/var/run/nginx/nginx.pid??\

???????lock-path=/var/lock/nginx.lock?\

25?shell腳本并不要求強制縮進,但是要養成縮進的好習慣,可以使用兩個空格,建議使用tab鍵。如:

???????if?[];then

?????????

???????fi

26?盡可能多的注釋信息。

27想要獲取當前腳本所在目錄,可以使用

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

?

28?盡可能的使用函數的功能,將不同的功能定義為函數,直接引用函數;

?

29?如果自定義環境變量,可以專門寫到一個文件中,避免在/etc/profile中添加;

?

30?禁止使用SUIDSGID以及ACL用戶訪問控制列表的功能,如果需要較高權限,可以使用sudo

?

31?關鍵的操作須有日志輸出,專門記錄操作的成功或者失敗以及執行的時間點。

?

32?腳本內可能包含敏感信息,如服務器密碼或者是數據庫密碼,如果公開之前先確認敏感信息是否已經刪除。

?


轉載于:https://blog.51cto.com/6854290/2324196

總結

以上是生活随笔為你收集整理的03—Shell脚本编写规范的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。