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

溫馨提示×

溫馨提示×

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

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

?shell編寫規范有哪些

發布時間:2022-01-13 15:37:05 來源:億速云 閱讀:152 作者:小新 欄目:服務器

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

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

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

?shell編寫規范有哪些

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

?shell編寫規范有哪些

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

?shell編寫規范有哪些

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

?shell編寫規范有哪些

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

?shell編寫規范有哪些

不推薦使用的方式:

?shell編寫規范有哪些

禁止使用的方式:

?shell編寫規范有哪些

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

?shell編寫規范有哪些

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

?shell編寫規范有哪些

禁止使用的方式:

?shell編寫規范有哪些

?shell編寫規范有哪些

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

?shell編寫規范有哪些

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

?shell編寫規范有哪些

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

?shell編寫規范有哪些

不建議兩部分分開執行:

?shell編寫規范有哪些

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

?shell編寫規范有哪些

?shell編寫規范有哪些

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

1)更新文件使用>不用cp

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

?shell編寫規范有哪些

2)使用kill前確認

關鍵字用-w 精確匹配字段;

kill前后都保留現場, 兩次ps -ef|grep -w 關鍵字|grep -v grep  >>/tmp/kill_進程名_.backup;

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

?shell編寫規范有哪些

3)使用rm前確認

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

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

?shell編寫規范有哪些

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

4)For循環的坑

for循環的in條件按空格來區分,避免進入不正確或死循環。

?shell編寫規范有哪些

5)while循環的禁忌

如果還想使用循環中的變量,不要while結合管道使用。

?shell編寫規范有哪些

6)慎用cp

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

?shell編寫規范有哪些

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

可以試試下面這個:

?shell編寫規范有哪些

但也可能再碰上一個不支持 -- 選項的系統,所以***用下面的方法:

?shell編寫規范有哪些

7)慎用cd

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

?shell編寫規范有哪些

建議如下:

?shell編寫規范有哪些

8) 用[[ ]]代替[ ]

?shell編寫規范有哪些

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

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

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

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

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

?shell編寫規范有哪些

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

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

?shell編寫規范有哪些

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

?shell編寫規范有哪些

10)cd的易錯問題

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

?shell編寫規范有哪些

如果你要根據cd的返回值執行多條命令,可以用 ||。

?shell編寫規范有哪些

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

?shell編寫規范有哪些

不如這樣寫:

?shell編寫規范有哪些

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

?shell編寫規范有哪些

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

1) 支持交互式腳本的應用

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

?shell編寫規范有哪些

也可以使用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)腳本規范執行和日志追溯

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

示例如下:

?shell編寫規范有哪些

3)腳本的并發鎖控制

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

?shell編寫規范有哪些

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

周期頻繁執行的腳本,需要防止腳本hang住不退出,導致后續腳本再次執行。

?shell編寫規范有哪些

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

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

?shell編寫規范有哪些

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

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

?shell編寫規范有哪些

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

?shell編寫規范有哪些

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

?shell編寫規范有哪些

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

向AI問一下細節

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

AI

关岭| 五常市| 洛浦县| 瑞金市| 东兰县| 顺昌县| 航空| 玛纳斯县| 华安县| 北川| 修武县| 喀什市| 衡阳县| 华亭县| 白玉县| 吉林市| 固始县| 凤凰县| 巧家县| 娱乐| 大安市| 吴川市| 平阴县| 新郑市| 蒙城县| 五河县| 汉沽区| 陇川县| 三台县| 嘉祥县| 深水埗区| 蓬溪县| 富裕县| 富顺县| 大安市| 通渭县| 宁南县| 平谷区| 新安县| 乌兰县| 灵寿县|