第1篇 认识Shell编程 2
第1章 Shell入门基础(教学视频:66分钟) 2
1.1 为什么学习和使用Shell编程 2
1.2 什么是Shell 2
1.2.1 Shell的起源 3
1.2.2 Shell的功能 4
1.2.3 Shell的分类 4
1.3 作为程序设计语言的Shell 5
1.3.1 交互式程序 5
1.3.2 创建脚本 6
1.3.3 把脚本设置为可执行 6
1.4 向脚本传递参数 7
1.4.1 Shell脚本的参数 8
1.4.2 参数扩展 9
1.5 第一个Shell程序:Hello,Bash Shell! 10
1.5.1 Shell脚本的基本元素 10
1.5.2 指定命令解读器 11
1.5.3 Shell脚本中的注释和风格 12
1.5.4 如何执行Shell程序 13
1.5.5 Shell程序的退出状态 14
1.6 小结 15
第2章 Shell编程环境的搭建(教学视频:49分钟) 16
2.1 在不同的操作系统上搭建Shell编程环境 16
2.1.1 在Windows上搭建Shell编程环境 16
2.1.2 在Linux上搭建Shell编程环境 20
2.1.3 在FreeBSD上搭建Shell编程环境 22
2.2 编辑器的选择 23
2.2.1 图形化编辑器 23
2.2.2 vi(vim)编辑器 29
2.3 系统环境的搭建 36
2.3.1 Shell配置文件 36
2.3.2 命令别名 39
2.4 小结 39
第2篇 Shell编程基础 42
第3章 变量和引用(教学视频:62分钟) 42
3.1 深入认识变量 42
3.1.1 什么是变量 42
3.1.2 变量的命名 42
3.1.3 变量的类型 43
3.1.4 变量的定义 45
3.1.5 变量和引号 48
3.1.6 变量的作用域 48
3.1.7 系统变量 51
3.1.8 环境变量 53
3.2 变量赋值和清空 55
3.2.1 变量赋值 55
3.2.2 引用变量的值 55
3.2.3 清除变量 57
3.3 引用和替换 57
3.3.1 引用 58
3.3.2 全引用 58
3.3.3 部分引用 59
3.3.4 命令替换 59
3.3.5 转义 60
3.4 小结 60
第4章 条件测试和判断语句(教学视频:77分钟) 61
4.1 条件测试 61
4.1.1 条件测试的基本语法 61
4.1.2 字符串测试 62
4.1.3 整数测试 65
4.1.4 文件测试 67
4.1.5 逻辑操作符 70
4.2 条件判断语句 71
4.2.1 使用简单的if语句进行条件判断 72
4.2.2 使用ifelse语句进行流程控制 74
4.2.3 使用ifelif语句进行多条件判断 76
4.2.4 使用exit语句退出程序 78
4.3 多条件判断语句case 80
4.3.1 多条件判断语句case的基本语法 80
4.3.2 利用case语句处理选项参数 81
4.3.3 利用case语句处理用户输入 82
4.4 运算符 83
4.4.1 算术运算符 83
4.4.2 位运算符 87
4.4.3 自增/自减运算符 89
4.4.4 数字常量的进制 91
4.5 小结 92
第5章 循环结构(教学视频:61分钟) 93
5.1 步进循环语句for 93
5.1.1 带列表的for循环语句 93
5.1.2 不带列表的for循环语句 98
5.1.3 类C风格的for循环语句 99
5.1.4 使用for循环语句处理数组 100
5.2 until循环语句 101
5.2.1 until语句的基本语法 101
5.2.2 利用until语句批量增加用户 102
5.3 while循环语句 104
5.3.1 while语句的基本语法 104
5.3.2 通过计数器控制while循环结构 104
5.3.3 通过结束标记控制while循环结构 105
5.3.4 理解while语句与until语句的区别 106
5.4 嵌套循环 107
5.5 利用break和continue语句控制循环 108
5.5.1 利用break语句控制循环 108
5.5.2 利用continue语句控制循环 110
5.5.3 分析break语句和continue语句的区别 111
5.6 小结 114
第6章 函数(教学视频:60分钟) 115
6.1 函数 115
6.1.1 什么是函数 115
6.1.2 函数的定义 116
6.1.3 函数的调用 117
6.1.4 函数链接 118
6.1.5 函数的返回值 119
6.1.6 函数和别名 121
6.1.7 再议全局变量和局部变量 123
6.2 函数参数 125
6.2.1 含有参数的函数的调用方法 125
6.2.2 获取函数参数的个数 125
6.2.3 通过位置变量接收参数值 126
6.2.4 移动位置参数 127
6.2.5 通过getopts接收函数参数 128
6.2.6 间接参数传递 129
6.2.7 通过全局变量传递数据 130
6.2.8 传递数组参数 131
6.3 函数库文件 132
6.3.1 函数库文件的定义 132
6.3.2 函数库文件的调用 133
6.4 递归函数 134
6.5 小结 137
第7章 数组(教学视频:52分钟) 138
7.1 定义数组 138
7.1.1 通过指定元素值来定义数组 138
7.1.2 通过declare语句定义数组 139
7.1.3 通过元素值集合定义数组 140
7.1.4 通过键值对定义数组 141
7.1.5 数组和普通变量 142
7.2 数组的赋值 143
7.2.1 按索引为元素赋值 143
7.2.2 通过集合为数组赋值 144
7.2.3 在数组末尾追加新元素 145
7.2.4 通过循环为数组元素赋值 146
7.3 访问数组 146
7.3.1 访问第1个数组元素 146
7.3.2 通过下标访问数组元素 147
7.3.3 计算数组的长度 147
7.3.4 通过循环遍历数组元素 149
7.3.5 引用所有的数组元素 150
7.3.6 以切片方式获取部分数组元素 150
7.3.7 数组元素的替换 153
7.4 删除数组 154
7.4.1 删除指定数组元素 154
7.4.2 删除整个数组 155
7.5 数组的其他操作 155
7.5.1 复制数组 155
7.5.2 连接数组 156
7.5.3 加载文件内容到数组 157
7.6 小结 157
第8章 正则表达式(教学视频:57分钟) 158
8.1 什么是正则表达式 158
8.1.1 为什么使用正则表达式 158
8.1.2 如何学习正则表达式 159
8.1.3 如何实践正则表达式 160
8.2 正则表达式基础 160
8.2.1 正则表达式的原理 160
8.2.2 基本正则表达式 161
8.2.3 扩展正则表达式 166
8.2.4 Peri正则表达式 168
8.2.5 正则表达式字符集 169
8.3 正则表达式应用 170
8.3.1 匹配单个字符 170
8.3.2 匹配多个字符 173
8.3.3 匹配字符串的开头或者结尾 175
8.3.4 运算符优先级 176
8.3.5 子表达式 177
8.3.6 通配符 180
8.4 grep命令 181
8.4.1 grep命令的基本语法 181
8.4.2 grep命令族简介 182
8.5 小结 182
第9章 基本文本处理(教学视频:100分钟) 183
9.1 使用echo命令输出文本 183
9.1.1 显示普通字符串 183
9.1.2 显示转义字符 184
9.1.3 显示变量 186
9.1.4 换行和不换行 187
9.1.5 显示命令执行结果 188
9.1.6 echo命令执行结果的重定向 188
9.2 文本的格式化输出 189
9.2.1 使用UNIX制表符 189
9.2.2 使用fold命令格式化行 190
9.2.3 使用fmt命令格式化段落 192
9.2.4 使用rev命令反转字符顺序 194
9.2.5 使用pr命令格式化文本页 195
9.3 使用sort命令对文本排序 198
9.3.1 sort命令的基本用法 198
9.3.2 使用单个关键字排序 200
9.3.3 根据指定的列排序 203
9.3.4 根据关键字降序排序 204
9.3.5 数值列的排序 205
9.3.6 自定义列分隔符 206
9.3.7 删除重复的行 207
9.3.8 根据多个关键字排序 208
9.3.9 使用sort命令合并文件 209
9.4 文本的统计 211
9.4.1 输出含有行号的文本行 211
9.4.2 统计行数 213
9.4.3 统计单词数和字符数 215
9.5 使用cut命令选取文本列 215
9.5.1 cut命令及其语法 216
9.5.2 选择指定的文本列 217
9.5.3 选择指定数量的字符 218
9.5.4 排除不包含列分隔符的行 219
9.6 使用paste命令拼接文本列 220
9.6.1 paste命令及其语法 220
9.6.2 自定义列分隔符 222
9.6.3 拼接指定的文本列 222
9.7 使用join命令联接文本列 223
9.7.1 join命令及其语法 224
9.7.2 指定联接关键字列 225
9.7.3 内联接文本文件 226
9.7.4 左联接文本文件 226
9.7.5 右联接文本文件 227
9.7.6 全联接文本文件 228
9.7.7 自定义输出列 229
9.8 使用tr命令替换文件内容 229
9.8.1 tr命令及其语法 229
9.8.2 去除重复出现的字符 230
9.8.3 删除空行 231
9.8.4 大小写转换 232
9.8.5 删除指定字符 232
9.9 小结 234
第10章 流编辑(教学视频:52分钟) 235
10.1 sed命令及其语法 235
10.1.1 sed命令以及语法 235
10.1.2 sed命令的工作方式 237
10.1.3 使用行号定位文本行 237
10.1.4 使用正则表达式定位文本行 238
10.2 sed命令的常用操作 239
10.2.1 sed编辑命令基本语法 239
10.2.2 选择文本 240
10.2.3 替换文本 242
10.2.4 删除文本 246
10.2.5 追加文本 248
10.2.6 插入文本 249
10.3 组合命令 250
10.3.1 使用-e选项执行多个子命令 250
10.3.2 使用分号执行多个子命令 251
10.3.3 对一个地址使用多个子命令 251
10.3.4 sed脚本文件 253
10.4 小结 255
第11章 文本处理利器awk命令(教学视频:78分钟) 256
11.1 awk入门 256
11.1.1 awk的功能 256
11.1.2 awk命令的基本语法 257
11.1.3 awk的工作流程 258
11.1.4 执行awk程序的几种方式 258
11.2 awk的模式匹配 260
11.2.1 关系表达式 260
11.2.2 正则表达式 261
11.2.3 混合模式 262
11.2.4 区间模式 262
11.2.5 BEGIN模式 263
11.2.6 END模式 264
11.3 变量 265
11.3.1 变量的定义和引用 265
11.3.2 系统内置变量 266
11.3.3 记录分隔符和字段分隔符 267
11.3.4 记录和字段的引用 269
11.4 运算符和表达式 270
11.4.1 算术运算符 270
11.4.2 赋值运算符 271
11.4.3 条件运算符 272
11.4.4 逻辑运算符 273
11.4.5 关系运算符 274
11.4.6 其他运算符 275
11.5 函数 275
11.5.1 字符串函数 275
11.5.2 算术函数 279
11.6 数组 279
11.6.1 数组的定义和赋值 279
11.6.2 遍历数组 281
11.7 流程控制 283
11.7.1 if语句 283
11.7.2 while语句 284
11.7.3 do...while语句 285
11.7.4 for语句 286
11.7.5 break语句 287
11.7.6 continue语句 288
11.7.7 next语句 288
11.7.8 exit语句 289
11.8 awk程序的格式化输出 290
11.8.1 基本print语句 290
11.8.2 格式化输出printf语句 290
11.8.3 使用sprintf()函数生成格式化字符串 291
11.9 awk的程序与Shell的交互 292
11.9.1 通过管道实现与Shell的交换 292
11.9.2 通过system函数实现与Shell的交互 293
11.10 小结 293
第12章 文件的操作(教学视频:74分钟) 294
12.1 文件 294
12.1.1 列出文件 294
12.1.2 文件类型 296
12.1.3 文件的权限 298
12.2 查找文件 299
12.2.1 find命令以及语法 299
12.2.2 find命令:路径 300
12.2.3 find命令:测试 301
12.2.4 find命令:使用!运算符对测试求反 304
12.2.5 find命令:处理文件权限错误信息 305
12.2.6 find命令:动作 305
12.3 比较文件 307
12.3.1 使用comm比较文件 307
12.3.2 使用diff比较文件 310
12.4 文件描述符 314
12.4.1 什么是文件描述符 314
12.4.2 标准输入、标准输出和标准错误 314
12.5 重定向 315
12.5.1 输出重定向(覆盖) 315
12.5.2 输出重定向(追加) 317
12.5.3 输入重定向 318
12.5.4 当前文档 319
12.5.5 重定向两个文件描述符 319
12.5.6 使用exec命令分配文件描述符 320
12.6 小结 322
第13章 子Shell与进程处理(教学视频:49分钟) 323
13.1 子Shell 323
13.1.1 什么是子Shell 323
13.1.2 内部命令、保留字和外部命令 324
13.1.3 在子Shell中执行命令 327
13.1.4 把子Shell中的变量值传回父Shell 331
13.2 进程处理 333
13.2.1 什么是进程 334
13.2.2 通过脚本监控进程 334
13.2.3 作业控制 335
13.2.4 信号与trap命令 338
13.3 小结 340
第3篇 Shell编程实战 342
第14章 Shell脚本调试技术(教学视频:33分钟) 342
14.1 Shell脚本中的常见错误 342
14.1.1 常见语法错误 342
14.1.2 常见逻辑错误 345
14.2 Shell脚本调试技术 346
14.2.1 使用echo命令调试脚本 346
14.2.2 使用trap命令调试Shell脚本 347
14.2.3 使用tee命令调试Shell脚本 349
14.2.4 使用调试钩子调试Shell脚本 351
14.3 小结 352
第15章 利用Shell脚本解决实际问题(教学视频:33分钟) 353
15.1 编写系统服务脚本 353
15.1.1 系统启动过程 353
15.1.2 运行级别 354
15.1.3 服务脚本的基本语法 355
15.1.4 编写MySQL服务脚本 357
15.2 通过脚本管理Apache服务器日志 364
15.2.1 Apache以及日志文件简介 364
15.2.2 备份归档文件名生成函数 365
15.2.3 过期日志备份归档函数 366
15.2.4 过期日志删除函数 368
15.2.5 日志归档主程序 368
15.2.6 定时运行日志归档脚本 369
15.3 小结 373