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)掌握关闭一个服务的命令,即“chkconfig服务名off”。
2)批量处理时,会有多个服务名,那么就要用到多条以上的命令。
3)仔细分析以上命令,会发现需要处理的所有命令中,只有“服务名”不同,其他地方都一样,那么自然就会想到用循环语句来处理。
如果是你,能想到这些吗?若是想到了,则表示你已经形成了初级的编程思维了,恭喜你。
如果你能够通过分析将一个大的需求细分为各个小的单元,然后利用函数、判断、循环、命令等实现每一个小的单元,那么最后把所有程序组合起来就是一个大的脚本程序了。
如果达到了上述的水平,你就算会编程了,对于领导提出的需求,就能够进行合理的分解,只要在机器上多进行调试,相信一定能写出来。
(7)编程变量名字要规范,采用驼峰语法表示
oldboyAgeName用的就是驼峰表示法。记住,在学习的初期,不要去看大的脚本,要从小问题和小的方面着手,当你觉得小的判断、循环等在你的脑子里瞬间就能出来时,再开始去看和写大的脚本,进行深入练习。
师傅(老男孩)常说,新手初期最好的学习方法就是多敲代码,并针对问题进行分解练习,多敲代码就是让自己养成一个编程习惯,使肌肉、视觉和思维形成记忆,分解问题实际上就是掌握软件的设计和实现思想。
对于最高的编程境界,我个人的理解是:能把大问题进行完整的分析、分解且高效解决。
完整性:就是指预先考虑到各种可能性,将问题分解后,合理模块化并实现。
高效率:例如,在求“1+2+3...+100”的和时,考虑使用算法“(1+100)×100/2”,而不是逐个去加。
(8)不要拿来主义,特别是新手
好多网友看书或学习视频时,喜欢要文档、要代码,其实,这是学习的最大误区。
有了文档和代码,你会变得非常懒惰,心里面会觉得已经学会了,而实际上并没有学会。因此无论是看书还是学习视频,都要自己完成学习笔记及代码的书写,这本身就是最重要的学习过程,在学习上要肯于花时间和精力,而不是投机取巧。如果你至今都没有学好Linux运维,那么可以想一想是不是也犯了这个错误?