学习bash第二版-前言

  UNIX或Linux操作系统用户将面对的第一件事就是shell。“shell”是一个用户与系统交互接口的UNIX术语。它使用户可以通过键盘和显示设备与计算机进行交流。shell只是封装在系统中的独立程序,因此,可以有多种选择。
  系统通常配有“标准”shell,新用户对此不会有疑问。然而,有些标准shell相当陈旧、缺乏新shell的许多特性,有些不合时宜。因为shell对一个人的工作环境有很大的影响。所以,既然改变shell就像换顶帽子那样简单,就没有理由不将之改变到shell技术中的最新版本。
  在众多可用的shell中,本书介绍了Bourne Again shell(bash为缩写),这是一种具有通用性的流行shell。其他可用的流行的shell有Korn shell(ksh)和“Tenex C shell”(tcsh):O'Reilly出版的其他图书中对他们均进行了介绍。

**bash版本
  即使旧版本缺乏当前流行版本的新特性,本书仍然介绍了所有版本的bash。键入echo $BASH_VERSION,你可以很容易的发现当前所使用bash的版本。最早发布的bash版本是1.0,最新版本为2.01(1997年5月发布)。如果你使用的是旧版本,可以升级到新版本,第十一章“用户系统的bash”介绍了具体步骤。
**bash特性总结
  bash是向后兼容的Bourne shell的延续,它包含了大部分C shell的主要优点以及Korn shell的特性,并有一些新的自身特性。适合于C shell的特性如下:
  ·目录操作,使用pushd,popd和dirs命令。
  ·作业控制,包含fg和bg命令以及使用CTRL+Z停止作业的能力。
  ·大括号扩充,用于生成任意字符串。
  ·目录字符含义扩充,引用目录的缩写方式。
  ·别名,允许用户定义命令或命令行的缩写名。
  ·命令历史,允许用户重调以前输入的命令。
  bash的主要新特性包括:
  ·命令行编辑,允许用户在命令行上使用vi或emacs风格的编辑命令。
  ·键绑定,允许用户设置可定制的编辑键序列。
  ·集成编程特性:将一些外部UNIX命令集成到shell本身,包括test、expr、getopt和ecbo,从而高效执行通常的编程任务。
  ·控制结构,特别是select结构,使用户轻易生成菜单。
  ·新选项和变量给出了定制用户环境的更多方式。
  ·一维数组使引用和操作数据列表更加容易。
  ·内置模块的动态载入,可自定义用户模块,并可将其载入到正在运行的shell中。
**读者范围
  本书适合中级水平的UNIX和Linux用户阅读。你应该熟悉登录过程、键入命令以及对文件进行简单操作。虽然第一章“bash基础”介绍了如树状的文件和目录结构等概念,但如果你是新手,你会发现这里讲的很快,这种情况下我们向新手们推荐O'Reilly & Associates的《Learning the UNIX Operating System》,作者是Jcrry Pcck、Grace Todino和John Strang。
  如果你是一名有经验的UNIX和Linux用户,可以跳过第一章。但如果你曾使用C shell编程,就会发现第一章揭示了bash和C shell之间的细微差别。
  无论水平如何,毫无疑问你会在本书中学到很多东西,它使你成为bash的多面手-从主要特性到一些可能不为人知的琐碎细节。
  如果对shell编程感兴趣(编写shell脚本和函数是每日的任务自动化或用作系统功能),你会发现本书非常有用。然而,我们也故意避免给出交互式shell使用(在登录会话期间输入命令)和shell编程的差别。shell编程能力的提高是随用户经验不断增长的一个本质的必然的结果。
  本书中每章都与前面的章节有联系,虽然前3章面对的只是交互式使用者,后面章节则描述了交互式面向用户的特性以及编程概念。
  本书的目标是使读者可以编写使用的shell程序,且不需要计算机基础。即使你对计算机完全陌生,也可以会在短时间内从bash的功能中受益。
  最后,我们不会过多的介绍只有底层系统程序员感兴趣的特性,类似文件描述符和特殊文件类型的概念只能使严谨的用户发生混淆。用户可以从本书的讲述中举一反三,得到所需的信息。
**代码例子
  本书有大量的shell命令和程序,它们对用户的日常工作非常有用,而不只是对要解释的特性的介绍。在第四章“基础shell编程”以及后面的章节中,包含了各种编程问题,这里称为任务,它们阐述了特定的shell编程概念。在后续章节中对某些任务有精炼的解决方案。后面章节也包含了编程练习,其中许多都是以该章中任务为基础的。
  可以随意使用书中的任意代码并把它告诉朋友和同事,并且我们特别鼓励你自己在此基础上进行修改和增强。
  如果要试一试例子,但并没有用bash登录,则必须在每个bash脚本的开头添加下面这一行:
  #!/bin/bash
  如果bash未安装在文件/bin/bash中,则应在上面代码中用相应路径名替换。
**各章内容提要
  如果你要研究特定主题,而不是读整本书,下面介绍了各章的主要内容:
  第一章,bash基础。介绍bash以及如何将其设置成登录shell。研究交互式shell使用的基础,包含UNIX文件和目录结构、标准I/O及后台作业的介绍。
  第二章,命令行编辑。讨论shell的命令历史机制(包括emacs和vi编辑模式),历史替换和fc历史命令以及使用readline和bind的键绑定。
  第三章,定制用户环境。介绍通过使用启动和环境文件,无需编程定制用户shell环境的方式。别名、选项和shell变量是要讨论的定制技术。
  第四章,基础shell编程。介绍shell编程。它解释shell脚本和函数的基础,并讨论几个重要的“nut-and-bolts”编程特性:字符串处理操作符、大括号扩充、命令行参数(位置参数)和命令替换。
  第五章,流程控制。继续讨论shell编程,描述命令退出状态、条件表达式和shell的流程控制结构:if、for、case、select、while和until。
  第六章,命令行选项和有类型变量。深入讲解位置参数和命令行选项处理,然后讨论变量的特殊类型和属性、整数运算以及数组。
  第七章,输入/输出和命令行处理。详细描述bash I/O。介绍了所有shell的I/O重定向,如基于行的I/O命令read和echo,然后讨论shell的命令行处理机制和eval命令。
  第八章,进程处理。介绍进程相关问题细节。开始是对作业控制的讨论,然后是进程的各种底层信息,包括进程ID、信号和陷阱,另外本章还讨论了协同程序和子shell的高层抽象。
  第九章,调试shell程序。讨论各种调试技术,如跟踪、冗长模式和“伪装”信号陷阱。然后详细介绍用shell本身编写的shell工具-bash调试器。
  第十章,bash管理。介绍了系统管理信息,包括实现系统级shell定制的技术以及与系统安全相关的特性。
  第十一章,用户系统bash。介绍了如何得到bash并安装在用户系统上,以及当发生问题时的处理方法。
  附录一,相关shell。将bash和几种类似shell作比较,包括标准的Bourne shell,IEEE 1003.2 POSIX shell标准,Korn shell(ksh)和公有域Korn shell(pdksh)以及用于MS-DOS和OS/2的MKS Toolkit shell。
  附录二,参考列表。包括shell调用选项的列表、内置命令、内置变量、条件测试操作符、I/O重定向,以及emacs和vi编辑命令。
  附录三,可载入命令。介绍了编写和编译用户的可载入命令。
  附录四,语法。列出bash保留字并给出shell的完整BNF描述。
  附录五,获得示例程序。列出使用匿名或电子邮件免费获得本书主要脚本的方式。
**排版约定
  当输入一个shell命令时,最后输入RETURN,RETURN表示键盘上的ENTER。
  在Ctrl-X中,X为任意字母,表示按住CTRL(或CTL或CONTROL)键并按此字母。虽然这里以大写给出字母,但是其实是大小写无关的。
  本书中使用的其他特殊字符有LINEFEED(等同于CTRL-J),BACKSPACE(等同于CTRL-H),ESC、TAB和DEL(有时标记为DELETEROBOUT)。
  本书使用以下字体约定:
斜体  用于UNIX文件名、未嵌入到shell的命令(其实也是文件)和shell函数。斜体也用于应被实际值替换的哑元参数,用以区分vi和emacs程序和bash模式,并在第一次定义时以高亮形式显示。
黑体  表示bash内置命令、别名、变量和选项,以及正规文本内的命令行。另外还表示正规文本中用户键入的所有元素。
等宽字体  用于示例中显示文件内容或命令输出。
等宽黑体  用于示例中显示用户和shell的交互,这里用户键入的任意文本显示为黑体。
等宽斜体  用于显示应被实际值替换的哑元参数的命令行。
反向显示  用于第二章命令行编辑中显示被编辑的命令行上光标位置。
  这里使用的UNIX代表了“UNIX和Linux”。一些学究坚持Linux不是UNIX,但就本书而言是一致的。
**建议与评论
  本书的内容都经过测试。尽管我们做了最大的努力,但错误和疏忽仍然是在所难免的。如果你发现有什么错误,或者是对将来的版本有什么建议,请通过下面的地址告诉我们:

  美国:
  O'Reilly & Associates,Inc.
  101 Morris Street
  Sebastopol, CA 95472
  中国:
  100080 北京市海淀区知春路49号希格玛公寓B座809室
  奥莱埋软件(北京)有限公司

  你也可以用电子邮件通知我们。要获得邮件列表或请求目录信息,请发电子邮件到:
  [email protected]
  要询问技术问题或本书的注释,发电子邮件到:
  [email protected]
  我们有一个本书的web站点,那里给出了示例、勘误和未来版本的计划。你可以在以下网址访问此页面:
  http://www.oreilly.com/catalog/bash2/
  要获得本书的更多信息及其他信息,请查看O'Reilly的web站点:
  http://www.oreilly.com
  http://www.oreilly.com.cn
**第一版致谢
  本项目是个很有趣的经历,没有许多人的帮助就不可能成功。首先感谢Brian Fox和Chet Ramey创建了bash,壁并使之成为当前的完美产品。感谢Chet Ramey迅速回答了我关于bash的疑问并指出我的错误。
  感谢Bill Roscnblatt的《Learning the Korn Shell》,本书正是建立在这本书的基础之上。感谢:Net Technologies的Michael O'Reilly和Michael Malone的注释和建议(以及我的net.connection!)。感谢Chris Thorne、Justin Twiss、David Quin-Conroy和我的同事们的注释、建议和改正。感谢Linus Torvalds的Linux操作系统,是它将我引入bash,是我本书全部工作的平台。感谢Brian介绍bash的简短历史;感谢David Korn最新Korn shell版本的信息。感谢我工作时Depeche Mode的“101”背景。感谢Durbridge,他很有耐心,从不灰心的问我“怎么还没写完这本书?”。本书还要感谢Adam。
  我们的技术顾问凭其尖锐的眼睛挑出了许多错误,感谢Matt Healy、Chet Ramey、Bill Reynolds和Norm Walsh花费时间通读了我的手稿。
  对于本书的出版,O'Reilly & Associates的同事们的功劳是无法估量的。非常感谢Lenny Muellner向我提供作业的格式化工具,感谢Chris Reilly向我们提供插图、并感谢Edie Freedman向我们提供封面设计。在本书发布的最后阶段,要感谢David Sewell的拷贝编辑工作,Clairemarie Fisher O'leary对出版过程的管理工作,以及Micheal Deutsch和Jane Ellin对本书的协助,Ellen Siever提供的工具支持,Kismet McDonough提供的质量保证和Seth Maislin提供的检索工作。
  非常感谢Frank Willison把我的第一个电子邮件发给ORA:“What about a book on bash?”
  最后要感谢编辑Mike Loukides帮助我完成了整个工作。
**第二版致谢
  感谢O'Reilly & Associates的所有人。Gigi Estabrook是第二版的编辑,Nicole Gipson Arigo是产品编辑和项目主管,Nancy Wolfe Kotary和Ellie Fountain Maden进行了质量控制检查,Seth Maislin编写了索引,Edie Freedman设计了封面,Nancy Priest设计了本书的内部格式,Lenny Muellner实现了该格式,Robert Romano修改了第二版的插图。
 

猜你喜欢

转载自blog.csdn.net/chenzhengfeng/article/details/81558681