撰写本书的起因
云计算时代的到来,为企业带来了新的机遇与挑战。有了云计算,所有的资源都可以按需购买,类似于订火车票这样的问题迎刃而解。但是,云计算也给我们带来了新的难题,那就是如何更好地实现自动化运维、智能化运维!我们可以通过Shell、Python、Perl等脚本语言编写自动化脚本实现这样的目标。虽然Python在一些大的自动化项目中已经得到了充分的历练,但是作为Linux自动化运维的主流编程语言,Shell脚本依然不可替代,大量的自动化运维脚本依然需要使用Shell编写。而目前市面上常见的Shell脚本书籍,绝大多数还停留在讲解语法格式、知识点这个层面,很多读者读完类似Shell脚本的图书,发现语法格式学会了,但是在实际编写脚本时却又无从下手。编写本书的出发点就是希望在简单、直观地展现语法格式的同时,通过大量、深入的应用案例,帮助读者朋友们锻炼实际编写脚本的能力,培养思考问题、解决问题的能力。
Shell是一门非常容易上手且功能强大的编程语言,很多Linux系统维护者在工作中都会经常使用Shell脚本,但并不是每个人都擅长编写Shell脚本,一旦掌握了编写Shell脚本的规则与技巧,未来你的工作会更加轻松、更加高效!从1991年起至今,Linux已经快速成长为企业服务器产品的首选操作系统,越来越多的IT企业采用Linux作为其服务器端平台操作系统,为客户提供高性能、高可用的业务服务。本书在选择操作系统发行版本时,综合了各个发行版本的特点,最终选择了CentOS作为本书的基础系统平台。CentOS是众多Linux发行版本之一,但因为其源自RedHat框架,同时该版本完全开源,包括开放的软件YUM源,可以为用户带来更加方便的升级方法。另外,目前国内很多企业对于CentOS发行版也非常热衷,这也增加了本书的实用性。
本书结构
本书分为7章。
第1章主要讲述编写Shell脚本的基本格式及执行脚本的各种方式,如何通过脚本处理变量、使用正则过滤数据、在脚本中进行算术运算。
主要内容包括:
脚本的书写格式、执行脚本的各种方式。
数据的输入与输出、如何正确使用变量。
数据过滤与正则表达式。
算术运算。
第2章主要讨论如何让脚本变得更加智能,通过判断语句对各种业务可能出现的状况做出分析与判断,并根据判断结果进行相应的处理。本章会通过大量的案例展示如何编写一个更加健全、智能的自动化脚本。
主要内容包括:
如何在脚本中实现各种测试和判断。
if语句与case语句的基本语法格式。
模式匹配、通配符与扩展通配符。
编写行业项目案例。
第3章主要讲解如何使用循环避免人为执行工作中大量重复性的任务,大量且重复的机械式任务更适合让机器来完成。当人们找到解决问题的思路和方法后,机器可以更加高效地按照人类的思路和方法处理数据,最终获得我们需要的结果。
主要内容包括:
for与while循环的基本语法格式。
解决猴子吃香蕉的问题。
神奇的循环嵌套。
猜随机数字的游戏。
until和select的基本语法格式。
循环的中断与退出。
机选双色球。
第4章主要讲解数组、子Shell与函数。讲解数组在实际业务中的应用案例,分析子Shell对脚本的影响,讲解函数式编程思想,使用Shell脚本分析目前主流的排序算法。
主要内容包括:
斐波那契数列。
网站日志分析脚本。
启动进程的若干种方式。
函数与变量的作用域。
多进程脚本。
文件描述符与命名管道。
排序算法。
第5章主要讲解日常工作中编写脚本的一些技巧与方法,利用Shell的众多功能特性,可以让我们更加轻松地编写功能完善的脚本。本章还通过案例介绍了Shell脚本排错的方法与技巧。
主要内容包括:
Shell的扩展功能。
Shell解释器的属性与初始化命令行终端。
trap信号捕获。
脚本排错技巧。
xargs与shift。
编写行业项目案例。
第6章主要讲解文本编辑器sed,脚本借助于sed可以实现非交互编辑文件。在云计算运维工作中,我们经常需要修改或查看配置文件,本章通过大量案例演示如何通过脚本非交互地修改各种服务的配置文件。我们通过sed还可以在海量的数据中过滤需要的数据,可以编写网络爬虫脚本。
主要内容包括:
sed语法格式。
自动配置FTP、DHCP、SSH等网络服务。
自动化克隆与修改KVM虚拟机。
网络爬虫。
抽奖器。
第7章主要讲解awk编程语言,我们可以通过awk在脚本中实现更加灵活的数据过滤功能,可以通过awk进行数据统计工作,使用awk编写网络爬虫脚本。
主要内容包括:
awk基本语法格式。
监控主机网络连接状态。
性能监控脚本。
数据库监控脚本。
网络爬虫。
排版说明
关于本书中的排版,对于需要读者输入的命令,书中将使用等比例黑体加粗显示;对于计算机命令的返回结果,书中将使用等比例斜体字显示。当需要在文件中编写脚本时,对于打开及修改文本文件中的内容,书中会把文件中的内容放置于方框中排版和书写;对于需要读者注意的地方,书中会给出明确的注意提示。
本书读者
本书可以作为学习Shell编程的一本指南,主要针对具有Linux相关经验的从业人员,本书可以指导我们编写工作中需要的自动化运维脚本。另外,本书可以作为计算机培训参考教材。
关于配置文件及代码
本书部分主要的配置文件及代码可以在GitHub下载,地址为:https://github.com/ jacobproject/shell_scripts。
勘误
作者在编写本书的过程中已经花了大量的时间对内容进行审核与校验,但因为时间紧迫、精力有限,书中难免出现一些错漏,敬请广大专家和读者批评、指正。
关于本书,您有任何意见或建议,都可以发送邮件至ydh0011@163.com或使用博客平台https://blog.51cto.com/manual与我交流。
致谢
由于本书是我利用业余时间编写的,占用了大量本应该和家人在一起的欢乐时光,在此感谢家人对我的支持与勉励,感谢我的儿子(子墨)和女儿(紫悦)给家庭带来的无限欢乐。感谢我所有的同事对此项任务的全力配合与支持。感谢我的学生对本书的期待,是他们的无形支持促成了我编写本书。感谢生活中所有给予我帮助的朋友,是他们的支持让我不断地进步与创新,不管是工作中还是生活中,好朋友都是我成功的坚实后盾。感谢电子工业出版社的董英编辑为本书的出版提供的大力支持。感谢赵瑞杰为本书的修订提供的建议。
丁明一 北京
推荐序1
非常高兴得知好友丁明一老师的新书《Linux Shell核心编程指南》即将出版。同时有幸第一时间拜读了本书的电子版。本书所有内容皆源于丁老师的日常工作积累,作为一个有着十多年行业经验的一线Linux专家级讲师,丁老师将多年的教学与实践经验进行了总结,融会贯通,皆为精华。本书不单讲解Shell的各种语法及功能,还包含大量的有趣案例,都是丁老师在教学中积累的,极具参考价值。
目前市场上的IT类书籍琳琅满目,但许多是翻译国外现有书籍或赶工之作,在内容的专业性及文笔上或有欠缺,甚至让人产生更多的困惑。这也是很多专家和老师推荐直接阅读和学习外文原版书籍的原因,当然这对学员的科技英文阅读能力是小小的挑战。如今,有口皆碑的IT类书籍无不来自于作者在本专业的长期研究和思考,所幸《Linux Shell 核心编程指南》即属于此类浓缩作者经验的书籍,这也是我在此郑重推荐这本书的原因。
如今的IT领域,掌握自动化运维技能真的相当重要。无论是基础的Linux,还是云平台,运维、开发和测试人员均以DevOps思想来指导和开展工作,各种自动化运维工具如Python、Perl、Ansible、Puppet等不断涌现,但是Shell永远是一切的基础。Shell可以将Linux中的每条专注而高效的任务命令组合起来,从而完成复杂而美妙的事务。每位Linux工程师和学员皆明白脚本的重要性,尤其是在这个对自动化运维及运维开发工程师需求日益强烈的时代。Shell可以很简单,更可以很高效。类似于所有编程语言,如想掌握Shell编程的精华,一是要非常熟悉Linux中的各种命令参数,二是要勤于实践,三是要参考大师写的代码实例。初学者可在阅读本书的基础上,先模拟老师的案例代码,然后通过记忆来复现,最后举一反三,融会贯通。有经验的工程师则可以从本书中直接产生共鸣,获取灵感。
我相信,每位读者皆可以从本书中觅得惊喜。希望大家都能由此爱上Shell编程,爱上Linux,爱上开源。最后,再次衷心感谢丁明一老师对开源事业的辛勤付出!
贺正刚
红帽中国技术交付经理、高级认证考官
推荐序2
多年来,一直希望工作在IT运维或培训第一线的技术人员能不断总结经验,将其写成实用的小段子,甚至整理成书籍出版。今天很高兴看到了丁老师的书稿。
计算机技术既有高深的理论,又有非常强的实践性,很多相关操作必须自己动手做实验,甚至要经过多次失败才能够达到自己理想的目标。本书所涉及的Shell是既古老又年轻的技术。从UNIX、Linux使用的初始阶段,Shell就伴随着用户。而今在IT市场充斥着数字化转型等新名词的阶段,Shell脚本仍然在诸多方面起到至关重要的作用。
本书的特点是深入浅出,注重实用和实例。作为开源培训领域的资深讲师,丁老师在循序渐进地讲解技术方面有着多年的成功经验。与学院派的风格不同,职业教育更注重每项技术、技能在实际工作场合中的用途,相信读者在边读边做的过程中会有自己的切身体会。
淮晋阳
红帽中国培训渠道客户经理
推荐序3
很多刚开始学习Shell脚本编程的人,在学习了基本语法后,都会因为缺乏脚本案例而没有编写脚本的思路,很多人还没有开始真正的编程就已经放弃,这也是目前市面上其他类似图书的缺陷。而本书的亮点是既讲解了Shell的语法格式,又能让读者通过大量案例脚本,验证所学知识,构建编写脚本的思路,难能可贵。
周华飞
达内集团Python人工智能教学研发总监
推荐序4
以云计算、大数据、物联网和人工智能为代表的ICT技术在过去20年取得了巨大的进步,今天云化IT基础设施已经成为很多企业的选择,极大地降低了企业的创新门槛和业务成本。大数据分析技术也在科技、商业、制造领域得到广泛应用,通过对海量数据的分析,我们对这个世界的运行方式有了更深入的理解。图像识别、语音识别在很多场景下都得到了广泛应用,各种智能机器人也从工业领域走向日常生活,让我们的生活变得越来越智慧和便捷。
信息技术的发展,以及和行业的深入结合,让行业的智能化水平不断提升,生产效率快速提高,可以毫不夸张地说,ICT技术已经成为行业发展的动力引擎。
Linux是信息世界最重要的基础技术之一,也是云计算的关键技术,掌握Linux这个工具对于进一步探索智能世界有着极为重要的作用和意义。丁老师的作品《Linux Shell核心编程指南》深入浅出地介绍了Linux Shell编程技术,通过许多精心设计的小游戏把枯燥的技术变得生动有趣,大量的实战案例让读者获得真实的生产经验,相信这本书无论是对于初学者还是对于系统管理员和设计维护人员,都有极大的帮助。
信息技术和各行各业的结合仅仅是一个开始,未来几十年的发展必然会更加精彩和激动人心,未来已来,快抓紧Linux这把钥匙,踏上信息技术的高速列车,迎接未来的新时代吧!
陆海翔
华为云教育行业解决方案总经理
推荐序5
在当下的智能数据时代,无论是出于对效率的提升,还是出于对大规模系统的运维,自动化、智能化已是企业的必然选择。Shell脚本也成为每一位工程师必备的技能之一。
这本书是作者继《Linux运维之道》之后的又一力作,作者的著作我都详细阅读过,内容通俗易懂,实用性强,让人受益匪浅。《Linux Shell核心编程指南》也不例外,本书从Shell脚本的编写规范、基础理论,再到对Shell脚本执行过程的深度剖析,由浅入深、层次清晰,让读者能够知其因,晓其理;同时配备了大量适用于生产的实战案例,可见作者心思缜密,为本书费尽心血。
很多人会说,学了Shell和Linux相关技术,不知道怎么将其应用到企业中。那么我想说,这是一本可以从中获取答案的著作。初学者(新手)能从本书中系统地学习与掌握如何规范编写和使用Shell脚本,以及如何通过现有的知识点结合实战案例举一反三,应用到生产环境中,少走弯路。对于老司机们,本书系统阐述了Shell的知识点与大量实战案例,可以帮助你们获取新的启发与指导,让你们更高效、更智能化、更自动化地完成自己的工作,这是一本难得的且值得经常翻阅的工具书。书中内容读起来丰富精彩、层次有序、干货十足,值得各个层次的工程师阅读。
罗俊
亚马逊(Amazon)云架构师