久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

shell編寫規(guī)范有哪些

143次閱讀
沒有評論

共計 2678 個字符,預(yù)計需要花費 7 分鐘才能閱讀完成。

這篇文章主要介紹了 shell 編寫規(guī)范有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。

shell 編寫規(guī)范,編寫時嚴格遵守這些規(guī)范,不僅使編寫人受益,同時也能提高使用者的執(zhí)行效率。

1)腳本開頭部分應(yīng)有腳本功能說明、參數(shù)使用說明、作者姓名、創(chuàng)建 / 修改日期、版本信息,格式為:

2)腳本編寫時,注意格式對齊,如所有的循環(huán)或者判斷語句前后的語句進行對齊,以及 case 的選取完全,如:

3)腳本開頭執(zhí)行時,執(zhí)行如下命令,在執(zhí)行過程中若遇到使用了未定義的變量或命令返回值為非零,將直接報錯退出:

4)建議將命令行的每個參數(shù)放在單引號、雙引號中,特別是 rm、mv 等可能對生產(chǎn)現(xiàn)有數(shù)據(jù)造成修改的操作,建議使用垃圾箱策略:rm 操作轉(zhuǎn)意為 mv 操作,制定文件保存目錄,以防回退,并定期清理:

5)命令行中參數(shù)需要使用 lsquo;* rsquo;、lsquo;? rsquo; 通配符的,應(yīng)依據(jù)最精確匹配原則,如能確定文件、目錄名稱的前綴、后綴、擴展名及其他可識別關(guān)鍵字的,須在參數(shù)中包含該信息,如能確定文件、目錄的長度應(yīng)使用 lsquo;? rsquo; 通配符,不得使用 lsquo;* rsquo;,推薦的使用方式:

不推薦使用的方式:

禁止使用的方式:

6)給數(shù)值型變量的賦值后,需由手段保證變量的值為數(shù)值型,避免在后續(xù)的處理中出現(xiàn)異常:

7)在判斷條件中使用的變量,必須包含在雙引號中,如:

禁止使用的方式:

?shell 編寫規(guī)范有哪些

8)對文件進行打包備份時,必須使用相對路徑進行打包,如:

?shell 編寫規(guī)范有哪些

嚴禁將全路徑打入 tar 包,如:

?shell 編寫規(guī)范有哪些

9)對于打包后還需進行壓縮的文件,建議使用管道進行處理,如:

?shell 編寫規(guī)范有哪些

不建議兩部分分開執(zhí)行:

?shell 編寫規(guī)范有哪些

10)使用 ps 命令篩選進程時,如能確定進程所屬用戶,必須在參數(shù)中指定用戶名稱,如其輸出作為 kill 命令的輸入,則必須指定進程所屬用戶,如:

?shell 編寫規(guī)范有哪些

?shell 編寫規(guī)范有哪些

這里介紹的主要是日常 shell 編寫中遇到比較隱蔽或看似簡單,卻難以發(fā)現(xiàn)的“坑”,編寫中應(yīng)盡量避免使用,使用更優(yōu)的方法避免重蹈覆轍。

1)更新文件使用 不用 cp

使用 修改和回退文件時,保留原文件的屬組和權(quán)限,避免使用 cp 時權(quán)限屬組被修改。

?shell 編寫規(guī)范有哪些

2)使用 kill 前確認

關(guān)鍵字用 -w 精確匹配字段;

kill 前后都保留現(xiàn)場, 兩次 ps -ef|grep -w 關(guān)鍵字 |grep -v grep   /tmp/kill_進程名_.backup;

刪除前要校驗,獲取進程號是否唯一,避免多殺或誤殺的情況。

?shell 編寫規(guī)范有哪些

3)使用 rm 前確認

刪除前備份刪除對象信息,避免使用變量,直接使用文件和目錄名;

如果必須使用時,刪除前,建議檢查避免誤刪,刪除目錄和文件信息保留:

?shell 編寫規(guī)范有哪些

建議禁用 find 遍歷根目錄進行查找,同時刪除前進行確認,避免多刪或誤刪的情況。

4)For 循環(huán)的坑

for 循環(huán)的 in 條件按空格來區(qū)分,避免進入不正確或死循環(huán)。

?shell 編寫規(guī)范有哪些

5)while 循環(huán)的禁忌

如果還想使用循環(huán)中的變量,不要 while 結(jié)合管道使用。

?shell 編寫規(guī)范有哪些

6)慎用 cp

這句話基本上正確,但同樣有空格分詞的問題。所以應(yīng)當用雙引號:

?shell 編寫規(guī)范有哪些

但是如果湊巧文件名以 – 開頭,這個文件名會被 cp 當作命令行選項來處理。

可以試試下面這個:

?shell 編寫規(guī)范有哪些

但也可能再碰上一個不支持 — 選項的系統(tǒng),所以 *** 用下面的方法:

?shell 編寫規(guī)范有哪些

7)慎用 cd

避免使用 cd 到操作目錄再操作的方式,可能導(dǎo)致進入目錄失敗,誤刪除,如:

?shell 編寫規(guī)范有哪些

建議如下:

?shell 編寫規(guī)范有哪些

8) 用 [[]] 代替[]

?shell 編寫規(guī)范有哪些

當 $var 為空時,上面的命令就變成了[= bar]

類似地,當 $var 包含空格時:

[space words here = var]兩者都會出錯。所以應(yīng)當用雙引號將變量括起來:

[$var = var] 幾乎 *** 了。

但是,當 $var 以 – 開頭時依然會有問題。在較新的 bash 中你可以用下面的方法來代替,[[]]關(guān)鍵字能正確處理空白、空格、帶橫線等問題。

?shell 編寫規(guī)范有哪些

另注意,[[適用于字符串,如果是數(shù)值,要用如:(( $var 8))

9)管道操作中不要同時讀寫文件

?shell 編寫規(guī)范有哪些

你不能在同一條管道操作中同時讀寫一個文件。根據(jù)管道的實現(xiàn)方式,file 要么被截斷成 0 字節(jié),要么會 *** 增長直到填滿整個硬盤。如果想改變原文件的內(nèi)容,只能先將輸出寫到臨時文件中再用 mv 命令。

?shell 編寫規(guī)范有哪些

10)cd 的易錯問題

cd 有可能會出錯,導(dǎo)致要執(zhí)行的命令就會在你預(yù)想不到的目錄里執(zhí)行了。所以一定要記得判斷 cd 的返回值。

?shell 編寫規(guī)范有哪些

如果你要根據(jù) cd 的返回值執(zhí)行多條命令,可以用 ||。

?shell 編寫規(guī)范有哪些

關(guān)于目錄的一點題外話,假設(shè)你要在 shell 程序中頻繁變換工作目錄,如下面的代碼:

?shell 編寫規(guī)范有哪些

不如這樣寫:

?shell 編寫規(guī)范有哪些

括號會強制啟動一個子 shell,這樣在這個子 shell 中改變工作目錄不會影響父 shell(執(zhí)行這個腳本的 shell),就可以省掉 cd – 的麻煩。

?shell 編寫規(guī)范有哪些

目前行里自動化工具越來越多,無論是應(yīng)用的 MAOP 或系統(tǒng)的 SMDB,自動化實現(xiàn)都還是日常運維腳本的調(diào)用,結(jié)合日常運維的一些經(jīng)驗,腳本中就更需要考慮周全和控制風險。這里介紹一些結(jié)合運維場景的腳本應(yīng)用,希望規(guī)避以前犯過的錯,重點在控制風險。

1) 支持交互式腳本的應(yīng)用

很多腳本中需要進行交互,在規(guī)避風險的同時,需要通過自動化工具發(fā)布來支持交互,可以使用 expect,示例如下

?shell 編寫規(guī)范有哪些

也可以使用 curl 工具來替代簡單的交互:

#FTP SFTP 下載

curl-u ftpuser:ftppassword -O  sftp://ftp_ip:ftp_port/pathfile

#FTP SFTP 上傳

curl-u ftpuser:ftppassword --ftp-create-dirs-T upfile  sftp://ftp_ip:ftp_port/filepath/upfile

2)腳本規(guī)范執(zhí)行和日志追溯

直接執(zhí)行的腳本很危險,要提示用戶如何使用腳本,并記錄日志以便跟蹤。

示例如下:

?shell 編寫規(guī)范有哪些

3)腳本的并發(fā)鎖控制

避免多人同時執(zhí)行或并發(fā)同時執(zhí)行的異常問題,建議增加鎖機制,示例如下:

?shell 編寫規(guī)范有哪些

4)控制腳本不退出的風險

周期頻繁執(zhí)行的腳本,需要防止腳本 hang 住不退出,導(dǎo)致后續(xù)腳本再次執(zhí)行。

?shell 編寫規(guī)范有哪些

5)避免集中發(fā)布腳本造成的風險

使用 ftp、sftp 傳輸、下載文件,或者集中訪問存儲端口時,盡量增加發(fā)布對象散列,避免集中操作造成存儲端口擁堵,跨防火墻流量超限報警等影響。

?shell 編寫規(guī)范有哪些

6)避免文件 *** 增長的風險

向一個文件中追加數(shù)據(jù)時,一定要設(shè)置閥值,必要時清空,避免文件 *** 增大:

?shell 編寫規(guī)范有哪些

目錄增加清理過期文件策略,避免產(chǎn)生的文件越來越多,造成文件節(jié)點用盡:

?shell 編寫規(guī)范有哪些

目錄中的文件過多,會報參數(shù)太長錯誤無法刪除,建議放在循環(huán)中遍歷刪除:

?shell 編寫規(guī)范有哪些

感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“shell 編寫規(guī)范有哪些”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關(guān)注丸趣 TV 行業(yè)資訊頻道,更多相關(guān)知識等著你來學習!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-04發(fā)表,共計2678字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 嘉定区| 鸡泽县| 贵定县| 会宁县| 鹿泉市| 资溪县| 宁德市| 美姑县| 应城市| 潍坊市| 兴安盟| 凯里市| 铜山县| 健康| 内江市| 东宁县| 成都市| 抚顺市| 阳山县| 吴桥县| 高碑店市| 柘荣县| 海阳市| 鲁甸县| 石柱| 玉田县| 陆河县| 思茅市| 古浪县| 自治县| 平安县| 海宁市| 枞阳县| 防城港市| 平远县| 鲜城| 广东省| 花莲县| 乌鲁木齐市| 合江县| 二手房|