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

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

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

Linux下常用bash手册:输入输出、变量、逻辑、脚本,查找文件、时间处理、安全编写、定制。

内容简介

bash是Linux下常用的shell.用户可以通过bash,以命令的形式操控Linux系统。作为一本bash用法速查手册,本书主要内容包括:标准输入和输出以及执行命令;shell变量、shell逻辑和算术;中级shell工具和高级脚本;使用find、locate和slocate查找文件;处理日期和时间;编写安全的shell脚本;配置和自定义bash.第2版更新至Git,每个方案均包含一个或多个脚本示例,并讨论了这些解决方案为何起作用。

章节目录

版权信息

O'Reilly Media, Inc. 介绍

业界评论

前言

目标读者

关于本书

GNU软件

关于代码示例

无谓的cat

关于Perl

更多资源

排版约定

使用示例代码

O'Reilly在线学习平台(O'Reilly Online Learning)

联系我们

致谢

审稿人

O'Reilly

作者的话

更多信息

第1章 bash入门

1.1 为什么是bash

1.2 bash shell

1.3 提示符揭秘

1.3.1 问题

1.3.2 解决方案

1.3.3 讨论

1.3.4 参考

1.4 显示当前位置

1.4.1 问题

1.4.2 解决方案

1.4.3 讨论

1.4.4 参考

1.5 查找并运行命令

1.5.1 问题

1.5.2 解决方案

1.5.3 讨论

1.5.4 参考

1.6 获取文件的相关信息

1.6.1 问题

1.6.2 解决方案

1.6.3 讨论

1.6.4 参考

1.7 显示当前目录下的所有隐藏(点号)文件

1.7.1 问题

1.7.2 解决方案

1.7.3 讨论

1.7.4 参考

1.8 使用shell引用

1.8.1 问题

1.8.2 解决方案

1.8.3 讨论

1.8.4 参考

1.9 使用或替换内建命令与外部命令

1.9.1 问题

1.9.2 解决方案

1.9.3 讨论

1.9.4 参考

1.10 确定是否处于交互模式

1.10.1 问题

1.10.2 解决方案

1.10.3 讨论

1.10.4 参考

1.11 将bash安装为默认shell

1.11.1 问题

1.11.2 解决方案

1.11.3 讨论

1.11.4 参考

1.12 持续更新bash

1.12.1 问题

1.12.2 解决方案

1.12.3 讨论

1.12.4 参考

1.13 获取Linux版的bash

1.13.1 问题

1.13.2 解决方案

1.13.3 讨论

1.13.4 参考

1.14 获取xBSD版的bash

1.14.1 问题

1.14.2 解决方案

1.14.3 讨论

1.14.4 参考

1.15 获取macOS版的bash

1.15.1 问题

1.15.2 解决方案

1.15.3 讨论

1.15.4 参考

1.16 获取Unix版的bash

1.16.1 问题

1.16.2 解决方案

1.16.3 讨论

1.16.4 参考

1.17 获取Windows版的bash

1.17.1 问题

1.17.2 解决方案

1.17.3 讨论

1.17.4 参考

1.18 不获取bash的情况下使用bash

1.18.1 问题

1.18.2 解决方案

1.18.3 讨论

1.18.4 参考

1.19 更多的bash文档

1.19.1 问题

1.19.2 解决方案

1.19.3 参考

第2章 标准输出

2.1 输出到终端/终端窗口

2.1.1 问题

2.1.2 解决方案

2.1.3 讨论

2.1.4 参考

2.2 保留输出中的空白字符

2.2.1 问题

2.2.2 解决方案

2.2.3 讨论

2.2.4 参考

2.3 在输出中加入更多格式控制

2.3.1 问题

2.3.2 解决方案

2.3.3 讨论

2.3.4 参考

2.4 消除输出中的换行符

2.4.1 问题

2.4.2 解决方案

2.4.3 讨论

2.4.4 参考

2.5 保存命令输出

2.5.1 问题

2.5.2 解决方案

2.5.3 讨论

2.5.4 参考

2.6 将输出保存到其他文件

2.6.1 问题

2.6.2 解决方案

2.6.3 讨论

2.6.4 参考

2.7 保存ls命令的输出

2.7.1 问题

2.7.2 解决方案

2.7.3 讨论

2.7.4 参考

2.8 将输出和错误消息发送到不同文件

2.8.1 问题

2.8.2 解决方案

2.8.3 讨论

2.8.4 参考

2.9 将输出和错误消息发送到同一文件

2.9.1 问题

2.9.2 解决方案

2.9.3 讨论

2.9.4 参考

2.10 追加输出

2.10.1 问题

2.10.2 解决方案

2.10.3 讨论

2.10.4 参考

2.11 仅使用文件的起始或结尾部分

2.11.1 问题

2.11.2 解决方案

2.11.3 讨论

2.11.4 参考

2.12 跳过文件标题

2.12.1 问题

2.12.2 解决方案

2.12.3 讨论

2.12.4 参考

2.13 丢弃输出

2.13.1 问题

2.13.2 解决方案

2.13.3 讨论

2.13.4 参考

2.14 保存或分组多个命令的输出

2.14.1 问题

2.14.2 解决方案

2.14.3 讨论

2.14.4 参考

2.15 将输出作为输入,连接两个程序

2.15.1 问题

2.15.2 解决方案

2.15.3 讨论

2.15.4 参考

2.16 将输出作为输入,同时保留其副本

2.16.1 问题

2.16.2 解决方案

2.16.3 讨论

2.16.4 参考

2.17 以输出为参数连接两个程序

2.17.1 问题

2.17.2 解决方案

2.17.3 讨论

2.17.4 参考

2.18 在一行中多次重定向

2.18.1 问题

2.18.2 解决方案

2.18.3 讨论

2.18.4 参考

2.19 重定向不起作用时保存输出

2.19.1 问题

2.19.2 解决方案

2.19.3 讨论

2.19.4 参考

2.20 交换STDERR和STDOUT

2.20.1 问题

2.20.2 解决方案

2.20.3 讨论

2.20.4 参考

2.21 避免意外覆盖文件

2.21.1 问题

2.21.2 解决方案

2.21.3 讨论

2.21.4 参考

2.22 有意覆盖文件

2.22.1 问题

2.22.2 解决方案

2.22.3 讨论

2.22.4 参考

第3章 标准输入

3.1 从文件获取输入

3.1.1 问题

3.1.2 解决方案

3.1.3 讨论

3.1.4 参考

3.2 将数据与脚本存放在一起

3.2.1 问题

3.2.2 解决方案

3.2.3 讨论

3.2.4 参考

3.3 避免here-document中的怪异行为

3.3.1 问题

3.3.2 解决方案

3.3.3 讨论

3.3.4 参考

3.4 缩进here-document

3.4.1 问题

3.4.2 解决方案

3.4.3 讨论

3.4.4 参考

3.5 获取用户输入

3.5.1 问题

3.5.2 解决方案

3.5.3 讨论

3.5.4 参考

3.6 获取yes或no

3.6.1 问题

3.6.2 解决方案

3.6.3 讨论

3.6.4 参考

3.7 选择选项列表

3.7.1 问题

3.7.2 解决方案

3.7.3 讨论

3.7.4 参考

3.8 提示输入密码

3.8.1 问题

3.8.2 解决方案

3.8.3 讨论

3.8.4 参考

第4章 执行命令

4.1 运行程序

4.1.1 问题

4.1.2 解决方案

4.1.3 讨论

4.1.4 参考

4.2 依次执行多个命令

4.2.1 问题

4.2.2 解决方案

4.2.3 讨论

4.2.4 参考

4.3 同时执行多个命令

4.3.1 问题

4.3.2 解决方案

4.3.3 讨论

4.4 了解命令是否成功运行

4.4.1 问题

4.4.2 解决方案

4.4.3 讨论

4.4.4 参考

4.5 仅当一个命令运行成功后才执行下一个命令

4.5.1 问题

4.5.2 解决方案

4.5.3 讨论

4.5.4 参考

4.6 减少if语句的数量

4.6.1 问题

4.6.2 解决方案

4.6.3 讨论

4.6.4 参考

4.7 无人值守下运行耗时作业

4.7.1 问题

4.7.2 解决方案

4.7.3 讨论

4.7.4 参考

4.8 出现故障时显示错误消息

4.8.1 问题

4.8.2 解决方案

4.8.3 讨论

4.8.4 参考

4.9 执行变量中的命令

4.9.1 问题

4.9.2 解决方案

4.9.3 讨论

4.9.4 参考

4.10 执行目录中的所有脚本

4.10.1 问题

4.10.2 解决方案

4.10.3 讨论

4.10.4 参考

第5章 脚本编程基础:shell变量

5.1 记录脚本

5.1.1 问题

5.1.2 解决方案

5.1.3 讨论

5.1.4 参考

5.2 在shell脚本中嵌入文档

5.2.1 问题

5.2.2 解决方案

5.2.3 讨论

5.2.4 参考

5.3 提高脚本可读性

5.3.1 问题

5.3.2 解决方案

5.3.3 讨论

5.3.4 参考

5.4 将变量名与周围的文本分开

5.4.1 问题

5.4.2 解决方案

5.4.3 讨论

5.4.4 参考

5.5 导出变量

5.5.1 问题

5.5.2 解决方案

5.5.3 讨论

5.5.4 参考

5.6 查看所有的变量值

5.6.1 问题

5.6.2 解决方案

5.6.3 讨论

5.6.4 参考

5.7 在shell脚本中使用参数

5.7.1 问题

5.7.2 解决方案

5.7.3 讨论

5.7.4 参考

5.8 遍历传入脚本的参数

5.8.1 问题

5.8.2 解决方案

5.8.3 讨论

5.8.4 参考

5.9 处理包含空格的参数

5.9.1 问题

5.9.2 解决方案

5.9.3 讨论

5.9.4 参考

5.10 处理包含空格的参数列表

5.10.1 问题

5.10.2 解决方案

5.10.3 讨论

5.10.4 参考

5.11 统计参数数量

5.11.1 问题

5.11.2 解决方案

5.11.3 讨论

5.11.4 参考

5.12 丢弃参数

5.12.1 问题

5.12.2 解决方案

5.12.3 讨论

5.12.4 参考

5.13 获取默认值

5.13.1 问题

5.13.2 解决方案

5.13.3 讨论

5.13.4 参考

5.14 设置默认值

5.14.1 问题

5.14.2 解决方案

5.14.3 讨论

5.14.4 参考

5.15 使用空值作为有效的默认值

5.15.1 问题

5.15.2 解决方案

5.15.3 讨论

5.15.4 参考

5.16 不只使用字符串常量作为默认值

5.16.1 问题

5.16.2 解决方案

5.16.3 讨论

5.16.4 参考

5.17 对不存在的参数输出错误消息

5.17.1 问题

5.17.2 解决方案

5.17.3 讨论

5.17.4 参考

5.18 修改部分字符串

5.18.1 问题

5.18.2 解决方案

5.18.3 讨论

5.18.4 参考

5.19 获得某个数的绝对值

5.19.1 问题

5.19.2 解决方案

5.19.3 讨论

5.19.4 参考

5.20 用bash实现basename

5.20.1 问题

5.20.2 解决方案

5.20.3 讨论

5.20.4 参考

5.21 用bash实现dirname

5.21.1 问题

5.21.2 解决方案

5.21.3 讨论

5.21.4 参考

5.22 选取CSV的替换值

5.22.1 问题

5.22.2 解决方案

5.22.3 参考

5.23 使用数组变量

5.23.1 问题

5.23.2 解决方案

5.23.3 讨论

5.23.4 参考

5.24 转换大小写

5.24.1 问题

5.24.2 解决方案

5.24.3 参考

5.25 转换为驼峰命名法

5.25.1 问题

5.25.2 解决方案

5.25.3 讨论

5.25.4 参考

第6章 shell逻辑与算术

6.1 在shell脚本中执行算术操作

6.1.1 问题

6.1.2 解决方案

6.1.3 讨论

6.1.4 参考

6.2 条件分支

6.2.1 问题

6.2.2 解决方案

6.2.3 讨论

6.2.4 参考

6.3 测试文件特性

6.3.1 问题

6.3.2 解决方案

6.3.3 讨论

6.3.4 参考

6.4 测试多个特性

6.4.1 问题

6.4.2 解决方案

6.4.3 讨论

6.4.4 参考

6.5 测试字符串特性

6.5.1 问题

6.5.2 解决方案

6.5.3 讨论

6.5.4 参考

6.6 测试等量关系

6.6.1 问题

6.6.2 解决方案

6.6.3 讨论

6.6.4 参考

6.7 用模式匹配进行测试

6.7.1 问题

6.7.2 解决方案

6.7.3 讨论

6.7.4 参考

6.8 用正则表达式测试

6.8.1 问题

6.8.2 解决方案

6.8.3 讨论

6.8.4 参考

6.9 用重定向改变脚本行为

6.9.1 问题

6.9.2 解决方案

6.9.3 讨论

6.9.4 参考

6.10 循环一段时间

6.10.1 问题

6.10.2 解决方案

6.10.3 讨论

6.10.4 参考

6.11 在循环中使用read

6.11.1 问题

6.11.2 解决方案

6.11.3 讨论

6.11.4 参考

6.12 循环若干次

6.12.1 问题

6.12.2 解决方案

6.12.3 讨论

6.12.4 参考

6.13 在循环中使用浮点值

6.13.1 问题

6.13.2 解决方案

6.13.3 讨论

6.13.4 参考

6.14 多路分支

6.14.1 问题

6.14.2 解决方案

6.14.3 讨论

6.14.4 参考

6.15 解析命令行参数

6.15.1 问题

6.15.2 解决方案

6.15.3 讨论

6.15.4 参考

6.16 创建简单的菜单

6.16.1 问题

6.16.2 解决方案

6.16.3 讨论

6.16.4 参考

6.17 修改简单菜单的提示符

6.17.1 问题

6.17.2 解决方案

6.17.3 讨论

6.17.4 参考

6.18 创建简单的RPN计算器

6.18.1 问题

6.18.2 解决方案

6.18.3 讨论

6.18.4 参考

6.19 创建命令行计算器

6.19.1 问题

6.19.2 解决方案

6.19.3 讨论

6.19.4 参考

第7章 中级shell工具

7.1 在文件中查找字符串

7.1.1 问题

7.1.2 解决方案

7.1.3 讨论

7.1.4 参考

7.2 只显示包含搜索结果的文件名

7.2.1 问题

7.2.2 解决方案

7.2.3 讨论

7.2.4 参考

7.3 了解搜索是否成功

7.3.1 问题

7.3.2 解决方案

7.3.3 讨论

7.3.4 参考

7.4 不区分大小写搜索

7.4.1 问题

7.4.2 解决方案

7.4.3 讨论

7.4.4 参考

7.5 在管道中进行搜索

7.5.1 问题

7.5.2 解决方案

7.5.3 讨论

7.5.4 参考

7.6 缩减搜索结果

7.6.1 问题

7.6.2 解决方案

7.6.3 讨论

7.6.4 参考

7.7 搜索更复杂的模式

参考

7.8 搜索SSN

7.8.1 问题

7.8.2 解决方案

7.8.3 讨论

7.8.4 参考

7.9 搜索压缩文件

7.9.1 问题

7.9.2 解决方案

7.9.3 讨论

7.9.4 参考

7.10 保留部分输出

7.10.1 问题

7.10.2 解决方案

7.10.3 讨论

7.10.4 参考

7.11 仅保留部分输入行

7.11.1 问题

7.11.2 解决方案

7.11.3 讨论

7.11.4 参考

7.12 颠倒每行的单词

7.12.1 问题

7.12.2 解决方案

7.12.3 讨论

7.12.4 参考

7.13 汇总数字列表

7.13.1 问题

7.13.2 解决方案

7.13.3 讨论

7.13.4 参考

7.14 用awk统计字符串出现次数

7.14.1 问题

7.14.2 解决方案

7.14.3 讨论

7.14.4 参考

7.15 用bash统计字符串出现次数

7.15.1 问题

7.15.2 解决方案

7.15.3 讨论

7.15.4 参考

7.16 用便捷的直方图展示数据

7.16.1 问题

7.16.2 解决方案

7.16.3 讨论

7.16.4 参考

7.17 用bash轻松实现直方图

7.17.1 问题

7.17.2 解决方案

7.17.3 讨论

7.17.4 参考

7.18 显示匹配短语之后的文本段落

7.18.1 问题

7.18.2 解决方案

7.18.3 讨论

7.18.4 参考

第8章 中级shell工具(续)

8.1 输出排序

8.1.1 问题

8.1.2 解决方案

8.1.3 讨论

8.1.4 参考

8.2 数字排序

8.2.1 问题

8.2.2 解决方案

8.2.3 讨论

8.2.4 参考

8.3 IP地址排序

8.3.1 问题

8.3.2 解决方案

8.3.3 讨论

8.3.4 参考

8.4 提取部分输出

8.4.1 问题

8.4.2 解决方案

8.4.3 讨论

8.4.4 参考

8.5 删除重复行

8.5.1 问题

8.5.2 解决方案

8.5.3 讨论

8.5.4 参考

8.6 压缩文件

8.6.1 问题

8.6.2 解决方案

8.6.3 讨论

8.6.4 参考

8.7 解压文件

8.7.1 问题

8.7.2 解决方案

8.7.3 讨论

8.7.4 参考

8.8 检查tar归档文件中不重复的目录

8.8.1 问题

8.8.2 解决方案

8.8.3 讨论

8.8.4 参考

8.9 转换字符

8.9.1 问题

8.9.2 解决方案

8.9.3 讨论

8.9.4 参考

8.10 将大写字母转换为小写字母

8.10.1 问题

8.10.2 解决方案

8.10.3 讨论

8.10.4 参考

8.11 将DOS文件转换为Linux格式

8.11.1 问题

8.11.2 解决方案

8.11.3 讨论

8.11.4 参考

8.12 删除智能引号

8.12.1 问题

8.12.2 解决方案

8.12.3 讨论

8.12.4 参考

8.13 统计文件的行数、单词数或字符数

8.13.1 问题

8.13.2 解决方案

8.13.3 讨论

8.13.4 参考

8.14 重新编排段落

8.14.1 问题

8.14.2 解决方案

8.14.3 讨论

8.14.4 参考

8.15 你不知道的less

8.15.1 问题

8.15.2 解决方案

8.15.3 讨论

8.15.4 参考

第9章 查找文件:find、locate、slocate

9.1 查找所有的MP3文件

9.1.1 问题

9.1.2 解决方案

9.1.3 讨论

9.1.4 参考

9.2 处理文件名中的怪异字符

9.2.1 问题

9.2.2 解决方案

9.2.3 讨论

9.2.4 参考

9.3 提升已找到文件的处理速度

9.3.1 问题

9.3.2 解决方案

9.3.3 参考

9.4 跟随符号链接查找文件

9.4.1 问题

9.4.2 解决方案

9.4.3 讨论

9.4.4 讨论

9.5 查找文件时不区分大小写

9.5.1 问题

9.5.2 解决方案

9.5.3 讨论

9.5.4 参考

9.6 按日期查找文件

9.6.1 问题

9.6.2 解决方案

9.6.3 讨论

9.6.4 参考

9.7 按类型查找文件

9.7.1 问题

9.7.2 解决方案

9.7.3 讨论

9.7.4 参考

9.8 按大小查找文件

9.8.1 问题

9.8.2 解决方案

9.8.3 讨论

9.8.4 参考

9.9 按内容查找文件

9.9.1 问题

9.9.2 解决方案

9.9.3 讨论

9.9.4 参考

9.10 快速查找现有文件及其内容

9.10.1 问题

9.10.2 解决方案

9.10.3 讨论

9.10.4 参考

9.11 在可能的位置上查找文件

9.11.1 问题

9.11.2 解决方案

9.11.3 讨论

9.11.4 参考

第10章 脚本编程的附加特性

10.1 脚本“守护进程化”

10.1.1 问题

10.1.2 解决方案

10.1.3 讨论

10.1.4 参考

10.2 代码重用

10.2.1 问题

10.2.2 解决方案

10.2.3 讨论

10.2.4 参考

10.3 在脚本中使用配置文件

10.3.1 问题

10.3.2 解决方案

10.3.3 讨论

10.3.4 参考

10.4 定义函数

10.4.1 问题

10.4.2 解决方案

10.4.3 讨论

10.4.4 参考

10.5 使用函数:参数和返回值

10.5.1 问题

10.5.2 解决方案

10.5.3 讨论

10.5.4 参考

10.6 中断陷阱

10.6.1 问题

10.6.2 解决方案

10.6.3 讨论

10.6.4 参考

10.7 用别名重新定义命令

10.7.1 问题

10.7.2 解决方案

10.7.3 讨论

10.7.4 参考

10.8 避开别名和函数

10.8.1 问题

10.8.2 解决方案

10.8.3 讨论

10.8.4 参考

10.9 计算已过去的时间

10.9.1 问题

10.9.2 解决方案

10.9.3 讨论

10.9.4 参考

10.10 编写包装器

10.10.1 问题

10.10.2 解决方案

10.10.3 讨论

10.10.4 参考

第11章 处理日期和时间

11.1 格式化日期显示

11.1.1 问题

11.1.2 解决方案

11.1.3 讨论

11.1.4 参考

11.2 提供默认日期

11.2.1 问题

11.2.2 解决方案

11.2.3 讨论

11.2.4 参考

11.3 自动生成日期范围

11.3.1 问题

11.3.2 解决方案

11.3.3 讨论

11.3.4 参考

11.4 将日期和时间转换为纪元秒

11.4.1 问题

11.4.2 解决方案

11.4.3 讨论

11.4.4 讨论

11.5 将纪元秒转换为日期和时间

11.5.1 问题

11.5.2 解决方案

11.5.3 讨论

11.5.4 参考

11.6 用Perl获得昨天或明天的日期

11.6.1 问题

11.6.2 解决方案

11.6.3 讨论

11.6.4 参考

11.7 日期与时间运算

11.7.1 问题

11.7.2 解决方案

11.7.3 讨论

11.7.4 参考

11.8 处理时区、夏令时和闰年

11.8.1 问题

11.8.2 解决方案

11.8.3 讨论

11.8.4 参考

11.9 用date和cron在第N天运行脚本

11.9.1 问题

11.9.2 解决方案

11.9.3 讨论

11.9.4 参考

11.10 输出带有日期的日志

11.10.1 问题

11.10.2 解决方案

11.10.3 讨论

11.10.4 参考

第12章 帮助最终用户完成任务的shell脚本

12.1 输出连字符

12.1.1 问题

12.1.2 解决方案

12.1.3 讨论

12.1.4 参考

12.2 浏览相册

12.2.1 问题

12.2.2 解决方案

12.2.3 讨论

12.2.4 参考

12.3 填装MP3播放器

12.3.1 问题

12.3.2 解决方案

12.3.3 讨论

12.3.4 参考

12.4 刻录CD

12.4.1 问题

12.4.2 解决方案

12.4.3 讨论

12.4.4 参考

12.5 比较文档

12.5.1 问题

12.5.2 解决方案

12.5.3 讨论

12.5.4 参考

第13章 与解析相关的任务

13.1 解析shell脚本参数

13.1.1 问题

13.1.2 解决方案

13.1.3 讨论

13.1.4 参考

13.2 解析参数时使用自定义错误消息

13.2.1 问题

13.2.2 解决方案

13.2.3 讨论

13.2.4 参考

13.3 解析HTML

13.3.1 问题

13.3.2 解决方案

13.3.3 讨论

13.3.4 参考

13.4 将输出解析到数组

13.4.1 问题

13.4.2 解决方案

13.4.3 讨论

13.4.4 参考

13.5 用函数调用解析输出

13.5.1 问题

13.5.2 解决方案

13.5.3 讨论

13.5.4 参考

13.6 用read语句解析文本

13.6.1 问题

13.6.2 解决方案

13.6.3 讨论

13.6.4 参考

13.7 用read将输入解析至数组

13.7.1 问题

13.7.2 解决方案

13.7.3 讨论

13.7.4 参考

13.8 读取整个文件

13.8.1 问题

13.8.2 解决方案

13.8.3 讨论

13.8.4 参考

13.9 正确书写复数形式

13.9.1 问题

13.9.2 解决方案

13.9.3 讨论

13.9.4 参考

13.10 一次提取一个字符

13.10.1 问题

13.10.2 解决方案

13.10.3 讨论

13.10.4 参考

13.11 清理svn源代码树

13.11.1 问题

13.11.2 解决方案

13.11.3 讨论

13.11.4 参考

13.12 用MySQL设置数据库

13.12.1 问题

13.12.2 解决方案

13.12.3 讨论

13.12.4 参考

13.13 提取数据中的特定字段

13.13.1 问题

13.13.2 解决方案

13.13.3 讨论

13.13.4 参考

13.14 更新数据文件中的特定字段

13.14.1 问题

13.14.2 解决方案

13.14.3 讨论

13.14.4 参考

13.15 修剪空白字符

13.15.1 问题

13.15.2 解决方案

13.15.3 讨论

13.15.4 参考

13.16 压缩空白字符

13.16.1 问题

13.16.2 解决方案

13.16.3 讨论

13.16.4 参考

13.17 处理固定长度记录

13.17.1 问题

13.17.2 解决方案

13.17.3 讨论

13.17.4 讨论

13.18 处理没有换行的文件

13.18.1 问题

13.18.2 解决方案

13.18.3 讨论

13.18.4 参考

13.19 将数据文件转换为CSV

13.19.1 问题

13.19.2 解决方案

13.19.3 讨论

13.19.4 参考

13.20 解析CSV数据文件

13.20.1 问题

13.20.2 解决方案

13.20.3 讨论

13.20.4 参考

第14章 编写安全的shell脚本

14.1 避开常见的安全问题

14.1.1 问题

14.1.2 解决方案

14.1.3 讨论

14.1.4 参考

14.2 避免解释器欺骗

14.2.1 问题

14.2.2 解决方案

14.2.3 讨论

14.2.4 参考

14.3 设置安全的$PATH

14.3.1 问题

14.3.2 解决方案

14.3.3 讨论

14.3.4 参考

14.4 清除所有的别名

14.4.1 问题

14.4.2 解决方案

14.4.3 讨论

14.4.4 参考

14.5 清除命令散列

14.5.1 问题

14.5.2 解决方案

14.5.3 讨论

14.5.4 参考

14.6 防止核心转储

14.6.1 问题

14.6.2 解决方案

14.6.3 讨论

14.6.4 参考

14.7 设置安全的$IFS

14.7.1 问题

14.7.2 解决方案

14.7.3 讨论

14.7.4 参考

14.8 设置安全的umask

14.8.1 问题

14.8.2 解决方案

14.8.3 讨论

14.8.4 参考

14.9 在$PATH中查找人皆可写的目录

14.9.1 问题

14.9.2 解决方案

14.9.3 讨论

14.9.4 参考

14.10 将当前目录加入$PATH

14.10.1 问题

14.10.2 解决方案

14.10.3 讨论

14.10.4 参考

14.11 使用安全的临时文件

14.11.1 问题

14.11.2 解决方案

14.11.3 讨论

14.11.4 参考

14.12 验证输入

14.12.1 问题

14.12.2 解决方案

14.12.3 讨论

14.12.4 参考

14.13 设置权限

14.13.1 问题

14.13.2 解决方案

14.13.3 讨论

14.13.4 参考

14.14 密码被泄露到进程列表

14.14.1 问题

14.14.2 解决方案

14.14.3 讨论

14.14.4 参考

14.15 编写setuid或setgid脚本

14.15.1 问题

14.15.2 解决方案

14.15.3 讨论

14.15.4 参考

14.16 限制访客

14.16.1 问题

14.16.2 解决方案

14.16.3 讨论

14.16.4 参考

14.17 使用chroot囚牢

14.17.1 问题

14.17.2 解决方案

14.17.3 讨论

14.17.4 参考

14.18 以非root用户身份运行

14.18.1 问题

14.18.2 解决方案

14.18.3 讨论

14.18.4 参考

14.19 更安全地使用sudo

14.19.1 问题

14.19.2 解决方案

14.19.3 讨论

14.19.4 参考

14.20 在脚本中使用密码

14.20.1 问题

14.20.2 解决方案

14.20.3 讨论

14.20.4 参考

14.21 使用无密码的SSH

14.21.1 问题

14.21.2 解决方案

14.21.3 讨论

14.21.4 参考

14.22 限制SSH命令

14.22.1 问题

14.22.2 解决方案

14.22.3 讨论

14.22.4 参考

14.23 断开非活跃会话

14.23.1 问题

14.23.2 解决方案

14.23.3 讨论

14.23.4 参考

第15章 高级脚本编程

15.1 以可移植的方式查找bash

15.1.1 问题

15.1.2 解决方案

15.1.3 讨论

15.1.4 参考

15.2 设置兼容POSIX工具的$PATH

15.2.1 问题

15.2.2 解决方案

15.2.3 讨论

15.2.4 参考

15.3 开发可移植的shell脚本

15.3.1 问题

15.3.2 解决方案

15.3.3 讨论

15.3.4 参考

15.4 用虚拟机测试脚本

15.4.1 问题

15.4.2 解决方案

15.4.3 讨论

15.4.4 参考

15.5 使用可移植的循环

15.5.1 问题

15.5.2 解决方案

15.5.3 讨论

15.5.4 参考

15.6 使用可移植的echo

15.6.1 问题

15.6.2 解决方案

15.6.3 讨论

15.6.4 参考

15.7 仅在必要时分割输出

15.7.1 问题

15.7.2 解决方案

15.7.3 讨论

15.7.4 参考

15.8 以十六进制形式查看输出

15.8.1 问题

15.8.2 解决方案

15.8.3 讨论

15.8.4 参考

15.9 使用bash的网络重定向

15.9.1 问题

15.9.2 解决方案

15.9.3 讨论

15.9.4 参考

15.10 查找自己的IP地址

15.10.1 问题

15.10.2 解决方案

15.10.3 讨论

15.10.4 参考

15.11 从另一台机器获取输入

15.11.1 问题

15.11.2 解决方案

15.11.3 讨论

15.11.4 参考

15.12 在脚本运行期间重定向输出

15.12.1 问题

15.12.2 解决方案

15.12.3 讨论

15.12.4 参考

15.13 解决“Argument list too long”错误

15.13.1 问题

15.13.2 解决方案

15.13.3 讨论

15.13.4 参考

15.14 向syslog记录脚本日志

15.14.1 问题

15.14.2 解决方案

15.14.3 讨论

15.14.4 参考

15.15 正确地使用logger

15.15.1 问题

15.15.2 解决方案

15.15.3 讨论

15.15.4 参考

15.16 在脚本中发送电子邮件

15.16.1 问题

15.16.2 解决方案

15.16.3 讨论

15.16.4 参考

15.17 用阶段自动化进程

15.17.1 问题

15.17.2 解决方案

15.17.3 讨论

15.17.4 参考

15.18 一心二用

15.18.1 问题

15.18.2 解决方案

15.18.3 讨论

15.18.4 参考

15.19 在多个主机上执行SSH命令

15.19.1 问题

15.19.2 解决方案

15.19.3 讨论

15.19.4 参考

第16章 bash的配置与自定义

16.1 bash启动选项

16.1.1 问题

16.1.2 解决方案

16.1.3 讨论

16.1.4 参考

16.2 自定义提示符

16.2.1 问题

16.2.2 解决方案

16.2.3 讨论

16.2.4 参考

16.3 在程序运行前出现的提示符

16.3.1 问题

16.3.2 解决方案

16.3.3 讨论

16.3.4 参考

16.4 永久修改$PATH

16.4.1 问题

16.4.2 解决方案

16.4.3 讨论

16.4.4 参考

16.5 临时修改$PATH

16.5.1 问题

16.5.2 解决方案

16.5.3 讨论

16.5.4 参考

16.6 设置$CDPATH

16.6.1 问题

16.6.2 解决方案

16.6.3 讨论

16.6.4 参考

16.7 当找不到命令时

16.7.1 问题

16.7.2 解决方案

16.7.3 讨论

16.7.4 参考

16.8 缩短或修改命令名称

16.8.1 问题

16.8.2 解决方案

16.8.3 讨论

16.8.4 参考

16.9 调整shell行为及环境

16.9.1 问题

16.9.2 解决方案

16.9.3 讨论

16.9.4 参考

16.10 用.inputrc调整readline的行为

16.10.1 问题

16.10.2 解决方案

16.10.3 讨论

16.10.4 参考

16.11 通过添加~/bin来存放个人工具

16.11.1 问题

16.11.2 解决方案

16.11.3 讨论

16.11.4 参考

16.12 使用辅助提示符:$PS2、$PS3、$PS4

16.12.1 问题

16.12.2 解决方案

16.12.3 讨论

16.12.4 参考

16.13 在会话间同步shell历史记录

16.13.1 问题

16.13.2 解决方案

16.13.3 讨论

16.13.4 参考

16.14 设置shell的历史选项

16.14.1 问题

16.14.2 解决方案

16.14.3 讨论

16.14.4 参考

16.15 创建更好的cd命令

16.15.1 问题

16.15.2 解决方案

16.15.3 讨论

16.15.4 参考

16.16 一次性创建并切换到新目录

16.16.1 问题

16.16.2 解决方案

16.16.3 讨论

16.16.4 参考

16.17 直达底部

16.17.1 问题

16.17.2 解决方案

16.17.3 讨论

16.17.4 参考

16.18 用可装载的内建命令为bash添加新特性

16.18.1 问题

16.18.2 解决方案

16.18.3 讨论

16.18.4 参考

16.19 改善可编程补全

16.19.1 问题

16.19.2 解决方案

16.19.3 讨论

16.19.4 参考

16.20 正确使用初始化文件

16.20.1 问题

16.20.2 解决方案

16.20.3 讨论

16.20.4 参考

16.21 创建自包含的可移植rc文件

16.21.1 问题

16.21.2 解决方案

16.21.3 讨论

16.21.4 参考

16.22 自定义配置入门

16.22.1 问题

16.22.2 解决方案

16.22.3 讨论

16.22.4 参考

第17章 内务及管理任务

17.1 批量重命名文件

17.1.1 问题

17.1.2 解决方案

17.1.3 讨论

17.1.4 参考

17.2 在Linux中使用GUN Texinfo和info

17.2.1 问题

17.2.2 解决方案

17.2.3 讨论

17.2.4 参考

17.3 批量解压ZIP文件

17.3.1 问题

17.3.2 解决方案

17.3.3 讨论

17.3.4 参考

17.4 用screen恢复断开的会话

17.4.1 问题

17.4.2 解决方案

17.4.3 讨论

17.4.4 参考

17.5 共享单个bash会话

17.5.1 问题

17.5.2 解决方案

17.5.3 讨论

17.5.4 参考

17.6 记录整个会话或批量作业

17.6.1 问题

17.6.2 解决方案

17.6.3 讨论

17.6.4 参考

17.7 注销时清除屏幕

17.7.1 问题

17.7.2 解决方案

17.7.3 讨论

17.7.4 参考

17.8 获取用于数据恢复的文件元数据

17.8.1 问题

17.8.2 解决方案

17.8.3 讨论

17.8.4 参考

17.9 为多个文件创建索引

17.9.1 问题

17.9.2 解决方案

17.9.3 讨论

17.9.4 参考

17.10 使用diff和patch

17.10.1 问题

17.10.2 解决方案

17.10.3 讨论

17.10.4 参考

17.11 统计文件间存在多少差异

17.11.1 问题

17.11.2 解决方案

17.11.3 讨论

17.11.4 参考

17.12 删除或重命名名称中包含特殊字符的文件

17.12.1 问题

17.12.2 解决方案

17.12.3 讨论

17.12.4 参考

17.13 将数据追加到文件开头

17.13.1 问题

17.13.2 解决方案

17.13.3 讨论

17.13.4 参考

17.14 就地编辑文件

17.14.1 问题

17.14.2 解决方案

17.14.3 讨论

17.14.4 参考

17.15 将sudo应用于一组命令

17.15.1 问题

17.15.2 解决方案

17.15.3 讨论

17.15.4 参考

17.16 查找仅出现在一个文件中的行

17.16.1 问题

17.16.2 解决方案

17.16.3 讨论

17.16.4 参考

17.17 保留最近的N个对象

17.17.1 问题

17.17.2 解决方案

17.17.3 讨论

17.17.4 参考

17.18 写入循环日志

17.18.1 问题

17.18.2 解决方案

17.18.3 讨论

17.18.4 参考

17.19 循环备份

17.19.1 问题

17.19.2 解决方案

17.19.3 讨论

17.19.4 参考

17.20 搜索不包含grep进程自身在内的ps输出

17.20.1 问题

17.20.2 解决方案

17.20.3 讨论

17.20.4 参考

17.21 确定某个进程是否正在运行

17.21.1 问题

17.21.2 解决方案

17.21.3 讨论

17.21.4 参考

17.22 为输出添加前缀或后缀

17.22.1 问题

17.22.2 解决方案

17.22.3 讨论

17.22.4 参考

17.23 对行进行编号

17.23.1 问题

17.23.2 解决方案

17.23.3 讨论

17.23.4 参考

17.24 生成序列

17.24.1 问题

17.24.2 解决方案

17.24.3 讨论

17.24.4 参考

17.25 模拟DOS的pause命令

17.25.1 问题

17.25.2 解决方案

17.25.3 讨论

17.25.4 参考

17.26 为数值添加逗号

17.26.1 问题

17.26.2 解决方案

17.26.3 讨论

17.26.4 参考

第18章 写得少,干得快

18.1 在任意目录之间快速移动

18.1.1 问题

18.1.2 解决方案

18.1.3 讨论

18.1.4 参考

18.2 重复上一个命令

18.2.1 问题

18.2.2 解决方案

18.2.3 讨论

18.2.4 参考

18.3 执行类似命令

18.3.1 问题

18.3.2 解决方案

18.3.3 讨论

18.3.4 参考

18.4 快速替换

18.4.1 问题

18.4.2 解决方案

18.4.3 讨论

18.4.4 参考

18.5 参数重用

18.5.1 问题

18.5.2 解决方案

18.5.3 讨论

18.5.4 参考

18.6 名称补全

18.6.1 问题

18.6.2 解决方案

18.6.3 讨论

18.6.4 参考

18.7 安全第一

18.7.1 问题

18.7.2 解决方案

18.7.3 讨论

18.7.4 参考

18.8 修改多个命令

18.8.1 问题

18.8.2 解决方案

18.8.3 讨论

18.8.4 参考

第19章 窍门与陷阱:新手常见错误

19.1 忘记设置可执行权限

19.1.1 问题

19.1.2 解决方案

19.1.3 讨论

19.1.4 参考

19.2 修复“No such file or directory”错误

19.2.1 问题

19.2.2 解决方案

19.2.3 讨论

19.2.4 参考

19.3 忘记当前目录不在$PATH中

19.3.1 问题

19.3.2 解决方案

19.3.3 讨论

19.3.4 参考

19.4 将脚本命名为test

19.4.1 问题

19.4.2 解决方案

19.4.3 讨论

19.4.4 参考

19.5 试图修改已导出的变量

19.5.1 问题

19.5.2 解决方案

19.5.3 讨论

19.5.4 参考

19.6 赋值时忘记加引号

19.6.1 问题

19.6.2 解决方案

19.6.3 讨论

19.6.4 参考

19.7 忘记模式匹配的结果是按字母顺序排列的

19.7.1 问题

19.7.2 解决方案

19.7.3 讨论

19.8 忘记管道会产生子shell

19.8.1 问题

19.8.2 解决方案

19.8.3 讨论

19.8.4 参考

19.9 使终端恢复正常

19.9.1 问题

19.9.2 解决方案

19.9.3 讨论

19.9.4 参考

19.10 用空变量删除文件

19.10.1 问题

19.10.2 解决方案

19.10.3 讨论

19.10.4 参考

19.11 printf的怪异行为

19.11.1 问题

19.11.2 解决方案

19.11.3 讨论

19.11.4 参考

19.12 测试bash脚本语法

19.12.1 问题

19.12.2 解决方案

19.12.3 讨论

19.12.4 参考

19.13 调试脚本

19.13.1 问题

19.13.2 解决方案

19.13.3 讨论

19.13.4 参考

19.14 使用函数时避免出现“command not found”错误

19.14.1 问题

19.14.2 解决方案

19.14.3 讨论

19.14.4 参考

19.15 混淆了shell通配符和正则表达式

19.15.1 问题

19.15.2 解决方案

19.15.3 讨论

19.15.4 参考

附录A 参考

A.1 bash调用

A.2 自定义提示符字符串

A.3 ANSI颜色转义序列

A.4 内建命令

A.5 bash保留字

A.6 shell内建变量

A.7 set选项

A.8 shopt选项

A.9 测试运算符

A.10 I/O重定向

A.11 echo选项与转义序列

A.12 printf

A.12.1 示例

A.12.2 参考

A.13 用strftime格式化日期和时间

A.14 模式匹配字符

A.15 extglob扩展模式匹配运算符

A.16 tr转义序列

A.17 readline的init文件语法

A.18 Emacs模式命令

A.19 vi控制模式命令

A.20 ASCII编码表

附录B bash 自带的示例

bash文档和示例

附录C 命令行处理

C.1 命令行处理步骤

C.2 引用

C.3 eval

附录D 修订控制

D.1 参考

D.2 Git

D.2.1 优点

D.2.2 缺点

D.2.3 示例

D.2.4 参考

D.3 Bazaar

D.3.1 优点

D.3.2 缺点

D.3.3 示例

D.3.4 参考

D.4 Mercurial

D.4.1 优点

D.4.2 缺点

D.4.3 示例

D.4.4 参考

D.5 Subversion

D.5.1 优点

D.5.2 缺点

D.5.3 示例

D.5.4 参考

D.6 Meld

D.6.1 优点

D.6.2 缺点

D.6.3 示例

D.6.4 参考

D.7 etckeeper

D.7.1 优点

D.7.2 缺点

D.7.3 示例

D.7.4 参考

D.8 其他

D.8.1 文档比对

D.8.2 变更跟踪和多版本

D.8.3 使用这些特性

附录E 从源代码构建 bash

E.1 获得bash

E.2 解开归档文件

E.3 归档文件中都有什么

E.3.1 文档

E.3.2 bash的配置与构建

E.3.3 测试bash

E.3.4 潜在问题

E.3.5 将bash安装为登录shell

E.3.6 示例

E.4 如何获得帮助

E.4.1 提问

E.4.2 报告bug

关于作者

关于封面

看完了

bashshell脚本编程经典实例(第2版)是2021年由人民邮电出版社出版,作者 (美) JP·沃森 (JP Vossen) 。

得书感谢您对《bashshell脚本编程经典实例(第2版)》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

购买这本书

你可能喜欢
Scratch快乐编程 小学学科创意编程实例 电子书
具有多年教学经验的中小学信息技术一线名师,倾情创作; 27个精彩实例 27堂名师微课; 涵盖数学、语文、英语、科学、美术、音乐、体育等学科; “编”玩边学,寓教于乐,让Scratch 创意编程轻松上手,妙趣横生! ·实例丰富:本书实例丰富,内容编排合理,难度适中。每个实例都有详细的分析和制作指导,降低了学习的难度,使学生对所学知识更加容易理解。 ·图文并茂:本书使用图片代替了大部分的文字说明,学生能够轻松读懂描述的内容。 ·资源丰富:本书配备了所有实例的素材和源文件,并且为学生自学录制了微课,从数量上到内容上都有更多的选择,扫描二维码即可观看。 ·形式贴心:对学生在学习过程中可能会遇到的疑问,以“小技巧”栏目的形式进行说明,避免学生在学习的过程中少走弯路。 ·微课辅导:作者同时开发了对应的微课,帮助学生自主学习。
Python快乐编程  中学学科创意编程实例 电子书
本书根据中学生熟悉的美术、数学、体育、物理、化学、语文、英语、生物和音乐9门学科设计了9个单元,每个单元以课的形式编排,每课精选一个学科知识热点作为案例,激发学生用编程解决问题的兴趣。寓教于乐,妙趣横生。
PowerMill 2020五轴数控加工编程应用实例 电子书
本书主要介绍PowerMill2020五轴数控加工编程生成刀具路径的要点和技巧,以提高读者在实际生产应用中的能力。全书共6章,第1章是基础章节;第2、3章为企业生产实例;为提高读者学习兴趣;第4~6章介绍了工艺品的加工实例。本书采用通俗易懂的语言和图文并茂的形式进行讲解,实例安排从简单到复杂,循序渐进,让读者充分领悟PowerMill2020五轴数控加工编程的工艺思路,达到事半功倍的效果。扫描书中
Windows网络编程(第2版) 电子书
随着Internet技术的应用和普及,人类社会已经进入了信息化的网络时代。大多数应用程序都是运行在网络环境下,这就要求程序员能够在应用**广泛的Windows操作系统上开发网络应用程序。本书结合大量的实例,介绍了开发Windows网络应用程序的知识,并完整地讲述了几个Windows网络应用程序实例的开发过程。这些实例包括局域网探测器、基于P2P技术的BT下载工具和基于WinPcap技术的网络数据包
数控编程与操作(第2版) 电子书
本书以数控车床、数控铣床(加工中心)、数控电火花线切割的编程与操作为核心,以FANUC数控系统和华中数控系统为主,按照学习与教学的规律,深入浅出地详细介绍数控加工工艺、数控车削与铣削的编程、数控电火花线切割的编程、数控机床的操作以及典型零件的应用实例等内容。所有零件加工程序语句都附有详细、清晰的注释说明。各章后设有习题,便于学生更好地掌握所学内容;书的**后附有FANUC和华中世纪之星数控车削指令