第1章 Bash速成 1
1.1 Bash和CLI基础知识入门 2
1.2 基本变量的创建和使用 6
1.3 Bash隐藏变量和保留字 9
1.4 使用if、else、elseif进行条件逻辑判断 11
1.4.1 评估数值 12
1.4.2 评估字符串 13
1.4.3 嵌套if语句 14
1.5 case/switch语句和循环结构 14
1.5.1 基本的case语句 15
1.5.2 基本循环 16
1.6 使用函数和参数 17
1.7 包含源文件 19
1.8 检索返回码和输出 20
1.9 使用管道连接多个命令以及输入/输出重定向 23
1.10 获取程序输入参数 26
1.11 获取命令相关的额外信息 28
1.12 小结 29
第2章 文本与文件处理 30
2.1 简介 30
2.2 基本的字符串和文件搜索 32
2.2.1 准备工作 32
2.2.2 实战演练 33
2.2.3 工作原理 34
2.3 使用通配符和正则表达式 36
2.3.1 准备工作 37
2.3.2 实战演练 38
2.3.3 工作原理 39
2.4 脚本中的数学运算 43
2.4.1 准备工作 44
2.4.2 实战演练 45
2.4.3 工作原理 47
2.5 用Bash提取/更改/排序/删除/搜索字符串 49
2.5.1 准备工作 50
2.5.2 实战演练 50
2.5.3 工作原理 54
2.6 使用sed和awk删除/替换子串 57
2.6.1 准备工作 57
2.6.2 实战演练 58
2.6.3 工作原理 60
2.7 使用echo和printf格式化数据/输出 62
2.7.1 准备工作 63
2.7.2 实战演练 63
2.7.3 工作原理 65
2.8 脚本国际化 66
2.8.1 准备工作 67
2.8.2 实战演练 68
2.8.3 工作原理 70
2.9 根据文件内容统计并减少重复 73
2.9.1 准备工作 74
2.9.2 实战演练 74
2.9.3 工作原理 74
2.10 在条件逻辑中使用文件属性 76
2.10.1 准备工作 77
2.10.2 实战演练 77
2.10.3 工作原理 78
2.11 读取被分隔的数据并更改输出格式 81
2.11.1 准备工作 82
2.11.2 实战演练 83
2.11.3 工作原理 84
第3章 精通文件系统 86
3.1 简介 86
3.2 多角度浏览文件——head、tail、less和more 87
3.2.1 准备工作 87
3.2.2 实战演练 87
3.2.3 工作原理 88
3.3 按照名称或扩展名搜索文件 90
3.3.1 准备工作 92
3.3.2 实战演练 92
3.3.3 工作原理 93
3.4 用diff命令比较文件差异并修补 95
3.4.1 准备工作 96
3.4.2 实战演练 96
3.4.3 工作原理 97
3.5 创建并有效地使用符号链接 99
3.5.1 实战演练 100
3.5.2 工作原理 101
3.6 爬取文件系统并打印目录树 102
3.6.1 准备工作 102
3.6.2 实战演练 102
3.6.3 工作原理 104
3.7 查找并删除重复的文件或目录 104
3.7.1 准备工作 105
3.7.2 实战演练 106
3.7.3 工作原理 107
3.8 在任意位置合并和切分文件 108
3.8.1 准备工作 109
3.8.2 实战演练 109
3.8.3 工作原理 111
3.9 生成各种大小的数据集和随机文件 112
3.9.1 准备工作 113
3.9.2 实战演练 113
3.9.3 工作原理 115
第4章 像守护进程一样的脚本 116
4.1 简介 116
4.2 使用循环或递归持续运行程序 117
4.2.1 准备工作 117
4.2.2 实战演练 118
4.2.3 工作原理 119
4.3 在注销后保持程序/脚本继续运行 120
4.3.1 准备工作 120
4.3.2 实战演练 121
4.3.3 工作原理 122
4.4 调用特权命令 123
4.4.1 准备工作 124
4.4.2 实战演练 125
4.4.3 工作原理 126
4.5 净化用户输出并获得可复现的结果 126
4.5.1 准备工作 127
4.5.2 实战演练 127
4.5.3 工作原理 130
4.6 使用select创建简单的多级菜单 131
4.6.1 准备工作 131
4.6.2 实战演练 132
4.6.3 工作原理 133
4.7 生成并捕获信号 133
4.7.1 准备工作 134
4.7.2 实战演练 134
4.7.3 工作原理 135
4.8 在脚本中使用临时文件和锁文件 135
4.8.1 准备工作 136
4.8.2 实战演练 136
4.8.3 工作原理 137
4.9 利用超时等待命令完成 137
4.9.1 准备工作 138
4.9.2 实战演练 138
4.9.3 工作原理 139
4.10 创建FIFO和并行进程 141
4.10.1 准备工作 141
4.10.2 实战演练 141
4.10.3 工作原理 142
4.11 在系统启动时执行脚本 143
4.11.1 准备工作 144
4.11.2 实战演练 146
4.11.3 工作原理 147
第5章 系统管理脚本 148
5.1 简介 148
5.2 收集和汇总系统信息 149
5.2.1 准备工作 149
5.2.2 实战演练 149
5.2.3 工作原理 150
5.3 收集网络信息和诊断网络连通性 152
5.3.1 准备工作 152
5.3.2 实战演练 153
5.3.3 工作原理 153
5.4 配置基本的网络连接 154
5.4.1 准备工作 154
5.4.2 实战演练 154
5.4.3 工作原理 154
5.5 监视目录和文件 155
5.5.1 准备工作 155
5.5.2 实战演练 155
5.5.3 工作原理 155
5.6 文件的压缩和归档 155
5.6.1 准备工作 156
5.6.2 实战演练 156
5.6.3 工作原理 157
5.7 日志文件轮替 157
5.7.1 准备工作 158
5.7.2 实战演练 158
5.7.3 工作原理 159
5.8 使用iptables设置Linux防火墙 160
5.8.1 准备工作 160
5.8.2 实战演练 160
5.8.3 工作原理 161
5.9 从远程或本地访问SQL数据库 161
5.9.1 准备工作 161
5.9.2 实战演练 161
5.9.3 工作原理 163
5.10 创建SSH密钥,实现无密码远程访问 163
5.10.1 准备工作 163
5.10.2 实战演练 163
5.11 创建和配置用于任务调度的cron作业 164
5.11.1 实战演练 164
5.11.2 工作原理 165
5.12 系统化地创建用户和组 166
5.12.1 实战演练 166
5.12.2 工作原理 166
第6章 高级用户专用脚本 167
6.1 简介 167
6.1.1 创建syslog条目并生成警报 168
6.1.2 实战演练 168
6.1.3 工作原理 169
6.2 使用dd备份和擦除磁盘及分区 169
6.2.1 准备工作 169
6.2.2 实战演练 169
6.2.3 工作原理 170
6.3 在命令行中创建图形化界面 170
6.3.1 准备工作 170
6.3.2 实战演练 170
6.3.3 工作原理 171
6.4 检查文件完整性 172
6.4.1 准备工作 172
6.4.2 实战演练 172
6.4.3 工作原理 173
6.5 挂载网络文件系统 174
6.5.1 准备工作 174
6.5.2 实战演练 174
6.5.3 工作原理 174
6.6 在命令行中浏览Web页面 175
6.6.1 准备工作 175
6.6.2 实战演练 175
6.6.3 工作原理 175
6.7 捕获网络流量 176
6.7.1 准备工作 176
6.7.2 实战演练 176
6.7.3 工作原理 177
6.8 查找可执行文件的依赖关系 177
6.8.1 准备工作 177
6.8.2 实战演练 177
6.8.3 工作原理 178
6.9 获取不同时区的时间 178
6.9.1 准备工作 178
6.9.2 实战演练 178
6.9.3 工作原理 179
6.10 在脚本中加密/解密文件 179
6.10.1 准备工作 179
6.10.2 实战演练 179
6.10.3 工作原理 179
第7章 Bash致胜之道 180
7.1 简介 180
7.2 创建一个简易实用的HTTP服务器 181
7.2.1 准备工作 181
7.2.2 实战演练 181
7.2.3 工作原理 182
7.3 解析RSS feed 182
7.3.1 准备工作 182
7.3.2 实战演练 182
7.3.3 工作原理 182
7.4 爬取Web页面 182
7.4.1 准备工作 183
7.4.2 实战演练 183
7.4.3 工作原理 183
7.5 制作简单的IRC聊天机器人 183
7.5.1 准备工作 183
7.5.2 实战演练 183
7.5.3 工作原理 184
7.6 阻止SSH访问已失效的IP地址 184
7.6.1 准备工作 184
7.6.2 实战演练 185
7.6.3 工作原理 185
7.7 使用Bash播放和管理音频文件 185
7.7.1 准备工作 185
7.7.2 实战演练 186
7.7.3 工作原理 186
7.8 搭建简单的NAT和DMZ防火墙 186
7.8.1 准备工作 186
7.8.2 实战演练 186
7.8.3 工作原理 187
7.9 解析GitHub项目并生成报告 187
7.9.1 准备工作 187
7.9.2 实战演练 187
7.9.3 工作原理 188
7.10 创建初级的远程增量 188
7.10.1 准备工作 188
7.10.2 实战演练 188
7.10.3 工作原理 188
7.11 使用Bash脚本监视udev输入 189
7.11.1 准备工作 189
7.11.2 实战演练 189
7.11.3 工作原理 189
7.12 使用Bash监视并优化电池容量 190
7.12.1 准备工作 190
7.12.2 实战演练 190
7.12.3 工作原理 191
7.13 使用chroot和受限shell保护脚本安全 191
7.13.1 准备工作 191
7.13.2 实战演练 191
7.13.3 工作原理 192
第8章 高级脚本技术 193
8.1 简介 193
8.2 计算脚本的运行时间 194
8.2.1 准备工作 194
8.2.2 实战演练 194
8.2.3 工作原理 194
8.3 编写单行条件语句和循环语句 194
8.3.1 准备工作 194
8.3.2 实战演练 194
8.3.3 工作原理 195
8.4 避免出现“command not found”警告/错误 195
8.4.1 准备工作 195
8.4.2 实战演练 195
8.4.3 工作原理 196
8.5 创建可与脚本配合使用的配置文件 196
8.5.1 准备工作 197
8.5.2 实战演练 197
8.5.3 工作原理 197
8.6 更改命令行配色 198
8.6.1 准备工作 198
8.6.2 实战演练 198
8.6.3 工作原理 199
8.7 创建命令别名 200
8.7.1 准备工作 200
8.7.2 实战演练 200
8.7.3 工作原理 200
8.8 向原始终端设备回显输出 200
8.8.1 准备工作 201
8.8.2 实战演练 201
8.8.3 工作原理 201
8.9 为Bash脚本创建简单的前端GUI 201
8.9.1 准备工作 202
8.9.2 实战演练 202
8.9.3 工作原理 204
8.10 编译并安装自制的Bash shell脚本 204
8.10.1 准备工作 204
8.10.2 实战演练 204
8.10.3 工作原理 205
8.11 录制终端会话 205
8.11.1 准备工作 205
8.11.2 实战演练 205
8.11.3 工作原理 205
8.12 编写高质量脚本 205
8.12.1 准备工作 206
8.12.2 实战演练 206
8.12.3 工作原理 206