编辑推荐
从基础到精通全面介绍Linux Shell编程
畅销不衰的Linux经典入门图书
适用于各种常见版本的Linux Shell
Linux管理人员的参考手册
丰富典型的实操案例
全程录像的视频讲解光盘
内容简介
本书由浅入深、循序渐进地详细讲解了LinuxShell编程的基本知识。这些基本知识包括Shell编程的基本知识、文本处理的工具和方法、正则表达式、Linux系统知识等。
本书旨在通过理清Linux Shell编程的脉络,从基本概念着手,以丰富、实用的范例作为辅助,使读者能够深入浅出的学习LinuxShell编程。
本书的每一章节都配有综合案例,这些综合案例不仅可以使读者复习前面所学的知识,还可以增加开发项目的经验。这些案例实用性很强,许多代码可以直接应用到Linux系统管理中。
本书配有全程录像的视频讲解光盘,读者可以将视频和书结合起来学习,可以更快、更好地掌握Linux Shell编程技术。
本书适合于Linux Shell编程的初学者,有一定LinuxShell编程基础,但还需要进一步提高的人阅读。本书对于有一定编程经验的程序员也有很好的参考价值。
作者简介
张昊,毕业于南京大学理学院,南京大学开源爱好者组织创始人、南京Linux 使用者组织(NJLUG) 创始人,曾经任职于千橡互动从事底层引擎的开发,编写《Linux Shell编程从入门到精通》。程国钢,北京航空航天大学博士,有丰富的教学科研技术经验,开设单片机教学课程,承担过基于嵌入式的国家863级课题、院级别和国家气象局项目,有多本图书编写经验。
内页插图
目录
第1章 初识Shell程序
1.1 第一道菜
1.2 如何运行程序
1.2.1 选婿:位于第一行的#!
1.2.2 找茬:程序执行的差异
1.2.3 shell的命令种类
1.3 Linux Shell的变量
1.3.1 变量
1.3.2 用echo输出变量
1.3.3 环境变量的相关操作
1.3.4 shell中一些常用环境变量
1.4 Linux Shell是解释型语言
1.4.1 编译型语言与解释型语言
1.4.2 Linux Shell编程的优势
1.5 小结
第2章 Shell编程基础
2.1 向脚本传递参数
2.1.1 Shell脚本的参数
2.1.2 参数的用途
2.2 I/O重定向
2.2.1 标准输入、标准输出与标准错误
2.2.2 管道与重定向
2.2.3 文件描述符
2.2.4 特殊文件的妙用
2.3 基本文本检索
2.4 UNIX/Linux系统的设计与shell 编程
2.4.1 一切皆文件
2.4.2 UNIX编程的基本原则
2.5 小结
第3章 编程的基本元素
3.1 再识变量
3.1.1 用户变量
3.1.2 位置变量
3.1.3 环境变量
3.1.4 启动文件
3.2 函数
3.2.1 函数定义
3.2.2 函数的参数和返回值
3.3 条件控制与流程控制
3.3.1 if/else语句
3.3.2 退出状态
3.3.3 退出状态与逻辑操作
3.3.4 条件测试
3.4 循环控制
3.4.1 for循环
3.4.2 while/until循环
3.4.3 跳出循环
3.4.4 循环实例
3.5 小结
第4章 正则表达式
4.1 什么是正则表达式
4.1.1 正则表达式的广泛应用
4.1.2 如何学习正则表达式
4.1.3 如何实践正则表达式
4.2 正则基础
4.2.1 元字符
4.2.2 单个字符
4.2.3 单个表达式匹配多个字符
4.2.4 文本匹配锚点
4.2.5 运算符优先级
4.2.6 更多差异
4.3 正则表达式的应用
4.3.1 扩展
4.3.2 案例研究:罗马数字
4.3.3 案例研究:解析电话号码
4.4 小结
第5章 基本文本处理
5.1 排序文本
5.1.1 sort命令的行排序
5.1.2 sort命令的字段排序
5.1.3 sort小结
5.2 文本去重
5.3 统计文本行数、字数以及字 符数
5.4 打印和格式化输出
5.4.1 使用pr打印文件
5.4.2 使用fmt命令格式化文本
5.4.3 使用fold限制文本宽度
5.5 提取文本开头和结尾
5.6 字段处理
5.6.1 字段的使用案例
5.6.2 使用cut取出字段
5.6.3 使用join连接字段
5.6.4 其他字段处理方法
5.7 文本替换
5.7.1 使用tr替换字符
5.7.2 其他选择
5.8 一个稍微复杂的例子
5.8.1 实例描述
5.8.2 取出记录的ip字段和id字段
5.8.3 将记录按照IP顺序排序
5.8.4 使用uniq统计重复IP
5.8.5 根据访问次数进行排序
5.8.6 提取出现次数最多的100条
5.9 小结
第6章 文件和文件系统
6.1 文件
6.1.1 列出文件
6.1.2 文件的类型
6.1.3 文件的权限
6.1.4 文件的修改时间
6.2 寻找文件
6.2.1 find命令的参数
6.2.2 遍历文件
6.3 比较文件
6.3.1 使用comm比较排序后文件
6.3.2 使用diff比较文件
6.3.3 其他文本比较方法
6.4 文件系统
6.4.1 什么是文件系统
6.4.2 文件系统与磁盘分区
6.4.3 Linux分区格式的选择与安全性
6.4.4 文件系统与目录树
6.4.5 文件系统的创建与挂载
6.5 小结
第7章 流编辑
7.1 什么是sed
7.1.1 挑选编辑器
7.1.2 sed的版本
7.2 sed示例
7.2.1 sed的工作方式
7.2.2 sed工作的地址范围
7.2.3 规则表达式
7.3 更强大的sed功能
7.3.1 替换
7.3.2 地址范围的迷惑
7.4 组合命令
7.4.1 组合多条命令
7.4.2 将多条命令应用到一个地址范围
7.5 实际的例子
7.6 sed实践
7.6.1 第一步 替换名字
7.6.2 第二步 删除前3行
7.6.3 第三步 显示5~10行
7.6.4 第四步 删除包含Lane的行
7.6.5 第五步 显示生日在November-December之间的行
7.6.6 第六步 把3个星号(***)添加到以Fred开头的行
7.6.7 第七步 用JOSE HASRETIRED取代包含Jose的行
7.6.8 第八步 把Popeye的生日改成11/14/46
7.6.9 第九步 删除所有空白行
7.6.10 第十步 脚本
7.7 小结
第8章 文本处理利器awk
8.1 来个案例
8.2 基本语法
8.2.1 多个字段
8.2.2 使用其他字段分隔符
8.3 AWK语言特性
8.3.1 AWK代码结构
8.3.2 变量与数组
8.3.3 算术运算和运算符
8.3.4 判断与循环
8.3.5 多条记录
8.4 用户自定义函数
8.4.1 自定义函数格式
8.4.2 引用传递和值传递
8.4.3 递归调用
8.5 字符串与算术处理
8.5.1 格式化输出
8.5.2 字符串函数
8.5.3 算术函数
8.6 案例分析
8.6.1 生成数据报表
8.6.2 多文件联合处理
8.6.3 检验passwd格式的正确性
8.6.4 sed/awk单行脚本
8.7 小结
第9章 进程
9.1 进程的含义与查看
9.1.1 理解进程
9.1.2 创建进程
9.1.3 查看进程
9.1.4 进程的属性
9.2 进程管理
9.2.1 进程的状态
9.2.2 shell命令的执行
9.2.3 进程与任务调度
9.3 信号
9.3.1 信号的基本概念
9.3.2 产生信号
9.4 Linux的第一个进程init
9.5 案例分析:Linux系统中管道的实现
9.6 调度系统任务
9.6.1 任务调度的基本介绍
9.6.2 调度重复性系统任务(cron)
9.6.3 使用at命令
9.7 进程的窗口/proc
9.7.1 proc——虚拟文件系统
9.7.2 查看/proc的文件
9.7.3 从proc获取信息
9.7.4 通过/proc与内核交互
9.8 Linux的线程简介
9.8.1 Linux线程的定义
9.8.2 Pthread线程的使用场合
9.8.3 Linux进程和线程的发展
9.9 小结
第10章 超级工具
10.1 不同的shell
10.1.1 修改登录shell和切换shell
10.1.2 选择shell
10.2 SSH
10.2.1 SSH的安全验证机制
10.2.2 使用SSH登录远程主机
10.2.3 OpenSSH密钥管理
10.2.4 配置SSH
10.2.5 使用SSH工具套装拷贝文件
10.3 screen工具
10.3.1 任务退出的元凶:SIGHUP信号
10.3.2 开始使用screen
10.3.3 screen常用选项
10.3.4 实例:ssh+screen管理远程会话
10.4 文本编辑工具Vim
10.4.1 为什么选择Vim
10.4.2 从何处获取Vim
10.4.3 Vim的工作模式
10.4.4 首次接触:step by step
10.4.5 鼠标的移动
10.4.6 基本编辑指令
10.4.7 复制(yank)
10.4.8 搜寻、替换
10.5 小结
第11章 Linux
前言/序言
Linux Shell 编程:掌握命令行的强大力量 在当今技术飞速发展的时代,掌握强大的命令行工具已成为提升效率、解决复杂问题以及深入理解操作系统运作机制的关键。Linux Shell 编程,作为连接用户与 Linux 内核的桥梁,更是现代 IT 专业人士不可或缺的技能。本书旨在为读者提供一个全面而深入的学习路径,从 Shell 的基础概念出发,逐步引导读者掌握各种命令、脚本编写技巧,最终成为能够独立解决问题的 Shell 编程达人。 第一部分:Shell 基础与命令行的艺术 本部分将从最基础的概念入手,为读者构建坚实的 Shell 编程基础。我们将详细介绍 Shell 的概念,包括什么是 Shell、常见的 Shell 类型(如 Bash、Zsh),以及 Shell 在 Linux 系统中的重要作用。读者将学习如何与 Shell 进行交互,包括输入命令、理解命令的执行过程、以及如何利用 Shell 的历史命令功能来提高效率。 随后,我们将深入讲解 Linux 系统中常用的基础命令。这些命令是 Shell 编程的基石,掌握它们能够极大地扩展我们在命令行下的操作能力。我们将涵盖文件和目录管理命令(如 `ls`、`cd`、`mkdir`、`rm`、`cp`、`mv`),文本处理命令(如 `cat`、`less`、`more`、`head`、`tail`、`grep`、`sed`、`awk`),进程管理命令(如 `ps`、`top`、`kill`、`nice`),以及权限管理命令(如 `chmod`、`chown`)。对于每一个命令,我们都会详细解释其语法、常用选项以及实际应用场景,并通过丰富的示例来加深读者的理解。 此外,本部分还将介绍 Shell 的一些核心概念,如环境变量、通配符、I/O 重定向、管道以及命令的组合。理解这些概念对于编写更复杂、更强大的 Shell 脚本至关重要。我们将解释环境变量如何影响命令的执行,如何利用通配符简化文件匹配,如何通过重定向将命令的输出或输入导向文件,以及如何利用管道将多个命令的输出连接起来,实现数据的流水线处理。 第二部分:Shell 脚本编程的进阶之路 在掌握了 Shell 的基础知识和常用命令后,本部分将带领读者进入 Shell 脚本编程的精彩世界。我们将从编写简单的 Shell 脚本开始,逐步学习如何使用各种控制结构来构建逻辑清晰、功能强大的脚本。 首先,我们将介绍 Shell 脚本的基本结构,包括 Shebang(`!`)的使用、脚本的注释、以及如何使脚本可执行。然后,我们将深入讲解 Shell 脚本中的变量,包括变量的定义、赋值、使用以及常见的变量类型。理解变量是编写动态脚本的关键。 接下来,我们将详细介绍 Shell 脚本中的控制流结构,这是实现脚本逻辑的核心。我们将学习条件判断语句(如 `if`、`else`、`elif`、`case`),包括如何使用比较运算符、逻辑运算符以及文件测试运算符来构建复杂的条件判断。然后,我们将学习循环结构(如 `for`、`while`、`until`),包括如何迭代遍历文件列表、执行重复性任务,以及如何使用 `break` 和 `continue` 来控制循环的执行。 函数在 Shell 脚本编程中扮演着重要的角色,它们可以提高代码的复用性和模块化。本部分将详细讲解函数的定义、调用、参数传递以及返回值。通过函数,我们可以将复杂的任务分解成更小的、可管理的单元。 此外,我们还会介绍 Shell 脚本中常用的命令替换和命令替换的方式,以及如何使用它们来捕获命令的输出并将其作为变量使用。正则表达式在文本处理和模式匹配方面具有强大的能力,本部分将对其进行深入介绍,并展示如何在 Shell 脚本中使用 `grep`、`sed`、`awk` 等命令结合正则表达式来处理文本数据。 第三部分:高级 Shell 脚本技术与实践 在本部分,我们将进一步拓展读者的 Shell 脚本编程技能,学习更高级的技术和解决实际问题的策略。 我们将深入探讨 Shell 脚本中的错误处理机制。了解如何捕获和处理命令执行过程中可能出现的错误,以及如何使用 `exit` 命令来指定脚本的退出状态码,对于编写健壮的脚本至关重要。 信号处理是另一个重要的主题,我们将介绍如何使用 `trap` 命令来捕获和响应系统信号,从而实现更精细化的脚本控制,例如在脚本退出前执行清理操作。 数组在 Shell 脚本中提供了存储和操作多个数据项的能力。我们将详细介绍数组的声明、访问、以及常用的数组操作,例如数组元素的添加、删除和遍历。 我们将介绍如何使用 `read` 命令从用户输入或文件中读取数据,以及如何将这些数据用于脚本的逻辑判断和处理。 函数库的创建和使用也是本部分的重要内容。学习如何将常用的函数封装成库,然后在不同的脚本中引用和调用,可以极大地提高开发效率。 此外,我们还将介绍一些实用的 Shell 脚本编写技巧,例如如何调试 Shell 脚本、如何提高脚本的性能、以及如何编写可移植的 Shell 脚本。 第四部分:Shell 脚本在实际应用中的案例分析 理论结合实践是掌握任何技能的关键。本部分将通过一系列精心设计的实际应用案例,帮助读者巩固所学知识,并将 Shell 脚本的威力应用到实际工作中。 我们将从文件备份和归档的脚本开始,展示如何利用 `tar`、`gzip` 等命令结合 Shell 脚本实现自动化备份。 接着,我们将学习如何编写系统监控脚本,例如监控 CPU 使用率、内存占用、磁盘空间等,并实现异常情况的报警。 网络管理也是 Shell 脚本的常用领域,我们将展示如何编写脚本来自动化配置网络接口、检查网络连通性、以及进行端口扫描。 日志分析是系统管理中的重要环节,我们将学习如何利用 `grep`、`awk`、`sed` 等命令编写脚本来提取和分析日志文件中的关键信息。 此外,我们还将探讨如何利用 Shell 脚本与 `cron` 任务调度器结合,实现定时执行任务,以及如何编写脚本来管理用户和权限。 第五部分:Shell 编程的未来与扩展 在掌握了 Shell 编程的基础和进阶技能后,本部分将展望 Shell 编程的未来发展方向,并为读者提供进一步学习的建议。 我们将简要介绍一些更高级的 Shell 功能,例如 Shell 的一些内建命令和特殊的 Shell 变量。 我们将探讨 Shell 脚本与其它编程语言(如 Python、Perl)的集成,以及如何利用它们各自的优势来构建更复杂的系统。 最后,我们将提供一些学习资源和社区支持的建议,帮助读者在 Shell 编程的道路上不断成长,充分发挥 Linux Shell 编程的强大力量。 本书的编写力求通俗易懂,辅以大量生动形象的示例,旨在让每一位读者都能在掌握 Shell 编程的精髓后,自信地应对各种技术挑战,提升工作效率,并更深入地理解 Linux 操作系统的强大之处。无论您是初次接触 Linux 的新手,还是希望提升自身技术水平的 IT 专业人士,本书都将是您不可或缺的学习伙伴。