除了编程语言之外,要想找一份计算机相关的工作,还需要很多其他方面的技能。最近,来自美国求职公司 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里面的命令很多,参数很多,但是每个命令都如同一个小精灵,它是有外形,有内涵,有活力的。挖掘命令背后的东西,发现命令背后的联系,体会命令字符的魅力。
上海艾磊科技有限公司专门为企业提供IT咨询,IT外包,系统集成,以及各类IT增值服务。其中增值服务包括OFFICE 365云服务,鼎捷企业ERP管理软件,云备份,企业邮箱,无线覆盖,上网行为管理,VPN架设,网络安全服务,INTERNET接入,设备租赁, IP电话服务