11.21 Shell:排名第四的計算機關鍵技能

除了編程語言之外,要想找一份計算機相關的工作,還需要很多其他方面的技能。最近,來自美國求職公司 Indeed 的一份報告顯示:在全美工作技能需求中,Linux/Shell技能僅次於SQL、Java、Python,是排名第四的計算機關鍵技能,力壓JavaScript。

相對於SQL、Java、Python而言,Linux/Shell可謂是即簡單又複雜。記住一個命令就能上手操作,看起來Shell很簡單;shell命令雖然簡單但是數量很大,而且參數選項又很繁瑣,致使我們學了忘、忘了再學,總感覺沒有學好學會,沒有底氣。所以說,shell又是一門難學的技術。

曾經有人喊出“讓天下沒有難做的生意”,也有人喊出“讓天下沒有難學的技術”,實際上,生意依然很難做,搞技術的仍然是996,因為這些只是口號,聽聽而言,不要當真。

shell之所以難學是因為它有“命令很多、參數繁瑣”兩大特點,是一個高維的知識空間。唯有找到聯繫,才能“降維”,才能讓天下沒有難學的shell。

命令與生活的聯繫,命令與命令之間的聯繫,只要找到內在聯繫,兩個命令、三個命令、五個命令往往結合成一塊兒東西。不僅量變少了,shell命令還能學活,有左右逢源的靈氣。

就拿空格來說,深入研究一下,就能挖出一串東西,空格不再是冰冷冷的符號,更有人文色彩,更讓人感到親切。

空格的ASCII碼是32,32是個有故事的數字,人的牙齒是32個。象棋有32個棋子。在shell中數組是通過空格來分割,其他的語言往往喜歡用逗號來分割。為什麼shell要用空格來分割呢?這裡面也有學問:shell的命令參數的基本規則是:command arg1 arg2 arg3…,各個參數靠空格分隔,其傳入命令內部將轉換成數組。命令行參數(依靠空格分隔)和數組的語法定義(依靠空格分隔)是一脈相承的,所以在shell中數組用空格分隔才算是合情合理。

再拿別名來說,數據庫中有表別名和列別名,在C/C++有類型別名,而在shell裡面有命令別名。從數據庫聯繫到shell,採用這樣的思路,對“別名”的理解才會有深度,才能把別名深入人心,才能運用自如。

再說一下shell的排序命令。大凡排序的地方,總是會涉及到穩定性。排序算法的穩定性大家應該都知道,通俗地講就是能保證兩個相等的數其在序列的前後位置和排序後它們兩個的前後位置順序相同。出現穩定性的問題根源在於出現了相同數據,可以踢出重複數據:sort -n filename | uniq。sort是將原有文件進行排序,而uniq是將相鄰的行進行去重。通過排序的穩定性這個樞紐,把數據結構和shell中的sort uniq命令聯繫了起來,這樣大家對unique的理解是不是更深了一步呢?網上很多文章,一筆帶過,止步於“數據重複”,沒有觸及“算法穩定性”這個層面,這樣的學習方式是膚淺的。

shell裡面的命令很多,參數很多,但是每個命令都如同一個小精靈,它是有外形,有內涵,有活力的。挖掘命令背後的東西,發現命令背後的聯繫,體會命令字符的魅力,這就是《趣談shell》的特點。《趣談shell》的口號是:讓天下沒有難學的shell。歡迎大家關注《趣談shell》。


分享到:


相關文章: