在本书的再版中,Quigley对她的经典著作进行了全新的改版,增加了当前shell程序员所需的最新内容——使用bash进行Linux shell编程。\r\n 本书汇聚了Quigley 21年来的 shell编程教学经验。书中不仅展示了能帮助读者快速入门的大量精选范例,还系统地讲解了UNIX与GNU/Linux上的awk、sed及grep等内容。在Quigley的指导下,即使是shell初学者也可以学会UNIX/Linux上所有主流shell的编程知识,包括5种shell的交互式命令及脚本编程,从而领会作者的编程思路。本书可作为shell编程的入门教程,也是系统管理员、程序设计人员的必备参考。
第1章 UNIX/Linux shell简介\r\n 1.1 UNIX与Linux及其历史\r\n 1.2 shell的定义与功能\r\n 1.3 shell的历史\r\n 1.4 系统启动与登陆shell\r\n 1.5 进程与shell\r\n 1.6 环境与继承\r\n 1.7 在脚本中执行命令\r\n第2章 shell编程快速入门\r\n 2.1 shell脚本简介\r\n 2.2 脚本实例:主要shell的比较\r\n 2.3 C shell与TC shell的语法和结构\r\n 2.4 Bourne shell的语法和结构\r\n 2.5 Korn shell结构\r\n 2.6 Bash shell结构\r\n第3章 正则表达式与模式匹配\r\n 3.1 正则表达式\r\n 3.2 组合正则表达式元定符\r\n第4章 grep家族\r\n 4.1 grep命令\r\n 4.2 使用正则表达式的grep实例\r\n 4.3 grep的选项\r\n 4.4 grep与管道\r\n 4.5 egrep(扩展的grep)\r\n ……\r\n第5章 流编辑器sed\r\n第6章 awk实用程序\r\n第7章 交互式的Bourne shell\r\n第8章 Bourne shell编程\r\n第9章 交互式C shell与TC shell\r\n第10章 C shell与TC shell编程\r\n第11章 交互式Korn shell\r\n第12章 Korn shell编程\r\n第13章 交互式bash shell\r\n第14章 bash shell编程\r\n第15章 调试shell脚本\r\n第16章 系统管理员与shell\r\n附录A 常用的UNIX/Linux实用程序\r\n附录B 各种shell的比较
Ellie Quigley 著名的“Perl多媒体电脑教室”的创始人、杰出的讲师,以讲授Perl和UNIX shell编程课程而享誉硅谷。她的著作包括Perl by Example,Third Edition(Prentice Hall PTR,2001)、UNIX Shells by example和Linux Shells by Example(Prentice Hall PTR,2000)。在她的公司网站(www.ellieq.com)上还可以找到有关UNIX、Perl、C/C++、Java和系统管理的在线培训课程。
shell游戏充满了乐趣。编写本书的目的就是使您的学习过程变得有趣而又充满收获。本书的第1版推出后,很多读者来信说,他们从我的书中得到了帮助,认识到shell编程根本就不难!范例让shell编程容易而有趣。正是因为您的肯定,Prentice Hall才邀请我编写这本书的第4版。除了一些更新的内容之外,我在这个版本中增加了3章全新的内容。因为Linux在最近几年来的快速普及,我们在新书中对Linux中的多个GNU工具进行了全面的介绍,并对UNIX/Linux shell中的各项特征进行了详细阐述。
本版新增加的内容包括第2章、第15章和第16章。第2章“shell编程快速入门”引导程序员尽快掌握shell编程的结构,并了解shell编程与其他语言编程的差别。第15章“调试shell脚本”给出了一些错误消息的范例,并告诉您导致错误的原因,以及如何修正错误。第16章“系统管理员与shell”将展示系统管理员在从系统启动到关机的过程中如何使用shell。
本书是我21年教学生涯的顶点,这些年来,我针对各种shell和程序员常用的UNIX/Linux工具设计了多门课程。我为这些课程编写的讲义被用于加州大学圣克鲁兹分校和戴维斯分校的UNIX教学、SUN公司的培训。还被Apple公司、Xilinx公司、美国国家半导体公司、LSI Logic公司、DeAnZa大学以及全球众多厂商采用。根据客户的需求,通常每次只讲授一种shell,而不是一次讲授全部的shell。为了满足众多客户的需要,我为每种shell和工具单独编写了培训教材。
无论是在讲授“grep、sed和awk”,“系统管理员Bourne shell教程”,“交互式的korn shell”,还是“bash编程”时,总有学生会问:“有没有一本书能够涵盖了所有的shell以及grep、sed和awk这些重要的工具?”,“awk与gawk之间有什么区别?”,“某个工具能否在Linux系统上工作,还是仅仅适用于Solaris系统?”,“我是否应该拥有一本awk的书,或者要买一本关于grep和sed的书籍?”,“是否有一本书能够真正地覆盖所有这些内容?”,“我不希望为了成为一名shell程序员而购买三四本书”。
遇到这类问题时,我可以向学生们推荐一大堆好书,但是这些书籍只是单独讲述某个主题。也有一些UNIX参考书尝试覆盖所有的内容,但都只做蜻蜓点水式的介绍,学生们需要的却是详细的讲解。学生们希望有一本书能够包含他们需要的全部内容:各种工具、正则表达式、主流shell、引用规则、各种shell的比较、练习等全都容纳在一本书中。本书就是这样的一本书。
编写这本书同时,我也在思考如何以相同的布局来教授课程和组织章节。在shell编程课程中,第一个主题不外乎介绍什么是shell,它是如何工作的。然后讲述如grep、sed和awk等最重要的工具。在学习各种shell时,首先介绍的是它作为一个交互式程序,所有的事情都可以在它的命令行中完成。然后介绍了它作为一种编程语言的编程结构,并在shell脚本中进行说明(作为编程语言,C shell与TC shell几乎完全相同,所以在描述它们的交互式应用时设立了单独的章节,而在讨论编程结构时仅用了一章的内容)。
在实际应用中,编写脚本是一回事,调试脚本则是另一回事。我在shell方面工作多年,因此在bug发生前我就能在程序中把它们找出来。但实际上这些bug是难以预料的,除非您已经看惯了错误信息并能理解它们的含义。因此,我针对调试中出现的问题增加了一章的内容以帮助您理解常见的错误提示信息及其含义,以及如何修正错误。由于不同版本的shell诊断信息可能不相同的,所以书中给出了每种shell常见的错误信息以及导致该错误的原因。
由于许多学生选择学习shell课程并想借此为学习系统管理铺路。于是,我的同事Susan Barr,负责讲授系统管理与shell编程课程的讲师,也将自己的知识拿出来共享,也就有了系统管理员如何使用shell的这一章的内容(第16章“系统管理员与shell”),这里致以谢意。
我时常发现,简单的例子更容易理解,用一个小范例,然后附上输出,再对程序中的每一行进行解释,这样每个概念都能立即被掌握。对从我的第一本书Perl by Example中学习Perl编程,或从JavaScript™ by Example中学习JavaScript,以及从UNIX ® Shells by Example中学习编写shell程序的读者来说,这种方法已被证明是十分有效的。
本书另外一个有助于理解的特点是对5种shell的讨论是平行的。例如,某个时刻您正在一种shell上工作,但您希望看到重定向在另外一种shell上的情形,那么您将发现在每种shell的独立章节中,都有一个针对该主题的相应讨论。
当需要详细了解某个特定的命令如何工作时,您会因需在几本书或man手册中不停地翻来翻去而感到头疼。为节省时间,附录A包含了UNIX和Linux有用的命令列表,它们的语法以及定义。对常用命令还提供了范例和说明。
附录B中的对照表将帮助您理清不同shell之间的差别,特别是在将脚本从一种版本的shell移植到另外一种版本的shell上时,这一点显得更加重要。如果只想知道某种结构是如何工作的,那么也可以将它作为快速参考。
阅读本书,您将发现它是一本宝贵的指南和参考手册。本书的目标是通过范例讲解,将概念简化以使您获得乐趣并节省时间。因为这本书包含我在课堂上讲授的全部内容,所以我确信您将在短时间内成为一名高效率的shell程序员。您所要做的就是坐下来,翻开这本书,尽情享受shell游戏带来的乐趣。
Ellie Quigley(lequig@aol.com)
无封面