我的建议:
bash
(及其同类)不是通用编程语言。虽然可以完成一些复杂的脚本编写工作,bash
但这并不是一般学习编程的最佳方法。这是完成系统管理任务的最自然的方法,该任务主要围绕执行其他程序,处理它们的数据文件和目录以及对进出它们的输入和输出进行编组。如果bash
是锤子,请将其保留在确实看起来像钉子的问题上。学习做任何不平凡的bash
,如果你了解一些非常小的子集,将是相当容易sed
和awk
(因为在字符串操作bash
通过类似的操作在这些“小”语言的语法在很大程度上启发)。
- 对于Linux下的通用编程,您会听到许多热情的争论。最好的两个竞争者是Perl和Python。这些都是通用的非常高级的脚本语言,它们公开了足够的低级功能来执行几乎系统上任何用户空间进程可以访问的任何操作,并且具有大量的预写模块和库。
我建议你读℃的介绍性文字,并花一些时间运行strace
,并ltrace
像一些简单的实用程序命令的命令ls
和mkdir
和/bin/echo
等(其实这几天我会建议ltrace -S
代替strace
,但进军的命令和到输出该选项ltrace
增加的输出-S
将非常有教育意义)。
C是编写Linux内核和GNU libc的主要编程语言。(小零件正在组装中)。Linux(或其他类似UNIX的)系统上的几乎所有程序都与C库(libc)链接在一起。主要的Perl和Python解释器(以及大多数其他脚本语言)也是用C编写的。这些程序(内核,通用系统库和各种脚本语言解释器)都是由C程序员编写的,它们的设计和功能受到了很大的影响通过其基本实现。因此,对其中任何一个的更深入的了解最终都需要对C的理解。您不需要了解C ++或Java的任何知识就可以了解此级别的编程。(根据您的职业生涯,这些可能各有各的趣味和必要之处,
因此,如果您到目前为止同意我的前提,那么我们将其归结为Perl和Python之间的选择。
这是真正的火焰战争开始的地方。
我的建议是首先关注Python(2.x)。Python具有相对简单且一致的语法。您可以在几小时内学习Python 语法的基础知识,这是您将遇到的绝大多数语法。只有很少的功能(列表推导,生成器表达式,修饰符)对基本语法有影响。因此,您在学习Python上所做的大部分工作将致力于学习广泛的标准库,并尝试找到使用它们的“最佳”方法(并弄清楚哪些特殊的异常集值得处理以使您的程序健壮起来)最重要的是学习基础概念。
我认为Python的扩展库和相对简单的语法确实有两个明显的缺点。
首先,当您在Python的高层次学习如何做事时,您可能会发现必须在较低层次上工作的想法很繁琐。我在Perl工作的地方是标准。我使用Python编写了工作原型,据我所知,它可以比Perl更快,更可靠地工作。然后我就不得不为同事将它移植到Perl上而感到恐惧。(在使用Python之前,我在Perl方面相当出色,所以这不是简单的熟悉程度)。
另一个缺点是有时很难找到最高级别的方法来完成Python中的给定任务。例如,要获取网页,您可能最初尝试使用低级套接字...来工作。但是,您将复制很多已经可以找到的代码,包括urllib
和和/或urllib2
模块中的代码。从2.7.1版本开始,标准库就包括了这两个事实。Python的维护者在可能的情况下透明地扩展了较旧的模块和API;但是在很多情况下,Python保留了两个或三个模块,由于某种原因,它们无法进行透明扩展。(另一个例子,你可以看一下选项解析命令行选项:argparse
,optparse
,和getopt
。使用getopt
(其中最早的)编写程序几乎没有害处。对于非常简单的实用程序,几乎没有选项,并且有严格的调用约定(例如,仅由一小群人使用),那么遍历sys.argv
自己并没有什么本质上的错误。但是,通常值得仔细阅读文档并遵循较旧或较低级别模块底部的链接,这些链接描述了可用的较新或更高级别的功能。
我的建议是基于我的意见,即您希望专注于更深层次的概念,而不必花费大量时间和精力在语法和语言特定问题上。理解何时使用子进程,线程而不是线程,或者了解Python随附的多处理功能与语言无关,而与语言熟练程度无关,而与语言无关。(通过与线程和多处理的比较,您可以了解Twisted事件驱动模型的参数,这时您可能已经精通Python并可以使用任何语言进行编程了)。
对于Perl,反论点既简单又实用。还有很多工作,特别是Perl技能。Perl是一种功能强大的语言,并且具有极其丰富的库。(与大多数Python系统相比,大多数Linux系统所分发的Perl的核心功能覆盖范围更小;假定您将通过发行版或通过CPAN安装大量其他软件包---全面的Perl存档网络)。(相比之下,我需要分别获取的Python模块和软件包更少了……这些可以从PyPI中获得--- Python Package Index)。
因此,如果您学习Perl,则可以在短期内找到工作,特别是sysadmin职位。但是,Perl的语法是……好吧……用一些自己的爱好者的话来说……“病态折衷!” Perl可能非常简洁,其代码充满了很多标点符号。那些喜欢它的人会无休止地争论说它是“容易的”并且是很有意义的---并且在充满困惑的特定论坛中,将有无数的机会这样做。文档中使用的语法和语言以及在公共论坛上支持该语法和语言的人都细微到您可以花费大量精力来学习它们的程度。
现在,请意识到前面的评论是主观的和有偏见的。您可能会尝试Perl并发现它的语法既直观又令人愉悦。如果是这样,您将获得更多动力。但是,我个人发现,我对Perl特质的掌握程度很快下降。我保留了基本原理,但是当我不得不改回多行代码时,我发现这很艰难。
您将学习许多其他语言,包括Java,Lisp和Scheme,TCL,Scala等。但是,我建议从实用性和简单性之间达到最佳平衡的方法开始。