具体描述
产品特色
内容简介
《Shell脚本学习指南》将告诉你这些有关UNIX主流工具的知识。除此之外,《Shell脚本学习指南》还会帮助你解决UNIX命令与标准的差异。
作者熟知UNIx程序使用的基本技巧与操作上细微的差异。他们不但会告诉你如何构建一个很佳的脚本,还会教你如何避免落入让你功亏一篑的陷阱。有了《Shell脚本学习指南》,你可以节省很多力气。
我们要学习的不只是如何写出有用的Shell脚本,你还得了解如何迅速、确实地定制Shell,让程序的可移植性达到佳状态,脱离对特定系统的依赖。这些技巧对任何操作与维护UNIX及Linux系统的人而言都很重要。《Shell脚本学习指南》所提供的知识,将可以帮助你掌握基本的Shell脚本编写技巧。Shell脚本编程(scripting)的技巧永远不会过时:它们可以让UNIX充分发挥其真实的潜能。对uNIx的用户与系统管理者而言,编写shell脚本是必须的工作,它可以让你快速地控制与定制任何UNIX系统的强大功能。有了Shell脚本,你可以结合基本的UNIX文本与文件处理命令来消化数据,以及自动化重复的工作。一旦你对Shell脚本的编写掌控自如,在接下来的几年,这些技巧将对你相当有帮助。
编写shell脚本所需要的不只是对shell语言的认识,还必须熟知单个的uNIx程序:你必须知道每个程序为什么会放在那儿,以及如何使用该程序或如何将其与其他程序结合。
作者简介
Arnold Robbins是亚特兰大人,他是一个专业的程序员和技术性书籍的作者。他从1980年开始就使用Unix系统,那时他使用的是运行Unix版本6的PDP-11机器。1983年,他被迫学习vi编辑器,因为研究生院里的VAX Unix系统没有一个本地化的屏幕编辑器。从此以后他一直使用该编辑器。1987年以后,他也经常使用awk,并且参与了gawk(awk的GNU项目版本)的开发。作为POSIX 1003.2表决小组的成员,他对建立awk的POSIX标准起了一定的作用。他目前是gawk及其文档的维护人员。
内页插图
目录
序
前言
第1章 背景知识
1.1 UNIX简史
1.2 软件工具的原则
1.3 小结
第2章 入门
2.1 脚本编程语言与编译型语言的差异
2.2 为什么要使用Shell脚本
2.3 一个简单的脚本
2.4 自给自足的脚本:位于第一行的#!
2.5 Shell的基本元素
2.6 访问Shell脚本的参数
2.7 简单的执行跟踪
2.8 国际化与本地化
2.9 小结
第3章 查找与替换
3.1 查找文本
3.2 正则表达式
3.3 字段处理
3.4 小结
第4章 文本处理工具
4.1 排序文本
4.2 删除重复
4.3 重新格式化段落
4.4 计算行数、字数以及字符数
4.5 打印
4.6 提取开头或结尾数行
4.7 小结
第5章 管道的神奇魔力
5.1 从结构化文本文件中提取数据
5.2 针对Web的结构型数据
5.3 文字解谜好帮手
5.4 单词列表
5.5 标签列表
5.6 小结
第6章 变量、判断、重复动作
6.1 变量与算术
6.2 退出状态
6.3 case语句
……
第7章 输入/输出、文件与命令执行
第8章 产生脚本
第9章 awk的惊人表现
第10章 文件处理
第11章 扩展实例:合并用户数据库
第12章 拼写检查
第13章 进程
第14章 Shell可移植性议题与扩展
第15章 安全的Shell脚本:起点
附录A 编写手册页
附录B 文件与文件系统
附录C 重要的UNIX命令
参考书目
前言/序言
真的!我已经30年未写Shell脚本了?!?现在仔细想想,我想应该有吧,虽然一开始只是作些简单的工作(早期的UNIX Shell,在Bourne Shell之前,是极为原始的,因此要写个实用的脚本是很难的事,幸好那段日子并不长)。
近几年来,Shell一直被忽略,是一个不受重视的脚本语言。Shell虽然是UNIX的第一个脚本语言,但它仍是相当优秀的。它结合了延展性与效率,持续保有独具的特色,并不断地被改良,使它们多年来一直能与那些花招很多的脚本语言保持抗衡。GUI是比命令行Shell更流行的用户界面,但脚本语言时常都是这些花哨的屏幕图形界面最强有力的支柱,并一直称职地扮演这个角色。
通往系统自动化与高效命令行世界的钥匙 在数字化浪潮席卷的今天,无论是初涉IT领域的学生,还是经验丰富的系统管理员、开发人员,亦或是希望提升工作效率的各类技术从业者,都不可避免地要与命令行打交道。而Shell脚本,正是连接你与操作系统之间一座至关重要的桥梁,它赋予了你驾驭命令行、自动化繁琐任务的强大能力。 想象一下,每天重复执行着相同的命令序列?一次次地手动创建、复制、移动文件?或者需要定期备份、监控系统状态?如果这些场景让你感到头疼,那么Shell脚本将是为你量身打造的解决方案。它能够将一系列复杂的命令打包成一个可执行的脚本,让你只需一键执行,便能瞬间完成过去耗时耗力的操作。这不仅能极大地节省你的宝贵时间,更能显著减少人为失误,确保工作的稳定性和准确性。 掌控你的操作系统:从入门到精通 本书旨在为你铺就一条清晰、系统、且充满实践乐趣的学习之路,带你从零开始,一步步精通Shell脚本的各项技能。我们不会止步于简单的命令罗列,而是深入探究其核心原理、高级技巧以及在实际工作场景中的应用。 第一部分:基础的坚实奠基 在开始编写任何脚本之前,理解Shell的基本概念至关重要。我们将从最基础的内容开始: Shell究竟是什么? 我们将解释Shell作为一种命令行解释器的角色,以及它在操作系统中的地位。你将了解到不同Shell(如Bash、Zsh等)的特点,以及为什么Bash是目前最广泛使用的Shell之一。 命令行基础回顾与进阶: 即使你已经熟悉一些基本的命令行操作,本书也会为你梳理和补充那些对编写脚本至关重要的概念,例如: 文件系统导航与管理: `ls`, `cd`, `pwd`, `mkdir`, `rmdir`, `cp`, `mv`, `rm` 等命令的深入理解,以及它们在脚本中的使用场景。 文本处理的利器: `cat`, `more`, `less`, `head`, `tail`, `grep`, `sed`, `awk` 等命令不仅是查看文本的工具,更是强大的数据提取、转换和过滤的利器,在脚本中它们将发挥无穷的威力。 重定向与管道: 理解标准输入、标准输出和标准错误,以及如何使用 `>`, `<`, `>>`, `|` 等符号将命令的输出作为另一个命令的输入,这是构建复杂Shell流水线的基础。 通配符与扩展: ``, `?`, `[]` 等通配符在文件匹配中的应用,以及Shell的命令替换、变量扩展等机制。 你的第一个Shell脚本: 我们将引导你编写第一个简单的Shell脚本,从Shebang(`!`)的含义,到如何赋予脚本执行权限,再到如何运行它。这个过程将让你初步体验到脚本的便捷。 变量的世界: 变量是脚本的灵魂。你将学习如何声明、赋值、使用变量,理解环境变量与用户自定义变量的区别,以及全局变量和局部变量的概念。 用户输入与交互: 编写能够与用户进行交互的脚本,例如使用`read`命令获取用户输入,并根据输入做出相应的处理。 第二部分:脚本逻辑的构建与控制 掌握了基础命令和变量后,我们就需要为脚本赋予“思考”和“判断”的能力。这一部分将是构建复杂、智能脚本的关键: 条件判断: `if`语句: 学习如何使用`if`, `elif`, `else`来根据条件执行不同的代码块。我们将深入讲解条件表达式的各种形式,包括字符串比较、数值比较、文件状态检查等,让你能够编写出真正有判断能力的脚本。 `test`命令与方括号 `[` `]`: 理解`test`命令以及它在`if`语句中的常用形式。 `case`语句: 学习`case`语句,它在处理多个可能的匹配项时比`if-elif-else`结构更为简洁高效,特别适合用于解析命令参数或根据特定模式执行操作。 循环的力量: `for`循环: 掌握`for`循环在遍历文件列表、字符串、序列等场景下的应用。你将学会如何使用`seq`命令生成数字序列,如何遍历文件名,以及如何使用各种通配符结合`for`循环。 `while`循环: 理解`while`循环的机制,它会在指定条件为真时持续执行循环体,常用于处理未知数量的输入或持续监控某个状态。 `until`循环: 学习`until`循环,它与`while`循环相反,会在条件为假时持续执行。 循环控制: `break`用于跳出整个循环,`continue`用于跳过当前循环迭代,进入下一次迭代。这些控制语句能让你更精细地管理循环的执行流程。 函数:代码的复用与组织: 定义与调用函数: 学习如何创建可重用的代码块,将相似的功能封装到函数中,提高代码的可读性和可维护性。 函数参数与返回值: 理解函数如何接收参数,以及如何通过`return`语句或输出返回值。 全局与局部变量在函数中的作用域。 第三部分:高级技巧与实战应用 在掌握了脚本的基本结构和控制流之后,我们将进一步拓展你的技能,使其能够应对更复杂的挑战,并真正融入实际工作流程: 文本处理的深度挖掘: `sed`的流编辑器: 深入理解`sed`的强大文本替换、删除、插入、查找等功能,它在日志分析、配置文件修改等方面是不可或缺的工具。 `awk`的文本数据处理: 掌握`awk`的强大文本分析能力,学习如何按字段分割文本、进行条件过滤、计算、格式化输出等,它是处理结构化文本数据的利器。 正则表达式(Regex): 学习并熟练使用正则表达式,它是`grep`, `sed`, `awk`等工具进行高效模式匹配和文本处理的基石,能让你精确地找到所需信息。 文件与目录的管理自动化: 批量重命名、移动、复制文件: 利用循环和各种命令实现高效的文件管理。 文件权限管理: 编写脚本自动设置文件和目录的读、写、执行权限。 查找与删除: 利用`find`命令结合脚本实现复杂的文件查找和删除任务,例如查找一段时间内未访问过的文件并删除。 进程管理与监控: 查看进程状态: 使用`ps`, `top`等命令监控系统进程。 启动、停止、重启进程: 编写脚本自动化进程的管理。 简单的系统监控: 编写脚本监控CPU、内存、磁盘使用率,并在达到阈值时发出警报。 用户与权限管理自动化: 批量添加/删除用户。 批量修改用户密码。 管理用户组。 网络相关的脚本: `ping`命令的自动化检测。 使用`wget`或`curl`下载文件。 简单的SSH自动化连接。 错误处理与调试: 理解退出状态码: 掌握如何检查命令执行的成功与否。 使用`set -e`, `set -u`, `set -x`等选项来增强脚本的健壮性和可调试性。 编写日志记录功能,方便追溯问题。 Shell脚本的最佳实践: 代码风格与注释: 编写易于阅读和理解的脚本。 命名规范: 保持变量、函数、脚本命名的清晰一致。 安全性考虑: 编写安全的脚本,避免潜在的安全风险。 为你的工作流程注入自动化引擎 本书中的每一个概念、每一个示例,都紧密围绕着“解决实际问题”和“提升工作效率”展开。我们将通过大量的、贴近真实场景的示例,让你不仅仅是学习语法,更是学会如何“思考”和“设计”脚本。 无论你是一名系统管理员,需要自动化日常的维护任务;还是一名开发人员,希望编写脚本来简化构建、部署和测试流程;抑或是一位数据分析师,希望利用脚本处理和分析海量数据;亦或是任何一位渴望让计算机更高效地为你工作的技术爱好者,本书都将是你不可或缺的伙伴。 通过学习Shell脚本,你将获得一种强大的能力:将复杂、重复的工作分解、自动化,从而将你的时间和精力解放出来,投入到更具创造性和战略性的任务中。这本书将是你通往系统自动化、高效命令行世界的坚实起点和可靠向导。现在,就让我们一起踏上这段令人兴奋的Shell脚本学习之旅吧!