本书可分为五大部分:*部分为第1章~第4章,此部分着重介绍新手如何学好Shell编程。涉及的内容包括Shell编程的入门介绍、基础知识、运行原理、编程语法、编程习惯、变量知识以及变量的深入实践。第二部分为第5章~第8章,着重讲解变量的多种数值运算、条件测试与比较、if条件判断语句、Shell函数等相关的知识。第三部分为第9章~第13章,着重讲解case条件语句、while循环和until型循环、for循环和select循环、条件与循环控制及程序返回值、Shell数组等知识。第四部分为第14章~第16章,着重讲解Shell脚本开发规范与编码习惯、Shell脚本的调试知识和技巧、Shell脚本开发环境的配置调整和优化等。第五部分为第17章~第20章,着重讲解Linux信号及trap命令的企业应用实践、Expect自动化交互式程序的应用实践、贯穿全书技术的面试题和企业实战案例,以及子Shell知识。
前言为什么要写这本书目前全球正处于互联网 的时代,越来越多的传统企业都在通过互联网提供产品和服务,比如,互联网 教育、互联网 金融、互联网 电商、互联网 出租车、互联网 保险等,可以看到,几乎所有的产品、服务都能在网上找到。而支撑互联网的幕后英雄其实就是Linux(包括移动互联网在内),掌握Linux运维技术已经成为每一个IT技术人员的必备技能! 互联网 的时代下企业的网站流量呈爆炸式增长,如果你是运维人员,很可能要面对几十台、几百台、上千台甚至上万台的服务器设备,而对于企业来说,如何提高IT运维的管理效率、降低成本也成了最大问题。要解决这个问题,必须在Linux运维工作中,做好运维服务的标准化、规范化、流程化和自动化,而这里面的前三项其实是在为最后一项IT运维自动化做铺垫。 要实现IT运维自动化就需要学会编程语言,目前Linux系统下最流行的运维自动化语言就是Shell和Python(Python相关图书,作者正在写作中)。在这两者之中,Shell又几乎是所有IT企业都必须使用的运维自动化编程语言,特别是在运维工作中的服务监控、业务快速部署、服务启动停止、数据备份及处理、日志分析等环节里,Shell必不可少。当然Python也是一门很好的自动化编程语言,它和Shell是互补的,Shell更适合系统底层,而Python则更适合处理复杂的业务逻辑,以及开发复杂的运维软件工具,实现通过Web访问等。 在长期的运维工作以及深度教学中,老男孩发现很多Linux入门人员很害怕Shell编程,觉得Shell不好掌握,甚至是已经工作的企业运维人员对Shell编程也是一知半解,不能熟练运用。而市面上的Shell图书大多如出一辙,理论多,实战少。因此在众多学员和网友的关注和提议下,老男孩决定写一本比较与众不同的偏重实战的Shell编程书籍,相信本书一定会让众多读者受益,提升个人在企业工作中的效率,达到加薪升职的目的。 本书是老男孩Linux运维实战系列的第二本书,第一本是《跟老男孩学习Linux运维:Web集群实践》(已由机械工业出版社出版),第三本是《跟老男孩学习Linux运维:三剑客命令实战》(预计书名),此书将在几个月后和大家见面。更多Linux运维实战系列的图书在持续写作中,敬请期待。 读者对象热衷于IT运维自动化的人员Linux系统管理员和运维工程师互联网网站开发及数据库管理人员网络管理员和项目实施工程师Linux相关售前售后技术工程师开设Linux相关课程的大中专院校对Linux及Shell编程感兴趣的人员如何阅读本书本书是一本较完整的Shell编程实战型图书,并非大而全,但处处可以体现实战二字,大多内容取于企业实战,并结合老男孩十几年的运维工作和教学工作进行了梳理。本书从脉络上可分为五大部分: 第一部分为Shell编程基础篇(第1章~第4章),着重介绍新手如何学好Shell编程,涉及的内容包括Shell编程的入门介绍、基础知识、运行原理、编程语法、编程习惯、变量知识以及变量的深入实践。读者学完此部分,将会具备一个学好Shell编程的坚实基础。 第二部分为初中级的实战知识和技能篇(第5章~第8章),着重讲解变量的多种数值运算、条件测试与比较、if条件判断语句、Shell函数等相关的知识,并给出了企业实战技巧和案例。本部分是学好Shell编程的重中之重,读者必须掌握。 第三部分为Shell中高级实战知识和技能篇(第9章~第13章),着重讲解case条件语句、while循环和until型循环、for循环和select循环、条件与循环控制及状态返回值、Shell数组等知识,以及相应的实战技巧和案例。本部分同样是学好Shell编程的重中之重,读者必须掌握。 第四部分为高效Shell编程必备知识篇(第14章~第16章),着重讲解Shell脚本开发规范与编码习惯、Shell脚本的调试知识和技巧、Shell脚本开发环境的配置调整和优化等。 第五部分为Shell特殊应用及企业面试、实战案例篇(第17章~第19章),着重讲解Linux信号及trap命令的企业应用实践、Expect自动化交互式程序的应用实践,以及能体现全书所讲技术的面试题和企业实战案例,让真正的Shell全自动化运维成为可能。 最后一章补充讲解了大家易感困惑的子Shell知识及应用实践内容。 勘误和支持由于作者所授的培训课程排期很紧,课程较多,全书内容基本上都是利用早晨和夜里的时间完成写作的。限于作者的水平和能力,加之编写的时间仓促,书中难免有疏漏和不当之处,恳请读者批评指正。你可以将书中的错误发布在专门为本书准备的博客地址评论处(http://oldboy.blog.51cto.com/2561410/1865956或微博http://weibo.com/oldboy8)。同时不管你遇到何种问题,都可以加入我为本书提供的QQ交流群204041129(验证信息:Shell书籍),我将尽力为你提供最满意的解答。书中所需的工具及源文件也将发布在的博客网站上(书中大部分章节结尾都给出了相关网址及二维码),我也会将相应功能的更新及时发布出来。如果你有更多的宝贵意见,也欢迎发送邮件至邮箱oldboy@oldboyedu.com,很期待能够听到你们的真挚反馈。 致谢感谢犹金毅、何清等为本书贡献第20章的重要底稿内容及对本书的写作给予的支持。
老男孩介绍:专注于Linux运维架构领域一线运维及管理工作13年以上,擅长大规模互联网网站集群架构技术细节,曾服务于全国大的基础远程教育公司及全球大的中文百科网站,曾为某门户网站的早期及某大型培训机构早期提供过顾问服务,老男孩老师对于运维技术有着非同常人的独特理解,经过近10多年工作和教学,形成了比较完善的个人创新的运维思想、思维体系,长期担当多家互联网企业技术顾问及企业培训特聘讲师。曾3度创业,后于2007年开办国内首个Linux运维实战培训私塾式精英教育培训机构及项目实施服务公司【老男孩Linux高薪实战教育】。截止到2014年8月,累计受益学生达到数万人,至今仍工作在一线,运维及教育。。博客: http://oldboy.blog.51cto.com/网站: http://www.etiantian.org
目录前 言第1章 如何才能学好Shell编程 / 11.1 为什么要学习Shell编程 / 11.2 学好Shell编程所需的基础知识 / 11.3 如何才能学好Shell编程之老鸟经验谈 / 31.4 学完本书后可以达到何种Shell编程高度 / 5第2章 Shell脚本初步入门 / 62.1 什么是Shell / 62.2 什么是Shell脚本 / 72.3 Shell脚本在Linux运维工作中的地位 / 82.4 脚本语言的种类 / 92.4.1 Shell脚本语言的种类 / 92.4.2 其他常用的脚本语言种类 / 102.4.3 Shell脚本语言的优势 / 112.5 常用操作系统默认的Shell / 112.6 Shell脚本的建立和执行 / 122.6.1 Shell脚本的建立 / 122.6.2 Shell脚本的执行 / 152.6.3 Shell脚本开发的基本规范及习惯 / 19第3章 Shell变量的核心基础知识与实践 / 223.1 什么是Shell变量 / 223.2 环境变量 / 233.2.1 自定义环境变量 / 263.2.2 显示与取消环境变量 / 283.2.3 环境变量初始化与对应文件的生效顺序 / 303.3 普通变量 / 313.3.1 定义本地变量 / 313.3.2 变量定义及变量输出说明 / 353.4 变量定义技巧总结 / 40第4章 Shell变量知识进阶与实践 / 414.1 Shell中特殊且重要的变量 / 414.1.1 Shell中的特殊位置参数变量 / 414.1.2 Shell进程中的特殊状态变量 / 474.2 bash Shell内置变量命令 / 524.3 Shell变量子串知识及实践 / 554.3.1 Shell变量子串介绍 / 554.3.2 Shell变量子串的实践 / 564.3.3 变量子串的生产场景应用案例 / 594.4 Shell特殊扩展变量的知识与实践 / 604.4.1 Shell特殊扩展变量介绍 / 604.4.2 Shell特殊扩展变量的实践 / 614.4.3 Shell特殊扩展变量的生产场景应用案例 / 63第5章 变量的数值计算实践 / 655.1 算术运算符 / 655.2 双小括号(())数值运算命令 / 665.2.1 双小括号(())数值运算的基础语法 / 665.2.2 双小括号(())数值运算实践 / 665.3 let运算命令的用法 / 735.4 expr命令的用法 / 755.4.1 expr命令的基本用法示例 / 755.4.2 expr的企业级实战案例详解 / 765.5 bc命令的用法 / 815.6 awk实现计算 / 835.7 declare(同typeset)命令的用法 / 835.8 $[]符号的运算示例 / 835.9 基于Shell变量输入read命令的运算实践 / 845.9.1 read命令基础 / 845.9.2 以read命令读入及传参的综合企业案例 / 87第6章 Shell脚本的条件测试与比较 / 926.1 Shell脚本的条件测试 / 926.1.1 条件测试方法综述 / 926.1.2 test条件测试的简单语法及示例 / 936.1.3 [](中括号)条件测试语法及示例 / 946.1.4 [[]]条件测试语法及示例 / 956.2 文件测试表达式 / 976.2.1 文件测试表达式的用法 / 976.2.2 文件测试表达式举例 / 976.2.3 特殊条件测试表达式案例 / 1016.3 字符串测试表达式 / 1026.3.1 字符串测试操作符 / 1026.3.2 字符串测试生产案例 / 1046.4 整数二元比较操作符 / 1056.4.1 整数二元比较操作符介绍 / 1056.4.2 整数变量测试实践示例 / 1076.5 逻辑操作符 / 1086.5.1 逻辑操作符介绍 / 1086.5.2 逻辑操作符实践示例 / 1106.5.3 逻辑操作符企业案例 / 1126.6 测试表达式test、[]、[[]]、(())的区别总结 / 120第7章 if条件语句的知识与实践 / 1217.1 if条件语句 / 1217.1.1 if条件语句的语法 / 1217.1.2 if条件语句多种条件表达式语法 / 1257.1.3 单分支if条件语句实践 / 1267.1.4 if条件语句的深入实践 / 1307.2 if条件语句企业案例精讲 / 1327.2.1 监控Web和数据库的企业案例 / 1327.2.2 比较大小的经典拓展案例 / 1427.2.3 判断字符串是否为数字的多种思路 / 1437.2.4 判断字符串长度是否为0的多种思路 / 1457.2.5 更多的生产场景实战案例 / 145第8章 Shell函数的知识与实践 / 1518.1 Shell函数的概念与作用介绍 / 1518.2 Shell函数的语法 / 1528.3 Shell函数的执行 / 1528.4 Shell函数的基础实践 / 1538.5 利用Shell函数开发企业级URL检测脚本 / 1558.6 利用Shell函数开发一键优化系统脚本 / 1588.7 利用Shell函数开发rsync服务启动脚本 / 166第9章 case条件语句的应用实践 / 1699.1 case条件语句的语法 / 1699.2 case条件语句实践 / 1719.3 实践:给输出的字符串加颜色 / 1769.3.1 给输出的字符串加颜色的基础知识 / 1769.3.2 结合case语句给输出的字符串加颜色 / 1779.3.3 给输出的字符串加背景颜色 / 1809.4 case语句企业级生产案例 / 1819.5 case条件语句的Linux系统脚本范例 / 1879.6 本章小结 / 191第10章 while循环和until循环的应用实践 / 19210.1 当型和直到型循环语法 / 19210.1.1 while循环语句 / 19210.1.2 until循环语句 / 19310.2 当型和直到型循环的基本范例 / 194