Shell腳本編寫思路和實例講解
前言
常聽見身邊有很多學習shell腳本的朋友抱怨shell腳本不好寫,好不容易寫出來的腳本一直報錯,符號空格又太多,錯了一個就無法運行還不好排查錯誤。
客觀講shell腳本的簡潔程度確實有些堪憂,但是在Linux運維工作中shell腳本運用得非常廣,在有些場合用shell會非常有效率,所以shell腳本編寫是必須掌握的技能之一,我們還不能捨棄。
方法要點
言歸正傳,接下來我將分享我在編寫shell腳本的時候學到的經驗和寫shell腳本的方法。
1.理清思路:在我們想實現一個功能需要寫腳本的時候是切忌不要想到就寫,避免需要什麼功能就先寫個什麼命令再去完善,這種寫法常常會出現在結構上很難調整的問題。在我們開始寫腳本之前一定要事先理清楚要怎麼去實現這個功能,包括用什麼命令和命令的先後順序。
2.全局觀:當我們理清腳本的思路之後,我們這個時候也不能馬上就開始寫,這個時候我們需要在腦海中思考每一個步驟中可能出現的情況,當出現各種情況後如何應對。在shell腳本中有可能我們要實現一個看似簡單的功能會需要有多個條件判斷,因為出現在我們當前系統上的情況只是在眾多情況中的一種,我們要實現讓腳本在任何機器上都能正常運行就必須有「全局觀」。通俗講就是一個排除bug的過程。
3.心細如絲:正如大家感慨的一樣,shell腳本有非常多的引號括弧空格,每一種意義不一樣,多個空格少個空格意義又不一樣,寫個幾十行的shell腳本能一次性寫完就無錯運行還是有一些難度的。我的在學習shell腳本一開始就強行給自己養成一個習慣,每寫完一行就檢查一次各種符號括弧,剛開始速度非常慢,但是寫得多了速度就越來越快而且出錯率也越來越低,當養成習慣以後再去寫那些符號就成了習慣沒有剛開始那麼痛苦了。
4.好記性不如爛鍵盤:有一句不好聽的話雖然不好聽,但是能提醒到一些正在學習shell腳本的朋友說出來也挺好。當你在抱怨shell腳本如何難寫如何易出錯的時候那麼你總共寫過多少行shell?你敲過多少次鍵盤?當你無數次練習,把鍵盤都敲到字都掉完了之後還會說這句話嗎?對!你還會說這句話,但已經不是抱怨而是評價。
實例
編寫腳本checkdisk.sh,運行效果:檢查磁碟分區空間和inode使用率,如果超過80%,就發廣播警告空間將滿
看到題目後先審題,然後按照我們上面的方法來。
第一步,我們先把要實現的功能理清。
要查看磁碟分區和inode的使用情況那麼會用到 df 和df -i 命令
提取出df命令中使用率的部分會用到grep用到cut以及head還有tail等這些對文本處理的命令
要比較數值那麼可能會用到中括弧和數值比較
最後發廣播要用到wall命令
因為磁碟分區並不是只有一個,或許還會用到if條件判斷以及循環。
這個時候我們的思路可以是這樣:
1.先用grep等文本處理命令取出df中的百分比值
2.用中括弧判斷這些值這些值是否大於80
3.將大於百分之80的值對應的分區用wall進行廣播
第二步,思考每一步會出現的問題和情況然後應對。
在上一步中我們已經把主線理清,既然線路已經規划了那麼就開始鋪路吧。
1.要取出df命令中的百分比值我們首先需要觀察百分比值在df命中是出現在哪個位置,然後用正則表達式匹配,之後用cut等命令取出,但是分區有很多個而且還要判斷inode的使用情況所以我們還要搞清楚一共有多少個分區,那麼這裡會用到幾個變數:代表磁碟空間分區個數的變數、代表磁碟inode分區個數的變數、代表被取出的磁碟分區路徑的變數、代表被取出的百分比數值的變數。
2.因為包括inode的話磁碟分區要比較的就很多,如果挨個比較的話就會大大增加腳本的行數,寫起來非常累,這裡就可以考慮利用分區的個數變數利用循環語句來比較每個分區使用量是否達到80%以上以及輸出比較結果,而考慮到還有inode則可以用if elif來判斷。
3.既然路也鋪好了,那就上路吧。
下面我會將我寫的腳本貼在這裡,可能看起來會有一些長,但是其實只要認真閱讀了我上面所有的闡述就會覺得其實非常簡單。
注意:在腳本中出現的正則表達式我將不再細講,有興趣的朋友可以在網上查詢相關資料。
腳本內容就是以上部分,其實按照我之前的思路,這個腳本雖然行數不少,但是並不難以理解,寫腳本沒有想像的那麼難,難的是下不去手。本文這個題目對初學者來說是個不錯的練習。
試驗
看到這裡有朋友會說了,上面稀里嘩啦說這麼多到底能不能用都不知道畢竟「Linux is interesting」我們需要去玩玩才知道。
試驗系統:CentOS 7.3 1611
可以看到我因為在系統上掛了一張光碟,所以有一個分區是100%,運行一下腳本試試能不能測出來。
完美呈現出大於80%的分區名。
那麼我們現在再把一個分區使用率增加到80%以上看看是否能都顯示出來。
當我們把另外一個分區也撐過80%後依然完美呈現。腳本運行正常。
結語
其實在我們的學習過程中如果遇到感覺很吃力的東西並不是說自己智力有限了自己能力有限了,那隻不過是給鍵盤敲少了找借口,多敲多練即使理解不了也學會怎麼用了。
最後給大家推薦一本書!
本文轉載自CSDN,作者:Driver_C


TAG:HACK學習 |