向shell初学者介绍一些学习经验 z

向shell初学者介绍一些学习经验 z

三个多月前,我开始学习shell编程,当时对shell编程一窍不通,连最基本的变量赋值都一头雾水。经过三个多月的学习和练习,我的shell已经有了一点水平,至少坛子里的很多问题我都知道怎么解决。我想把我学习过程中的一点心得与诸位菜鸟们分享。

首先看些系统地介绍shell编程的书籍,我的手头只有一本《linux 与unix shell编程指南》,我觉得写得实在不怎么样,但是因为手头只有这一本书,只好凑合着用了。实际上,这本书我只翻了翻(因为觉得写得不好,所以没细看)第18章,介绍shell分支和循环流程的,然后自己写个例子,试验shell流程。会了以后,就把这本书扔到一边了。

然后,我开始在本版潜水,先看了置顶的帖子,发现“十三问”很不错,就copy了下来。然后浏览本版精华区,把我认为有用的文章全部copy下来,预备慢慢看。接着就是细读了“十三问”,把里面的例子在我的环境下面试验。网中人版主水平很高,对shell的研究非常深入透彻,十三问可以解决大部分人对于shell的很多疑问,不管是初学者还是老鸟这篇帖子都很适用。这样,对于shell编程所需要的基本元素我就了解了,可以试着应用了。

接着,在坛子里面继续潜水,不是发问,而是看看别人提出的初级问题,先不看别人的解答,试着自己先解答,然后把自己的方案贴出去,再与别人的方案比对,寻找差距。别人会对你的方案提出修改和批评意见,虚心接受,在斗争中成长。同时,研究awk的用法,因为我知道awk是shell下面功能最强的一个工具。我的学习资料是本版精华区的“Unix awk使用手册”,这个帖子很好,系统的介绍了awk的用法。

再接着,因为熟悉了awk,试着用awk解决一些坛子里面提出的问题,发现awk果然好用,但是也有局限性,所以开始学习sed。我的学习资料是本版精华区的“通用线程 -- sed 实例”。对sed有了初步了解后,开始试着用sed解决一些问题。然后又细读了本版精华区的“通过几个例子看sed的模式空间与保持空间”和“sed 学习笔记(与大家共勉)”。两篇帖子通过例子深入的介绍了sed的高级功能,我试着把几乎每一个例子都看懂了,有的实在太复杂,只好先放放。这样,我的sed水平就不低了。

要注意,正则表达式是shell编程很重要的一个内容,它无所不在。在学习awk和sed的过程中,由于它们和正则表达式结合得非常紧密,因此我也慢慢的熟悉了正则表达式。如果要看资料的话,本版精华有一篇“正则表达式语法”和一篇“正则表达式介绍”都是不错的材料。

至此,由于掌握了shell基本编程、正则表达式和awk、sed的用法,我的shell已经有了一定的水平,接下去是继续提高。提高的方式是继续潜水,给一些问题做出解答,同时研究其它大侠的解决方案。ad版主和r2007版主的水平很高,他们的代码总是十分简洁,研究他们的代码可以得到不少帮助。bjgirl很热心,熟悉的shell命令甚至比几位版主都多,研究她的代码可以学习到一些边边角角的shell命令的用法。还可以研究精华里面一些巧妙的或是复杂的shell例子,比如c1l2d3大侠的五子棋程序等等(那个五子棋让我PF得五体投地)。另外,把潜水过程中发现的一些精巧的解决方案和心得记录下来,比如ad版主提出的如何判断有连续重复字母的单词,r2007版主的洗牌方案等等问题的帖子,写在我的一篇“shell用法心得”笔记里面,有不懂的地方时,把这篇笔记拿出来翻翻,往往可以得到以前类似题目的解决办法。

在三个多月的学习过程中,我印象中只发贴提问过一次,是关于sed命令序列的执行组合、执行条件、执行顺序的问题。遇到其它不懂的地方时,争取自己解决,这也是我从幼儿园开始一贯的学习作风。只有自己思考,才能更快提高,除非你很懂得提问技巧,否则一味地发贴提问并没有太大的帮助。

希望上面介绍的这些经验对初学者有帮助。

1))
我发表我个人的看法:
(1)我想学习shell的过程是思维转换的过程:
理由如下:
①我想在做的各位有许多是从windows下来的,由于windows与unix之间的本质的不同让我们理解unix/linux存在相当的困难;
②由于windows与unix/linux在标准的符合上存在相当的差异(虽然两者之间有相同的标准),windows是图形化界面,而unix却是命令行,这是其二;
(2)shell自身的理解过程:
①学习shell编程之前无论是grep,sed,还是大名鼎鼎的awk,首先必须理解的是"正则表达式",该表达式理解的好坏直接关系着你以后的水平的提高;
②sed,grep,awk内在的理解问题:其实学习shell编程重要的是理解上面这些工具的执行过程,如:什么是“pattern space”and so on;
(3)对unix/linux自身的熟练或理解的过程:
shell编程离不开os,所以shell直接依附与你对os的理解:
我举个例子:
现在叫你用shell写查找登陆用户的目录下所以的“*.a”文件,然后把找到的文件放到a.tmp文件中。
其实shell并不难,但是在写该shell之前你必须知道"find"命令的用法,如果你find不会用,那什么都是免谈;
以上是我对shell编程的看法,请专家指教!!!!
谢谢!!

http://bbs.chinaunix.net/forum/24/20040425/312462.html      
这好像是 chinaunix 转来的      
take a look at the URL address      
阁下何方神圣?      
可是我喜欢提问,可能有不动脑筋的嫌疑,但是如果把问题弄清楚了那又何妨?      
在提问之前,我总是试着自己解决问题