《Linux Shell指令碼攻略(第2版)》書評

威靈頓發表於2016-03-14

凡是以Linux作業系統作為平臺進行開發的人,對Linux Shell都不會陌生。顧名思義,Shell就是使用者跟OS打交道的介面程式,“殼”。我在Windows和Linux平臺上,都有比較長時間的開發經驗。若要進行對比的話,Windows的命令列處理功能,跟Linux的Shell系統相比,簡直是弱爆了。微軟後來推出的PowerShell有所增強,但那是基於.Net的,有額外的依賴性,已經不是純粹的薄殼程式了。

enter image description here

Linux的Shell有幾種實現,大部分預設的都是bash軟體。如果你想用更強大的實現,可以試試zsh(Oh My zsh),它與bash相容,擴充套件功能更加強大。市場上的圖書,絕大部分也是以bash為基準進行講述的。

不知道有多少開發者和我類似,很早就知道shell指令碼的強大功能,也能臨時抱佛腳的抓來一些程式碼片段,跌跌撞撞的完成想要的功能,但是還是更多的把它看成運維的利器,並沒有真正的花時間,專門去研究它。

前段時間因為工作需求,需要用shell完成比較複雜的功能。原本的零零碎碎的知識就不夠用了,就買來一些書籍專門看。其中這本《Linux Shell指令碼攻略》給我留下很好的印象。市場上講shell指令碼的書不少,甚至有磚頭一樣的大部頭。可這本書有比較獨到的地方。

它聚焦於常用。bash的知識還是很龐雜的。可能是因為歷史原因,shell指令碼語言的設計,坑比較多。一些設計和規定,甚至讓你感覺這是二貨程式猿的作品,明顯缺乏嚴謹的思考和技術美感,像是補丁摞補丁。這本書不講那些很少用的、犄角旮旯裡面的奇淫技巧,而是根據使用者使用環境,分了幾大環境,對這幾大環境下的常見處理任務,進行了簡明扼要的講述。Shell功能的靈活多變是出了名的,其它的你可以舉一反三嘛!

開頭,它說明了shell的概念和關聯的變數設定、函式引數,除錯操作。一下你就有了總體觀念,可以入門了。接著,它對指令碼里面最常用的處理命令進行了細緻的講述。Linux的命令是很多的,安裝好一些工具包,系統裡面有時會多達一千多個命令。這其實跟Linux/Unix的設計思想息息相關。參見《UNIX程式設計藝術》。Linux/Unix系統,推崇處理專業化、功能正交化,鼓勵小程式,通過小程式的組合,來完成各種處理功能。這帶來了非常重要的各種優點,比如耦合低,靈活度極高。但也帶來了不少麻煩:你得學習每個命令列和常用引數,知識點會比較零散,容易遺忘。這些大量的處理命令裡面,很多是“業務”相關的,只有在具體業務操作的時候才呼叫。而另外一些則不同,是通用、指令碼相關的。甚至可以說,它們是為Shell指令碼而生的,在指令碼里面使用就會如虎添翼。比如檔案搜尋find、內容過濾查詢grep、引數處理xargs,排序分割等等。

在後面,根據任務場景,本書內容分為檔案處理、文字處理、網路結合、歸檔備份、系統監控等幾大塊知識區域。基本上涵蓋了shell的常見工作任務。有了這些作為基礎,想必更復雜一些的任務,也不在話下。當然,我個人覺得,過於複雜的任務,還是交給更專業的語言、系統好了,比如Python。限於語言設計的目標和能力,shell最好還是聚焦於常用、短小精悍的任務。而這正好是這本書所能覆蓋的。大部頭圖書內容全面,可以用來深化知識點,但是要簡單快速的學習以完成工作任務,我還是推薦這本書。

相關文章