shell:what? why?how?
編程思想
shell編程遵從UNIX哲學(xué):把復(fù)雜問題分解成簡單的小問題,然后再把各個部分功能組合起來解決復(fù)雜問題站叼。
在學(xué)習(xí)任何一門知識嘲碱,我們都需要思考清楚
Why:為什么隘世? 即原因揽碘。
What:是什么浦徊? 即本質(zhì)。
How: 如何做掀宋? 即方法深纲。
大Why羞反,小What,和一帶而過的How囤萤。結(jié)論先行。
好了是趴,那我們開始思考為什么要學(xué)shell,shell到底是什么涛舍,和到底如何去學(xué)shell呢!
為什么要用shell
對于我們自己唆途,學(xué)習(xí)shell是為了自動化富雅,而自動化則是為了提高工作效率,提高產(chǎn)出肛搬,更進一步則是提高公司的收入 没佑。
Shell腳本語言是實現(xiàn)Linux/UNIX系統(tǒng)管理及自動化運維所必備的重要工具,Linux/UNIX系統(tǒng)的底層及基礎(chǔ)應(yīng)用軟件的核心大都涉及Shell腳本的內(nèi)容温赔。每一個合格的Linux系統(tǒng)管理員或運維工程師蛤奢,都需要能夠熟練地編寫Shell腳本語言,并能夠閱讀系統(tǒng)及各類軟件附帶的Shell腳本內(nèi)容陶贼。只有這樣才能提升運維人員的工作效率啤贩,適應(yīng)日益復(fù)雜的工作環(huán)境,減少不必要的重復(fù)工作拜秧,從而為個人的職場發(fā)展奠定較好的基礎(chǔ)痹屹。
目前Linux系統(tǒng)下最流行的運維自動化語言就是shell和Python了。
兩者之間枉氮,shell幾乎是IT企業(yè)必須使用的運維自動化編程語言志衍,特別是在運維工作中的服務(wù)監(jiān)控、業(yè)務(wù)快速部署聊替、服務(wù)啟動停止楼肪、數(shù)據(jù)備份及處理、日制分析等環(huán)節(jié)里佃牛,shell是不可缺的淹辞。當(dāng)然Python也是一門更適合處理復(fù)雜的業(yè)務(wù)邏輯,以及開發(fā)復(fù)雜的運維軟件工具俘侠,實現(xiàn)通過web訪問等象缀。Shell是一個命令解釋器,解釋執(zhí)行用戶所輸入的命令和程序爷速。一輸入命令央星,就立即回應(yīng)的交互的對話方式。
其實PHP惫东、Python 都屬于高級編程語言莉给,他們也可以用來做腳本編程毙石,因為他們都用對應(yīng)的執(zhí)行腳本的解析器。
主要考慮以下幾個原因
- 環(huán)境兼容性颓遏,Win7專業(yè)版和旗艦版默認(rèn)安裝PowerShell徐矩,標(biāo)準(zhǔn)版和家庭版中就沒有安裝的,其他主流的操作系統(tǒng)都預(yù)制了Shell解釋器叁幢,所以使用sh滤灯、bash編寫,提供給其他人使用是非常方便的曼玩,但是PHP鳞骤、Python 等等需要安裝相應(yīng)的環(huán)境
- 服務(wù)器Linux使用的是sh、bash黍判;比如做一下自動備份豫尽,自動部署環(huán)境,服務(wù)器之間數(shù)據(jù)同步... ...對于日常反復(fù)性的處理工作避免了使用那些結(jié)構(gòu)過于復(fù)雜的程序語言顷帖。
什么時候不適合使用shell
資源緊張的項目美旧,特別是那些速度是重要因素的地方(排序,散序贬墩,等等)
程序要進行很復(fù)雜的數(shù)學(xué)計算陈症,特別是浮點計算,任意精度的計算震糖,或者是復(fù)數(shù)計算(應(yīng)該用C++或是FORTRAN代替)
要求交叉編譯平臺的可移植性(使用C或者是Java代替)
需要結(jié)構(gòu)化編程的復(fù)雜應(yīng)用(需要變量類型檢查和函數(shù)原型等等)
對于影響系統(tǒng)全局性的關(guān)鍵任務(wù)應(yīng)用录肯。
安全非常重要。你必須保證系統(tǒng)完整性和抵抗入侵吊说,攻擊和惡意破壞论咏。
項目由連串的依賴的各個部分組成。
多種文件操作要求(Bash被限制成文件順序存取颁井,并且是以相當(dāng)笨拙厅贪,效率低下的逐行的存取方式)
需要良好的多維數(shù)組支持。
需要類似鏈表或樹這樣的數(shù)據(jù)結(jié)構(gòu)雅宾。
需要產(chǎn)生或操作圖象或圖形用戶界面养涮。
需要直接存取系統(tǒng)硬件。
需要端口號或是socket I/O眉抬。
需要使用可重用的函數(shù)庫或接口贯吓。
所有的私有的不開源的應(yīng)用程序(Shell腳本的源代碼是直接可讀,能被所有人看到的)
如果你需要有上面的任意一種應(yīng)用蜀变,請考慮其他的更強大的腳本語言――Perl,Tcl,Python,Ruby匹颤,或者可能是其他更高級的編譯型語言嗦明,例如C更米,C++或者是Java。盡管如此们陆,使用Shell腳本來構(gòu)造應(yīng)用原型仍然是一個有用的開發(fā)步驟。
我們將會使用Bash,它是 "Bourne-Again shell" 的首字母縮寫情屹,并且是Setphen Bourne寫的經(jīng)典的Bourne shell的同義詞坪仇。Bash已經(jīng)變成了所有令人喜歡的UNIX上shell編程 事實的上的 這本書的大多數(shù)腳本技術(shù)能很好的應(yīng)用到其他的Shell當(dāng)中,比如說Korn Shell垃你,Bash借用了它的一些特性烟很, [2] 還有C Shell和他的不同之處。(注意:C shell編程不是交付一定的內(nèi)在問題蜡镶,這點已由Tom Christiansen在1993年10月在 Usenet post 被指出了)
? --摘自《第一章:為什么要有Shell編程?》
什么是shell
我們都知道在計算機中,計算機只能識別ASCII恤筛,即二進制官还,而程序中的編程語言或者用戶輸入的信息等,并不是ASCII,計算機根本就不能直接讀懂毒坛。所以這時候就需要一個“翻譯”望伦。shell其實就是一個“翻譯”。一個命令解釋器煎殷。shell是在操作系統(tǒng)內(nèi)核與用戶之間進行翻譯屯伞,同時也是一種功能相當(dāng)強大的編程語言。
shell必須是建立在UNIX或者Linux之上才有意義豪直。所以在正式學(xué)習(xí)shell之前劣摇,我們需要掌握Linux或者UNIX知識。
shell腳本是什么弓乙?
shell腳本就是指令的集合末融。
如何來用shell
當(dāng)然是把shell的基本語法熟練掌握,實戰(zhàn)起來啦暇韧。
后續(xù)我會整理出shell學(xué)習(xí)實戰(zhàn)總結(jié)勾习。