1.3 如何才能學好shell程式設計之“老鳥”經驗談
學好shell程式設計的核心:多練→多思考→再練→再思考,堅持如此循環即可!
從老男孩it教育畢業的一名學生曾在工作多年後返校分享了一篇“如何學好shell程式設計”的講稿,經過老男孩的整理後和讀者分享如下。
(1)掌握shell腳本基本文法的方法
最簡單有效的方法就是将文法敲n+1遍。為什麼不是n遍呢?因為這裡的n指的是你剛開始為掌握文法而練習的那些天(21天法則),而1則是指在确定掌握文法後每天都要寫一寫、想一想,至少是要看一看,保持一個與shell腳本接觸的熱度。
(2)掌握shell腳本的各種常見文法
要掌握各類條件表達式、if多種判斷、for循環的不同用法、while多種讀檔案的循環等,這樣做不是為了什麼都學會,而是為了能夠看懂别人寫的代碼。掌握常見的各種文法,也就是要經常寫,而且要持續寫一段時間(讓動作定型,在大腦和肌肉裡都打上深刻烙印),各種文法都要用。
(3)形成自己的腳本開發風格
當掌握了各種常見的文法之後,就要標明一種适合自己的文法,形成自己的開發風格,例如:if語句的文法就隻用一種,條件表達式的文法隻用一種,函數的寫法也隻用一種,有些文法需要根據場景去選擇,除非你是像師傅(老男孩)一樣要教學育人。否則,沒有必要什麼文法都掌握。在解決問題的前提下,掌握一種文法,然後将其用精、用透就是最好的,切記橫向貪多,要多縱深學習。
(4)從簡單做起,簡單判斷,簡單循環
初學者一定要從簡單做起,最小化代碼學習,簡單判斷,簡單循環,簡單案例練習,所有的大程式都是由多個小程式組成的,是以,一開始沒必要寫多大的程式,免得給自己帶來過多的挫敗感,形成程式設計恐懼症。可先通過小的程式培養興趣及成就感,到碰到大的程式時,即使遇到困難也能堅持下去了。
(5)多模仿,多放下參考資料練習,多思考
多找一些腳本例子來仔細分析一下,或者是系統自帶的,或者是别人寫的(本書就包含大量例子),不要隻看,看着會并不是真的會。當你閉上眼睛的時候,還能完整地回憶起來,甚至還能完整口述或手寫出來才是真的會。
(6)學會分析問題,逐漸形成程式設計思維
在編寫程式或腳本時,先将需求了解透,對大的需求進行分解,逐漸形成小的程式或子產品,然後再開發,或者先分析最終需求的基礎實作,最後逐漸擴充批量實作。例如師傅(老男孩)在編寫批量關閉不需要自啟動服務的腳本時,就采用了這種分析方法,思路如下:
1)掌握關閉一個服務的指令,即“chkconf?ig服務名off”。
2)批量處理時,會有多個服務名,那麼就要用到多條以上的指令。
3)仔細分析以上指令,會發現需要處理的所有指令中,隻有“服務名”不同,其他地方都一樣,那麼自然就會想到用循環語句來處理。
如果是你,能想到這些嗎?若是想到了,則表示你已經形成了初級的程式設計思維了,恭喜你。
如果你能夠通過分析将一個大的需求細分為各個小的單元,然後利用函數、判斷、循環、指令等實作每一個小的單元,那麼最後把所有程式組合起來就是一個大的腳本程式了。
如果達到了上述的水準,你就算會程式設計了,對于上司提出的需求,就能夠進行合理的分解,隻要在機器上多進行調試,相信一定能寫出來。
(7)程式設計變量名字要規範,采用駝峰文法表示
oldboyagename用的就是駝峰表示法。記住,在學習的初期,不要去看大的腳本,要從小問題和小的方面着手,當你覺得小的判斷、循環等在你的腦子裡瞬間就能出來時,再開始去看和寫大的腳本,進行深入練習。
師傅(老男孩)常說,新手初期最好的學習方法就是多敲代碼,并針對問題進行分解練習,多敲代碼就是讓自己養成一個程式設計習慣,使肌肉、視覺和思維形成記憶,分解問題實際上就是掌握軟體的設計和實作思想。
對于最高的程式設計境界,我個人的了解是:能把大問題進行完整的分析、分解且高效解決。
完整性:就是指預先考慮到各種可能性,将問題分解後,合理子產品化并實作。
高效率:例如,在求“1+2+3...+100”的和時,考慮使用算法“(1+100)×100/2”,而不是逐個去加。
(8)不要拿來主義,特别是新手
好多網友看書或學習視訊時,喜歡要文檔、要代碼,其實,這是學習的最大誤區。
有了文檔和代碼,你會變得非常懶惰,心裡面會覺得已經學會了,而實際上并沒有學會。是以無論是看書還是學習視訊,都要自己完成學習筆記及代碼的書寫,這本身就是最重要的學習過程,在學習上要肯于花時間和精力,而不是投機取巧。如果你至今都沒有學好linux運維,那麼可以想一想是不是也犯了這個錯誤?