前言
大一时,我刚刚开始接触Linux。那时候的我,沉醉于Linux华丽的用户界面,沉醉于使用Beryl软件(现在叫做Compiz Fusion)带来的图形效果,并且自我感觉良好:能够在姑娘们面前炫耀她们从没有见过的操作系统,应该算是一个计算机高手了。
直到某一天,参加一个学长(此人现在为南京大学高性能计算机研究所老师)的一个Linux讲座。他使用的是最简陋的图形界面(gnome默认配置),用两台运行着Ubuntu Linux系统的机器和一个摄像头,各自打开一个命令行进行演示,让我目瞪口呆。首先,他将两台机器配置成联网状态,然后将一台机器(A机器)连接摄像头,对着我们,另一台机器(B机器) 连接投影仪,打到大屏幕上。然后,他在A机器的命令行中输入了一串长长的命令,又在B机器的命令行中输入另一串命令,按回车键。最后,我们发现现场观众的实时动画被投影到大屏幕上!现场一片哗然!他解释道,这是应用管道实现的效果。在A机器上用读取命令将图像从摄像头中读取出来,通过管道连接压缩程序,压缩程序将一帧一帧的图像压缩,再传输到管道中;此时管道就通过无线局域网连接到B机器上。B机器上的解压程序从管道出口将压缩帧解压,通过流媒体播放器播放出来,再投放到大屏幕上!
管道!从此我爱上了黑乎乎的命令行,沉醉于它更强大的功能并且更有利于程序间的交互。这让我有种去除表象抓住实质的感觉。后来再见到Linux用户炫耀他们华丽的图形界面时,我的脑海中总会蹦出一个单词:Fish(菜鸟)。
的确,Linux命令行就是Linux的灵魂。而用户界面只是运行在灵魂上的皮囊而已。和Windows的命令行不同,Linux 命令行的确是一个强大的操纵系统的工具。你可以在命令行里完成几乎一切日常操作,并且比图形界面高效和强大得多。
有许多人用Linux当Windows用,这样的人大约是得了命令行恐惧症,认为那个黑乎乎的交互界面似乎应该是一些计算机Geek(极客)才用的。另外,有的人用了多年的Linux命令行还仅仅只会ls、cp、mv等几个简单命令,如果他的老板让他写一个Linux Shell脚本来完成某批处理任务,就一筹莫展了。而真正的Linux高手应是能够驾驭复杂的命令行和Shell语言的Linux Shell编程强人。
让我们一起走进Linux Shell编程的世界吧!
本书讲的是什么?
本书是Linux Shell编程的入门书籍。与市场上许多介绍Linux的书籍不同的是,这本书偏重于Linux Shell编程,将Shell当作一门语言来讲,而不是只有一两章提到Shell。实际上,一两章是绝对不够介绍Shell编程的,只能算蜻蜓点水而已。
本书内容讲解全面,涵盖了Linux Shell编程的方方面面。
第1章介绍了Shell的一些背景知识。我们从如何运行一个Shell程序开始讲起,循序渐进地介绍Shell的一些背景知识,如Shell运行的环境变量、Shell的本质等。最后,对Shell语言的优势进行探讨。
第2章是一个类似于总括的章节,主要讲解Shell编程的基础。包括Shell脚本参数的传递方式,Shell中命令的重形象与管道,基本文本检索的方法,UNIX/Linux系统的设计思想以及UNIX编程的基本原则。
第3章主要讲编程的基本元素。Linux Shell编程的基本元素包括变量、函数、条件控制和流程控制,以及非常重要的循环。学习本章将会对这些元素的使用有初步的认识。
第4章跳出Shell本身的范畴,介绍了正则表达式。Shell的强大之处在于文本处理,而正则表达式又是文本匹配的利器。关于正则表达式,除了介绍其基本知识外,还以两个案例给出了具体的应用场景,当然是在Linux Shell中完成。
第5章主要讲基本文本处理。大部分Linux Shell脚本都与文本处理相关,因此本章需要读者重点学习掌握。本章主要介绍一些文本处理的功能,如排序、去重、统计、打印、字段处理和文本替换。
第6章讲解文件和文件系统。主要介绍文件的查看、寻找与比较,还介绍了文件系统的定义与选择。
第7章介绍sed。sed也称为流编辑器,它可以对整行文本流进行处理。本章和第8章关系紧密,sed和awk常常被一起使用。
第8章介绍awk。与sed不同,awk往往更善于对字段进行处理。awk也是一门紧凑的语言,包括几乎所有语言的常见属性。
第9章主要介绍关于进程一些相关知识。Linux中的进程很多,本章介绍了进程的查看与管理,进程间通信。此处举了两个例子,一个是Linux中的第一个进程init,另一个是Linux系统中进程间管道的实现。然后介绍了Linux任务管理工具,最后,将Linux中的进程和线程做了一个比较,分析不同的应用场景。
第10章主要介绍Linux中的工具。包括不同的Shell,远程登录的工具SSH,管理多个终端的工具screen,以及文本编辑工具VIM。
第11章主要讲解了几个Linux Shell 编程的实例。通过这些实例,巩固前面所学知识,并加深对Linux Shell编程的理解。
谁适合读这本书?
本书适合Linux Shell编程的初学者和有一定Linux Shell编程基础知识,但还希望在此领域进一步学习的人。
另外,本书还适合在C、C++、JAVA或VB等领域对其中任何一门计算机语言有所了解的专业人员、初学者或爱好者使用。
这本书能帮助你什么?
本书的目标在于,帮助一个Linux Shell新手掌握Linux Shell脚本编程,从而能更深刻地理解与应用Linux系统的交互方式。
当然,仅仅靠本书还是不够的,还需要读者勤加练习。
如何联系作者?
如果您有任何意见或建议,可以通过邮箱联系我们。我们的邮箱是ollir@live.com。我们将会在第一时间给您回复。
感谢
感谢我曾经的导师和学校(南京大学),他们系统地教会我使用Shell编程与实用技巧。
感谢在大学阶段参与创建的一个Linux社团Open Association(http://njuopen.com),是社团促进了我的成长,并带领我走进Linux的广袤世界。
感谢我的女朋友,她做出了一定牺牲,让我周末有时间写稿,而不是陪她逛街。
感谢马泽民、逯永广、吕平、高克臻、张云霞、张璐、许小荣、王冬、王龙、张银芳、周新国、陈可汤、陈作聪、苏静、周艳丽、祁招娣、张秀梅、张玉兰、李爽、卿前华、王文婷、肖岳平、肖斌、蔡娜等同志,他们参与了本书的编写和最终的整理。
感谢出版社对稿件的校对和发行做出了极大努力。没有他们,我不可能完成这本书。
编者
2015年5月