具体描述
编辑推荐
本书是Unix Shell Programming经典畅销图书的全新升级版本,遵循了上一版的写作手法,并以POSIX标准Shell为平台,讲解了在Shell编程环境中编写程序的方法,以充分利用UNIX和类UNIX操作系统的潜在性能。
本书首先快速回顾了UNIX的各种实用工具,然后讲解了在Shell环境中编写、调试Shell脚本,以及理解其工作方式的所有内容。本书囊括了Shell的所有主要特性,包含了大量实用案例,旨在让你针对特定的应用轻松开发Shell脚本。本书还讲解了Korn和Bash Shell的主要特性。
本书内容:
充分利用UNIX系统中提供的各种实用工具
编写强大的Shell脚本
使用Shell内置的决策和循环结构
使用Shell强大的引用机制
充分使用Shell内置的历史和命令编辑功能
在UNIX命令中使用正则表达式
使用Korn和Bash Shell的特殊特性
识别不同Shell语言版本之间的主要差异
自定义UNIX系统的响应方式
设置Shell环境
使用函数
调试脚本 内容简介
《UNIX Linux OS X中的Shell编程 第4版》是经典图书Unix Shell Programming时隔15年之后的全新升级版本,全面讲解了如何在POSIX标准Shell环境中开发程序,以充分发挥UNIX和类UNIX操作系统的潜在功能。
《UNIX Linux OS X中的Shell编程 第4版》共分为14章,其内容涵盖了Linux/UNIX的基础知识,Shell的概念、工作原理和运行机制,编写Shell程序时使用的一些工具,Shell中的脚本与变量,在Shell中如何解释引用,传递参数,条件语句,循环,数据的读取及打印,Shell环境,交互式以及非标准Shell的特性等。《UNIX Linux OS X中的Shell编程 第4版》后面的两个附录还提供了POSIX标准Shell的特性汇总信息,以及有助于进一步学习掌握Shell编程的资源。
《UNIX Linux OS X中的Shell编程 第4版》坚持以“实例教学”为理念,旨在鼓励读者动手实践,从而彻底掌握Shell编程。本书实例丰富,内容易懂,特别适合有志于掌握Shell编程的Linux/UNIX初级用户阅读。 作者简介
Stephen Kochan是多本UNIX和C语言畅销书的作者与合著者,其中包括Programming in C、Programming in Objective-C、Topics in C Programming和Exploring the Unix System。他之前是AT&T;贝尔实验室的软件顾问,负责开发和讲授UNIX和C语言编程相关的课程。
Patrick Wood是Electronics for Imaging公司(坐落于新泽西)的CTO(首席技术官)。他之前曾经是贝尔实验室的一名技术人员,并在1985年遇到了Kochan先生。随后他们俩共同创建了Pipeline Associates, Inc. 公司,提供UNIX咨询服务,当时他是公司的副总裁。他们共同写作了Exploring the Unix System、Unix System Security、Topics in C Programming和Unix Shell Programming等图书。 目录
第1章 基础概述 1
1.1 基础命令 1
1.1.1 显示日期和时间:date命令 1
1.1.2 找出已登录人员:who命令 1
1.1.3 回显字符:echo命令 2
1.2 使用文件 2
1.2.1 列举文件:ls命令 3
1.2.2 显示文件内容:cat命令 3
1.2.3 统计文件中单词数量:wc命令 3
1.2.4 命令选项 3
1.2.5 复制文件:cp命令 4
1.2.6 文件重命名:mv命令 4
1.2.7 删除文件:rm命令 5
1.3 使用目录 5
1.3.1 主目录和路径名 6
1.3.2 显示工作目录:pwd命令 7
1.3.3 更改目录:cd命令 7
1.3.4 ls命令的更多用法 10
1.3.5 创建目录:mkdir命令 12
1.3.6 在目录之间复制文件 12
1.3.7 在目录间移动文件 13
1.3.8 文件链接:ln命令 14
1.3.9 删除目录:rmdir命令 17
1.4 文件名替换 18
1.4.1 星号 18
1.4.2 匹配单个字符 20
1.5 文件名中不易察觉的部分 21
1.5.1 文件名中的空格 21
1.5.2 其他怪异的字符 22
1.6 标准输入/输出和I/O重定向 22
1.6.1 标准输入和标准输出 22
1.6.2 输出重定向 24
1.6.3 输入重定向 26
1.7 管道 27
1.8 标准错误 29
1.9 命令后话 29
1.9.1 在一行中输入多个命令 29
1.9.2 向后台发送命令 30
1.9.3 ps命令 30
1.10 命令总结 31
第2章 什么是Shell 33
2.1 内核和实用工具 33
2.2 登录Shell 34
2.3 在Shell中输入命令 37
2.4 Shell的职责 38
2.4.1 程序执行 39
2.4.2 变量及文件名替换 40
2.4.3 I/O重定向 41
2.4.4 管道 42
2.4.5 环境控制 42
2.4.6 解释型编程语言 43
第3章 常备工具 44
3.1 正则表达式 44
3.1.1 匹配任意字符:点号(.) 44
3.1.2 匹配行首:脱字符(^) 46
3.1.3 匹配行尾:美元符号($) 46
3.1.4 匹配字符组:[...] 47
3.1.5 匹配零个或多个字符:星号(*) 50
3.1.6 匹配固定次数的子模式:{...} 52
3.1.7 保存已匹配的字符:(...) 54
3.2 cut 57
3.3 paste 61
3.3.1 -d选项 62
3.3.2 -s选项 62
3.4 sed 63
3.4.1 -n选项 64
3.4.2 删除行 65
3.5 tr 66
3.5.1 -s选项 69
3.5.2 -d选项 69
3.6 grep 70
3.6.1 正则表达式与grep 73
3.6.2 -v选项 74
3.6.3 -l选项 74
3.6.4 -n选项 75
3.7 sort 76
3.7.1 -u选项 76
3.7.2 -r选项 77
3.7.3 -o选项 77
3.7.4 -n选项 78
3.7.5 跳过某些字段 78
3.7.6 -t选项 79
3.7.7 其他选项 80
3.8 uniq 80
3.8.1 -d选项 81
3.8.2 其他选项 82
第4章 脚本与变量 83
4.1 命令文件 83
4.2 变量 86
4.2.1 显示变量值 87
4.2.2 未定义变量的值为空 89
4.2.3 文件名替换与变量 91
4.2.4 ${variable}结构 92
4.3 内建的整数算术操作 92
第5章 引用 95
5.1 单引号 95
5.2 双引号 98
5.3 反斜线 101
5.3.1 使用反斜线续行 102
5.3.2 双引号中的反斜线 102
5.4 命令替换 103
5.4.1 反引号 104
5.4.2 $(...)结构 104
5.5 expr命令 108
第6章 传递参数 111
6.1 变量$# 112
6.2 变量$* 113
6.3 在电话簿中查找联系人 113
6.4 向电话簿中添加联系人 115
6.5 从电话簿中删除联系人 116
6.6 shift命令 118
第7章 条件语句 120
7.1 退出状态 120
7.2 变量$ 121
7.3 test命令 124
7.3.1 字符串操作符 124
7.3.2 test的另一种格式 128
7.3.3 整数操作符 129
7.3.4 文件操作符 130
7.3.5 逻辑否定操作符! 131
7.3.6 逻辑“与”操作符-a 131
7.3.7 括号 132
7.3.8 逻辑“或”操作符-o 132
7.4 else 133
7.5 exit命令 135
7.6 elif 137
7.7 case命令 141
7.7.1 特殊的模式匹配字符 142
7.7.2 调试选项-x 144
7.7.3 再谈case 147
7.8 空命令: 148
7.9 &&和|| 149
第8章 循环 151
8.1 for命令 151
8.1.1 $@变量 154
8.1.2 不使用列表的for命令 155
8.2 while命令 156
8.3 until命令 158
8.4 再谈循环 162
8.4.1 跳出循环 162
8.4.2 跳过循环中余下的命令 163
8.4.3 在后台执行循环 164
8.4.4 循环上的I/O重定向 165
8.4.5 将数据导入及导出循环 166
8.4.6 单行循环 166
8.5 getopts命令 167
第9章 数据的读取及打印 171
9.1 read命令 171
9.1.1 文件复制程序 171
9.1.2 特殊的echo转义字符 173
9.1.3 mycp的改进版本 174
9.1.4 mycp的最终版本 175
9.1.5 菜单驱动的电话簿程序 179
9.1.6 变量$$与临时文件 183
9.1.7 read的退出状态 184
9.2 printf命令 187
第10章 环境 192
10.1 局部变量 192
10.2 导出变量 194
10.3 PS1和PS2 198
10.4 HOME 199
10.5 PATH 199
10.6 当前目录 206
10.7 再谈子Shell 208
10.7.1 .命令 209
10.7.2 exec命令 212
10.7.3 (...)和{ ...; } 212
10.7.4 另一种将变量传给子Shell的方法 215
10.8 .profile文件 216
10.9 TERM变量 217
10.10 TZ变量 218
第11章 再谈参数 219
11.1 参数替换 219
11.1.1 ${parameter} 219
11.1.2 ${parameter:-value} 220
11.1.3 ${parameter:=value} 220
11.1.4 ${parameter: value} 221
11.1.5 ${parameter:+value} 222
11.1.6 模式匹配 222
11.1.7 ${#variable} 224
11.2 $0变量 224
11.3 set命令 225
11.3.1 -x选项 225
11.3.2 无参数的set 226
11.3.3 使用set为位置参数重新赋值 227
11.3.4 --选项 228
11.3.5 set的其他选项 230
11.4 IFS变量 230
11.5 readonly命令 233
11.6 unset命令 234
第12章 拓展内容 235
12.1 eval命令 235
12.2 wait命令 237
12.3 $!变量 237
12.4 trap命令 238
12.4.1 不使用参数的trap 239
12.4.2 忽略信号 240
12.4.3 重置信号 240
12.5 再谈I/O 241
12.5.1 <&-与>&- 242
12.5.2 行内输入重定向 242
12.5.3 Shell归档文件 244
12.6 函数 247
12.6.1 删除函数 250
12.6.2 return命令 250
12.7 type命令 250
第13章 再谈rolo 251
13.1 数据格式化考量 251
13.2 rolo 252
13.3 add 254
13.4 lu 255
13.5 display 256
13.6 rem 257
13.7 change 259
13.8 listall 260
13.9 样例输出 261
第14章 交互式与非标准Shell特性 265
14.1 使用正确的Shell 265
14.2 ENV文件 266
14.3 命令行编辑 267
14.4 命令历史 267
14.5 vi行编辑模式 268
14.6 emacs行编辑模式 272
14.7 访问历史记录的其他方法 275
14.7.1 history命令 275
14.7.2 fc命令 276
14.7.3 r命令 277
14.8 函数 278
14.8.1 局部变量 278
14.8.2 自动载入函数 278
14.9 整数算术 278
14.9.1 整数类型 279
14.9.2 不同基数的数字 280
14.10 alias命令 282
14.11 数组 284
14.12 作业控制 289
14.13 其他特性 292
14.13.1 cd命令的其他特性 292
14.13.2 波浪符替换 292
14.13.3 搜索次序 293
14.14 兼容性总结 294
附录A Shell总结 295
附录B 更多的相关信息 329
UNIX、Linux与macOS下的Shell编程(第四版):深入探索命令行的无限可能 本书是一本权威的Shell编程指南,专为希望精通UNIX、Linux及macOS操作系统下命令行交互和自动化任务的开发者、系统管理员和技术爱好者而设计。第四版在原有坚实基础上,融入了最新技术发展和实践经验,内容更加全面、深入且贴合现代计算环境的需求。 本书的核心价值在于: 解锁命令行强大功能: Shell不仅仅是输入命令的界面,更是强大的脚本语言和自动化工具。本书将带领您从基础概念出发,逐步掌握Shell脚本的编写、调试与优化,理解其在系统管理、开发流程、数据处理等各个环节的核心作用。 跨平台适应性: 尽管UNIX、Linux和macOS在用户界面上有所差异,但其底层的Shell环境(如Bash、Zsh等)却有着高度的共通性。本书的内容设计充分考虑了这一点,确保您学到的知识能够灵活应用于这三大主流操作系统,极大地提升了您的工作效率和通用性。 从入门到精通的系统性学习路径: 无论您是刚刚接触Shell命令,还是已经具备一定的脚本编写经验,本书都能为您提供一条清晰的学习路径。我们从最基础的命令、文件操作、文本处理入手,逐步深入到变量、流程控制、函数、正则表达式、进程管理、系统调用等高级主题,直至编写复杂的自动化脚本和构建自定义工具。 实战导向,注重应用: 理论知识的学习固然重要,但更关键的是如何将其转化为解决实际问题的能力。本书提供了大量精心设计的示例和练习,涵盖了从日常系统维护、软件安装配置,到 Web 服务器管理、数据备份恢复、日志分析、自动化部署等各种真实场景。通过动手实践,您将深刻理解Shell编程在提高工作效率、减少人为错误、实现系统自动化方面的巨大价值。 拥抱现代Shell特性: 随着Shell技术的不断发展,新的特性和工具层出不穷。本书在第四版中,着重介绍了诸如Bash的最新特性、Zsh的强大功能(如自动补全、插件系统),以及更现代化的命令行工具和工作流。您将学习如何利用这些新工具,让您的Shell编程体验更加高效、便捷和强大。 本书内容涵盖(但不限于)以下关键领域: 第一部分:Shell基础与命令行的艺术 Shell入门: 深入理解Shell的作用、类型(Bash, Zsh, Ksh等)及其历史。学习如何在不同操作系统中选择和配置您的Shell环境。 基本命令与文件操作: 精通 `ls`, `cd`, `pwd`, `mkdir`, `rm`, `cp`, `mv` 等核心命令,理解文件权限、所有权、链接的概念。 文本处理利器: 掌握 `cat`, `more`, `less`, `head`, `tail`, `grep`, `sed`, `awk` 等强大的文本处理工具,学习如何高效地提取、过滤、转换和分析文本数据。 输入/输出重定向与管道: 理解Shell如何处理标准输入、标准输出和标准错误,并学会利用重定向 (`>`, `>>`, `<`) 和管道 (`|`) 将命令串联起来,构建复杂的命令序列。 通配符与正则表达式: 熟练运用Shell通配符 (``, `?`, `[]`) 和正则表达式,进行灵活的文件匹配和模式查找。 命令行快捷键与技巧: 提升您的命令行操作效率,学习如何使用历史命令、自动补全、编辑命令等技巧。 第二部分:Shell脚本编程:自动化一切 脚本基础: 编写您的第一个Shell脚本,理解Shebang (`!`) 的作用,学习如何执行脚本。 变量与数据类型: 掌握Shell变量的声明、赋值、使用,理解字符串、整数等基本数据类型及其操作。 用户输入与参数传递: 学习如何获取用户输入 (`read`),以及如何处理脚本运行时传递的命令行参数 (`$1`, `$@`, `$`)。 条件判断与逻辑控制: 使用 `if`, `else`, `elif`, `case` 语句实现条件分支,构建根据不同情况执行不同操作的脚本。 循环结构: 掌握 `for`, `while`, `until` 循环,实现重复执行任务,批量处理文件和数据。 函数: 学习如何定义和调用函数,实现代码的模块化和重用,提高脚本的可读性和维护性。 数组: 理解Shell中的数组概念,学习如何创建、访问和操作数组元素。 错误处理与调试: 学习如何捕获和处理脚本中的错误,使用 `set -e`, `set -u`, `set -x` 等选项进行调试,编写健壮的脚本。 文件测试与字符串操作: 深入学习Shell提供的文件测试运算符(如 `-f`, `-d`, `-r`, `-w`, `-x`)和字符串操作符,实现更复杂的逻辑判断。 第三部分:高级Shell编程与系统交互 进程管理: 理解进程的概念,学习如何使用 `ps`, `top`, `kill`, `nice`, `nohup` 等命令管理系统进程。 信号处理: 了解Shell信号的作用,学习如何捕获和响应信号,实现更优雅的程序控制。 Shell扩展与参数展开: 探索Shell的高级功能,如命令替换 (`$(command)` 或 ``` `command` ```), 变量展开(`${variable:-default}`)等。 正则表达式进阶: 深入理解更强大的正则表达式引擎(如PCRE),并将其应用于 `grep`, `sed`, `awk` 等工具中,实现复杂的文本匹配和替换。 Shell脚本的最佳实践: 学习如何编写可读性强、易于维护、高效安全的Shell脚本,包括命名规范、注释、代码风格等。 与外部命令的交互: 学习如何优雅地处理外部命令的退出状态码,如何捕获和解析外部命令的输出。 使用`find`命令进行高级文件搜索: 掌握 `find` 命令的强大功能,实现基于名称、类型、大小、修改时间等多种条件的复杂文件查找。 系统信息收集与监控: 学习如何利用Shell脚本获取系统负载、磁盘空间、内存使用率、网络状态等信息,为系统监控打下基础。 第四部分:Shell脚本在现代开发与管理中的应用 自动化部署与配置管理: 学习如何编写Shell脚本来自动化软件的安装、配置和部署过程,大大简化IT运维工作。 数据处理与报告生成: 利用Shell脚本和文本处理工具,对日志文件、CSV文件等数据进行分析,并生成有用的报告。 版本控制与备份: 学习如何结合Shell脚本进行Git仓库的管理、文件的自动备份和恢复。 Web服务器管理: 编写脚本来管理Nginx, Apache等Web服务器的启动、停止、配置更新。 面向开发的Shell脚本: 探索Shell脚本在软件开发生命周期中的应用,如自动化构建、测试、代码打包等。 与其他语言的集成: 了解如何从Shell脚本调用Python, Perl, Ruby等其他脚本语言,或者反之。 安全注意事项: 学习编写安全的Shell脚本,避免潜在的安全漏洞。 Shell脚本性能优化: 掌握优化Shell脚本执行效率的技巧,使其运行得更快、更省资源。 本书特点: 清晰的结构和循序渐进的难度: 内容组织逻辑性强,从易到难,确保读者能够逐步掌握。 丰富的代码示例: 每个概念都配有清晰、可运行的代码示例,方便读者理解和实践。 实用的练习题: 章节末尾提供练习题,帮助读者巩固所学知识,培养解决问题的能力。 深入的原理讲解: 不仅告诉您“怎么做”,更解释“为什么这么做”,帮助读者建立深刻的理解。 贴近实际工作场景: 案例和练习的设计都紧密结合了实际工作中的需求。 全面覆盖UNIX, Linux, macOS: 内容具有高度的通用性,适用范围广。 谁应该阅读本书? 系统管理员: 学习如何自动化日常任务,提高效率,减少错误。 软件开发者: 掌握Shell脚本,用于构建工具链、自动化测试、部署等。 DevOps工程师: 深入理解和运用Shell脚本,是DevOps实践的核心技能。 数据科学家/分析师: 利用Shell工具进行数据预处理、清洗和初步分析。 任何希望提升命令行技能和自动化能力的IT专业人士。 对操作系统底层原理和命令行交互感兴趣的学生和爱好者。 通过学习本书,您将能够: 自信地在UNIX、Linux和macOS环境下进行高效的命令行操作。 编写出强大、灵活且可维护的Shell脚本,实现各种自动化任务。 深入理解Shell的工作原理,更好地诊断和解决系统问题。 将Shell编程作为一项核心技能,极大地提升您的职业竞争力。 UNIX、Linux与macOS下的Shell编程(第四版) 将是您在命令行世界中披荆斩棘、实现智能自动化的得力助手。踏上这段旅程,开启您的Shell编程精通之路!