bash shell脚本编程经典实例 (第2版)

Book description

对于系统管理员、程序员和最终用户而言,shell命令或精心设计的shell脚本不仅能节省时间和精力,还可以提升各种常见任务的一致性和可重复性。作为一款流行的Unix shell,bash让你能够利用和自定义Unix或Linux系统的任意功能。

本书将全面讲述bash,内容适用于所有Unix和Linux用户,无论新人还是老手(包括熟练的Windows用户和管理员)。书中提供了300多个bash实例,每个实例均包含一个或多个示例脚本,能够帮你解决各种各样的问题。你将学到如何处理输入/输出、文件操作、程序执行、管理任务以及许多其他挑战。

本书实例包括:

  • 标准输出和输入以及执行命令
  • shell变量、shell逻辑和算术
  • 中级shell工具和高级脚本编写
  • 使用find、locate和slocate查找文件
  • 处理日期和时间
  • 为各种最终用户任务创建shell脚本
  • 处理涉及解析操作的任务
  • 编写安全的shell脚本
  • 配置和自定义bash

Table of contents

  1. 封面
  2. 扉页
  3. 版权
  4. 版权声明
  5. O’Reilly Media, Inc.介绍
  6. 目录 (1/2)
  7. 目录 (2/2)
  8. 前言
    1. 目标读者
    2. 关于本书
    3. 排版约定
    4. 使用示例代码
    5. O’Reilly在线学习平台(O’Reilly Online Learning)
    6. 联系我们
    7. 致谢
    8. 电子书
  9. 第1章 bash入门
    1. 1.1 为什么是bash
    2. 1.2 bash shell
    3. 1.3 提示符揭秘
    4. 1.4 显示当前位置
    5. 1.5 查找并运行命令
    6. 1.6 获取文件的相关信息
    7. 1.7 显示当前目录下的所有隐藏(点号)文件
    8. 1.8 使用shell引用
    9. 1.9 使用或替换内建命令与外部命令
    10. 1.10 确定是否处于交互模式
    11. 1.11 将bash安装为默认shell
    12. 1.12 持续更新bash
    13. 1.13 获取Linux版的bash
    14. 1.14 获取xBSD版的bash
    15. 1.15 获取macOS版的bash
    16. 1.16 获取Unix版的bash
    17. 1.17 获取Windows版的bash
    18. 1.18 不获取bash的情况下使用bash
    19. 1.19 更多的bash文档
  10. 第2章 标准输出
    1. 2.1 输出到终端/终端窗口
    2. 2.2 保留输出中的空白字符
    3. 2.3 在输出中加入更多格式控制
    4. 2.4 消除输出中的换行符
    5. 2.5 保存命令输出
    6. 2.6 将输出保存到其他文件
    7. 2.7 保存ls命令的输出
    8. 2.8 将输出和错误消息发送到不同文件
    9. 2.9 将输出和错误消息发送到同一文件
    10. 2.10 追加输出
    11. 2.11 仅使用文件的起始或结尾部分
    12. 2.12 跳过文件标题
    13. 2.13 丢弃输出
    14. 2.14 保存或分组多个命令的输出
    15. 2.15 将输出作为输入,连接两个程序
    16. 2.16 将输出作为输入,同时保留其副本
    17. 2.17 以输出为参数连接两个程序
    18. 2.18 在一行中多次重定向
    19. 2.19 重定向不起作用时保存输出
    20. 2.20 交换STDERR和STDOUT
    21. 2.21 避免意外覆盖文件
    22. 2.22 有意覆盖文件
  11. 第3章 标准输入
    1. 3.1 从文件获取输入
    2. 3.2 将数据与脚本存放在一起
    3. 3.3 避免here-document中的怪异行为
    4. 3.4 缩进here-document
    5. 3.5 获取用户输入
    6. 3.6 获取yes或no
    7. 3.7 选择选项列表
    8. 3.8 提示输入密码
  12. 第4章 执行命令
    1. 4.1 运行程序
    2. 4.2 依次执行多个命令
    3. 4.3 同时执行多个命令
    4. 4.4 了解命令是否成功运行
    5. 4.5 仅当一个命令运行成功后才执行下一个命令
    6. 4.6 减少if语句的数量
    7. 4.7 无人值守下运行耗时作业
    8. 4.8 出现故障时显示错误消息
    9. 4.9 执行变量中的命令
    10. 4.10 执行目录中的所有脚本
  13. 第5章 脚本编程基础:shell变量
    1. 5.1 记录脚本
    2. 5.2 在shell脚本中嵌入文档
    3. 5.3 提高脚本可读性
    4. 5.4 将变量名与周围的文本分开
    5. 5.5 导出变量
    6. 5.6 查看所有的变量值
    7. 5.7 在shell脚本中使用参数
    8. 5.8 遍历传入脚本的参数
    9. 5.9 处理包含空格的参数
    10. 5.10 处理包含空格的参数列表
    11. 5.11 统计参数数量
    12. 5.12 丢弃参数
    13. 5.13 获取默认值
    14. 5.14 设置默认值
    15. 5.15 使用空值作为有效的默认值
    16. 5.16 不止使用字符串常量作为默认值
    17. 5.17 对不存在的参数输出错误消息
    18. 5.18 修改部分字符串
    19. 5.19 获得某个数的绝对值
    20. 5.20 用bash实现basename
    21. 5.21 用bash实现dirname
    22. 5.22 选取CSV的替换值
    23. 5.23 使用数组变量
    24. 5.24 转换大小写
    25. 5.25 转换为驼峰命名法
  14. 第6章 shell逻辑与算术
    1. 6.1 在shell脚本中执行算术操作
    2. 6.2 条件分支
    3. 6.3 测试文件特性
    4. 6.4 测试多个特性
    5. 6.5 测试字符串特性
    6. 6.6 测试等量关系
    7. 6.7 用模式匹配进行测试
    8. 6.8 用正则表达式测试
    9. 6.9 用重定向改变脚本行为
    10. 6.10 循环一段时间
    11. 6.11 在循环中使用read
    12. 6.12 循环若干次
    13. 6.13 在循环中使用浮点值
    14. 6.14 多路分支
    15. 6.15 解析命令行参数
    16. 6.16 创建简单的菜单
    17. 6.17 修改简单菜单的提示符
    18. 6.18 创建简单的RPN计算器
    19. 6.19 创建命令行计算器
  15. 第7章 中级shell工具
    1. 7.1 在文件中查找字符串
    2. 7.2 只显示包含搜索结果的文件名
    3. 7.3 了解搜索是否成功
    4. 7.4 不区分大小写搜索
    5. 7.5 在管道中进行搜索
    6. 7.6 缩减搜索结果
    7. 7.7 搜索更复杂的模式
    8. 7.8 搜索SSN
    9. 7.9 搜索压缩文件
    10. 7.10 保留部分输出
    11. 7.11 仅保留部分输入行
    12. 7.12 颠倒每行的单词
    13. 7.13 汇总数字列表
    14. 7.14 用awk统计字符串出现次数
    15. 7.15 用bash统计字符串出现次数
    16. 7.16 用便捷的直方图展示数据
    17. 7.17 用bash轻松实现直方图
    18. 7.18 显示匹配短语之后的文本段落
  16. 第8章 中级shell工具(续)
    1. 8.1 输出排序
    2. 8.2 数字排序
    3. 8.3 IP地址排序
    4. 8.4 提取部分输出
    5. 8.5 删除重复行
    6. 8.6 压缩文件
    7. 8.7 解压文件
    8. 8.8 检查tar归档文件中不重复的目录
    9. 8.9 转换字符
    10. 8.10 将大写字母转换为小写字母
    11. 8.11 将DOS文件转换为Linux格式
    12. 8.12 删除智能引号
    13. 8.13 统计文件的行数、单词数或字符数
    14. 8.14 重新编排段落
    15. 8.15 你不知道的less
  17. 第9章 查找文件:find、locate、slocate
    1. 9.1 查找所有的MP3文件
    2. 9.2 处理文件名中的怪异字符
    3. 9.3 提升已找到文件的处理速度
    4. 9.4 跟随符号链接查找文件
    5. 9.5 查找文件时不区分大小写
    6. 9.6 按日期查找文件
    7. 9.7 按类型查找文件
    8. 9.8 按大小查找文件
    9. 9.9 按内容查找文件
    10. 9.10 快速查找现有文件及其内容
    11. 9.11 在可能的位置上查找文件
  18. 第10章 脚本编程的附加特性
    1. 10.1 脚本“守护进程化”
    2. 10.2 代码重用
    3. 10.3 在脚本中使用配置文件
    4. 10.4 定义函数
    5. 10.5 使用函数:参数和返回值
    6. 10.6 中断陷阱
    7. 10.7 用别名重新定义命令
    8. 10.8 避开别名和函数
    9. 10.9 计算已过去的时间
    10. 10.10 编写包装器
  19. 第11章 处理日期和时间
    1. 11.1 格式化日期显示
    2. 11.2 提供默认日期
    3. 11.3 自动生成日期范围
    4. 11.4 将日期和时间转换为纪元秒
    5. 11.5 将纪元秒转换为日期和时间
    6. 11.6 用Perl获得昨天或明天的日期
    7. 11.7 日期与时间运算
    8. 11.8 处理时区、夏令时和闰年
    9. 11.9 用date和cron在第N天运行脚本
    10. 11.10 输出带有日期的日志
  20. 第12章 帮助最终用户完成任务的shell脚本
    1. 12.1 输出连字符
    2. 12.2 浏览相册
    3. 12.3 填装MP3播放器
    4. 12.4 刻录CD
    5. 12.5 比较文档
  21. 第13章 与解析相关的任务
    1. 13.1 解析shell脚本参数
    2. 13.2 解析参数时使用自定义错误消息
    3. 13.3 解析HTML
    4. 13.4 将输出解析到数组
    5. 13.5 用函数调用解析输出
    6. 13.6 用read语句解析文本
    7. 13.7 用read将输入解析至数组
    8. 13.8 读取整个文件
    9. 13.9 正确书写复数形式
    10. 13.10 一次提取一个字符
    11. 13.11 清理svn源代码树
    12. 13.12 用MySQL设置数据库
    13. 13.13 提取数据中的特定字段
    14. 13.14 更新数据文件中的特定字段
    15. 13.15 修剪空白字符
    16. 13.16 压缩空白字符
    17. 13.17 处理固定长度记录
    18. 13.18 处理没有换行的文件
    19. 13.19 将数据文件转换为CSV
    20. 13.20 解析CSV数据文件
  22. 第14章 编写安全的shell脚本
    1. 14.1 避开常见的安全问题
    2. 14.2 避免解释器欺骗
    3. 14.3 设置安全的$PATH
    4. 14.4 清除所有的别名
    5. 14.5 清除命令散列
    6. 14.6 防止核心转储
    7. 14.7 设置安全的$IFS
    8. 14.8 设置安全的umask
    9. 14.9 在$PATH中查找人皆可写的目录
    10. 14.10 将当前目录加入$PATH
    11. 14.11 使用安全的临时文件
    12. 14.12 验证输入
    13. 14.13 设置权限
    14. 14.14 密码被泄露到进程列表
    15. 14.15 编写setuid或setgid脚本
    16. 14.16 限制访客
    17. 14.17 使用chroot囚牢
    18. 14.18 以非root用户身份运行
    19. 14.19 更安全地使用sudo
    20. 14.20 在脚本中使用密码
    21. 14.21 使用无密码的SSH (1/2)
    22. 14.21 使用无密码的SSH (2/2)
    23. 14.22 限制SSH命令
    24. 14.23 断开非活跃会话
  23. 第15章 高级脚本编程
    1. 15.1 以可移植的方式查找bash
    2. 15.2 设置兼容POSIX工具的$PATH
    3. 15.3 开发可移植的shell脚本
    4. 15.4 用虚拟机测试脚本
    5. 15.5 使用可移植的循环
    6. 15.6 使用可移植的echo
    7. 15.7 仅在必要时分割输出
    8. 15.8 以十六进制形式查看输出
    9. 15.9 使用bash的网络重定向
    10. 15.10 查找自己的IP地址
    11. 15.11 从另一台机器获取输入
    12. 15.12 在脚本运行期间重定向输出
    13. 15.13 解决“Argument list too long”错误
    14. 15.14 向syslog记录脚本日志
    15. 15.15 正确地使用logger
    16. 15.16 在脚本中发送电子邮件
    17. 15.17 用阶段自动化进程
    18. 15.18 一心二用
    19. 15.19 在多个主机上执行SSH命令
  24. 第16章 bash的配置与自定义
    1. 16.1 bash启动选项
    2. 16.2 自定义提示符 (1/2)
    3. 16.2 自定义提示符 (2/2)
    4. 16.3 在程序运行前出现的提示符
    5. 16.4 永久修改$PATH
    6. 16.5 临时修改$PATH
    7. 16.6 设置$CDPATH
    8. 16.7 当找不到命令时
    9. 16.8 缩短或修改命令名称
    10. 16.9 调整shell行为及环境
    11. 16.10 用.inputrc调整readline的行为
    12. 16.11 通过添加~/bin来存放个人工具
    13. 16.12 使用辅助提示符:$PS2、$PS3、$PS4
    14. 16.13 在会话间同步shell历史记录
    15. 16.14 设置shell的历史选项
    16. 16.15 创建更好的cd命令
    17. 16.16 一次性创建并切换到新目录
    18. 16.17 直达底部
    19. 16.18 用可装载的内建命令为bash添加新特性
    20. 16.19 改善可编程补全
    21. 16.20 正确使用初始化文件
    22. 16.21 创建自包含的可移植rc文件
    23. 16.22 自定义配置入门 (1/3)
    24. 16.22 自定义配置入门 (2/3)
    25. 16.22 自定义配置入门 (3/3)
  25. 第17章 内务及管理任务
    1. 17.1 批量重命名文件
    2. 17.2 在Linux中使用GUN Texinfo和info
    3. 17.3 批量解压ZIP文件
    4. 17.4 用screen恢复断开的会话
    5. 17.5 共享单个bash会话
    6. 17.6 记录整个会话或批量作业
    7. 17.7 注销时清除屏幕
    8. 17.8 获取用于数据恢复的文件元数据
    9. 17.9 为多个文件创建索引
    10. 17.10 使用diff和patch
    11. 17.11 统计文件间存在多少差异
    12. 17.12 删除或重命名名称中包含特殊字符的文件
    13. 17.13 将数据追加到文件开头
    14. 17.14 就地编辑文件
    15. 17.15 将sudo应用于一组命令
    16. 17.16 查找仅出现在一个文件中的行
    17. 17.17 保留最近的N个对象
    18. 17.18 写入循环日志
    19. 17.19 循环备份
    20. 17.20 搜索不包含grep进程自身在内的ps输出
    21. 17.21 确定某个进程是否正在运行
    22. 17.22 为输出添加前缀或后缀
    23. 17.23 对行进行编号
    24. 17.24 生成序列
    25. 17.25 模拟DOS的pause命令
    26. 17.26 为数值添加逗号
  26. 第18章 写得少,干得快
    1. 18.1 在任意目录之间快速移动
    2. 18.2 重复上一个命令
    3. 18.3 执行类似命令
    4. 18.4 快速替换
    5. 18.5 参数重用
    6. 18.6 名称补全
    7. 18.7 安全第一
    8. 18.8 修改多个命令
  27. 第19章 窍门与陷阱:新手常见错误
    1. 19.1 忘记设置可执行权限
    2. 19.2 修复“No such file or directory”错误
    3. 19.3 忘记当前目录不在$PATH中
    4. 19.4 将脚本命名为test
    5. 19.5 试图修改已导出的变量
    6. 19.6 赋值时忘记加引号
    7. 19.7 忘记模式匹配的结果是按字母顺序排列的
    8. 19.8 忘记管道会产生子shell
    9. 19.9 使终端恢复正常
    10. 19.10 用空变量删除文件
    11. 19.11 printf的怪异行为
    12. 19.12 测试bash脚本语法
    13. 19.13 调试脚本
    14. 19.14 使用函数时避免出现“command not found”错误
    15. 19.15 混淆了shell通配符和正则表达式
  28. 附录A 参考
    1. A.1 bash调用
    2. A.2 自定义提示符字符串
    3. A.3 ANSI颜色转义序列
    4. A.4 内建命令
    5. A.5 bash保留字
    6. A.6 shell内建变量
    7. A.7 set选项
    8. A.8 shopt选项
    9. A.9 测试运算符
    10. A.10 I/O重定向
    11. A.11 echo选项与转义序列
    12. A.12 printf
    13. A.13 用strftime格式化日期和时间
    14. A.14 模式匹配字符
    15. A.15 extglob扩展模式匹配运算符
    16. A.16 tr转义序列
    17. A.17 readline的init文件语法
    18. A.18 Emacs模式命令
    19. A.19 vi控制模式命令
    20. A.20 ASCII编码表
  29. 附录B bash自带的示例
    1. bash文档和示例
  30. 附录C 命令行处理
    1. C.1 命令行处理步骤
    2. C.2 引用
    3. C.3 eval
  31. 附录D 修订控制
    1. D.1 参考
    2. D.2 Git
    3. D.3 Bazaar
    4. D.4 Mercurial
    5. D.5 Subversion (1/2)
    6. D.5 Subversion (2/2)
    7. D.6 Meld
    8. D.7 etckeeper
    9. D.8 其他
  32. 附录E 从源代码构建bash
    1. E.1 获得bash
    2. E.2 解开归档文件
    3. E.3 归档文件中都有什么
    4. E.4 如何获得帮助
  33. 关于作者
  34. 关于封面

Product information

  • Title: bash shell脚本编程经典实例 (第2版)
  • Author(s): Carl Albing, JP Vossen
  • Release date: January 2021
  • Publisher(s): Posts & Telecom Press
  • ISBN: 9787115553782

You might also like

book

bash 网络安全运维

by Paul Troncone, Carl Albing

如果你希望抵御攻击者的威胁,就应注重网络安全运维的速度和效率。 在危急时刻,掌握标准命令行界面(CLI)是一项非常宝贵的技能,因为没有其他软件应用程序可以与CLI的可用性、灵活性、敏捷性相媲美。本书将向你展示如何使用带有bash shell 的CLI执行数据收集和分析、入侵检测、逆向工程和管理等任务。 作者深入介绍了命令行工具和技术,以帮助安全从业者收集数据、分析日志和监控网络。渗透测试人员将学习如何利用Linux的功能来支持攻击性操作。 在书中包含的四部分内容中,安全从业者、管理者、学生将会看到: 基础:防御和攻击原则、命令行、bash基础及常规表达。 安全防御操作:数据收集和分析、实时日志监控、恶意软件分析。 渗透测试:脚本混淆和命令行模糊及远程访问工具。 安全管理:用户、组、权限,以及设备和软件清单。

book

Python深度学习入门: 从零构建CNN和RNN

by Seth Weidman

深度学习技术的发展如火如荼,这些知识正迅速成为机器学习从业者甚至许多软件开发工程师的“加分项”。深度学习是一个立体的领域,仅从数学层面或代码层面学习,难免以偏概全,无法融会贯通。 本书作者认为,理解深度学习和神经网络需要多种思维模型。因此,本书从数学、示意图、Python代码三个维度帮助你立体地理解每一个概念,带你领略深度学习领域的全貌,从内到外地理解构建神经网络的每一步。你将学到以下内容。 为理解深度学习的概念和原理构建多种思维模型。 掌握嵌套函数、链式法则等数学概念。 掌握学习率衰减、权重初始化、dropout等优化技巧。 从零构建CNN和RNN等常见的神经网络架构。 使用PyTorch实现神经网络。

book

Istio 学习指南

by Lee Calcote, Zack Butcher

你已经成功地将应用程序转换为微服务架构,但现在要跨不同环境(公有云到公有云、私有云到公有云、虚拟机到容器)运行服务,你的云原生软件开始遇到可靠性问题。 如何处理日益增加的复杂性?通过Istio服务网格,你将能够管理流量、控制访问、实施监控、获取遥测数据、管理配额、实现链路跟踪,并在微服务上拥有更大的弹性。 在本书中,两位作者解释了为什么服务需要服务网格,并逐步演示了Istio如何适应分布式应用程序的生命周期。你将了解用于启用和管理Istio中多种功能的工具和API。 探索Istio解决的可观察性挑战。 使用请求路由、流量转移、故障注入以及运行可靠服务网格必不可少的其他功能。 生成并收集遥测信息。 尝试不同的部署模式,包括A/B、蓝/绿和金丝雀。 获取有关如何在Istio支持下开发和部署实际应用程序的示例。

book

Python机器学习基础教程

by Andreas C. Müller, Sarah Guido

机器学习已成为许多商业应用和研究项目不可或缺的一部分,海量数据使得机器学习的应用范围远超人们想象。本书将向所有对机器学习技术感兴趣的初学者展示,自己动手构建机器学习解决方案并非难事! 书中重点讨论机器学习算法的实践而不是背后的数学,全面涵盖在实践中实现机器学习算法的所有重要内容,帮助读者使用Python和scikit-learn库一步一步构建一个有效的机器学习应用。 机器学习的基本概念及其应用 常用机器学习算法的优缺点 机器学习所处理的数据的表示方法,包括重点关注数据的哪些方面 模型评估和调参的高级方法 管道的概念 处理文本数据的方法,包括文本特有的处理方法 进一步提高机器学习和数据科学技能的建议