第1章 Shell脚本编程概述 1
1.1 Linux和Shell概述 2
1.1.1 Linux简介 2
1.1.2 Shell简介 5
1.1.3 Shell的种类和版本 7
1.2 Shell脚本编程的优势 7
1.3 第一个Shell脚本例子 8
1.3.1 Shell脚本的基本元素 8
1.3.2 执行Shell脚本 10
1.4 本章小结 11
第2章 Linux文件系统和文本编辑器 12
2.1 用户和用户组管理 13
2.1.1 用户管理常用命令 13
2.1.2 用户组管理常用命令 17
2.2 文件和目录操作 19
2.2.1 文件操作常用命令 20
2.2.2 目录操作常用命令 25
2.2.3 文件和目录权限管理 28
2.2.4 查找文件命令——find 32
2.3 文本编辑器 34
2.3.1 vim编辑器 34
2.3.2 Gedit编辑器 40
2.4 本章小结 41
2.5 上机提议 41
第3章 正则表达式 43
3.1 正则表达式基础 44
3.2 正则表达式的扩展 47
3.3 通配 48
3.4 grep命令 50
3.4.1 grep命令基本用法 51
3.4.2 grep和正则表达式结合使用的一组例子 57
3.4.3 grep命令族简介 61
3.5 本章小结 62
3.6 上机提议 63
第4章 sed命令和awk编程 64
4.1 sed命令基本用法 65
42 sed命令的一组示例 67
4.2.1 sed命令选项的一组例子 67
4.2.2 sed文本定位的一组例子 70
4.2.3 sed基本编辑命令的一组例子 72
4.2.4 sed高级编辑命令的一组例子 80
4.3 awk编程 83
4.3.1 awk编程模型 84
4.3.2 awk调用方法 85
4.4 awk编程的一组例子 85
4.4.1 awk模式匹配 85
4.4.2 记录和域 86
4.4.3 关系和布尔运算符 89
4.4.4 表达式 91
4.4.5 系统变量 92
4.4.6 格式化输出 94
4.4.7 内置字符串函数 95
4.4.8 向 awk脚本传递参数 97
4.4.9 条件语句和循环语句 99
4.4.1 0数组 99
8.8 上机提议 215
第9章 变量的高级用法 217
9.1 内部变量 218
9.2 字符串处理 226
9.3 有类型变量 232
9.4 间接变量引用 235
9.5 bash数学运算 237
9.5.1 expr命令 238
9.5.2 bc运算器 239
9.6 本章小结 241
9.7 上机提议 241
第10章 I/O重定向 243
10.1 管道 244
10.1.1 管道简介 244
10.1.2 cat和more命令 245
10.1.3 sed命令与管道 249
10.1.4 awk命令与管道 250
10.2 I/O重定向 253
10.2.1 文件标识符 253
10.2.2 I/O重定向符号及其用法 255
10.2.3 exec命令的用法 259
10.2.4 代码块重定向 262
10.3 命令行处理 265
10.3.1 命令行处理流程 266
10.3.2 eval命令 268
10.4 本章小结 271
10.5 上机提议 271
第11章 Linux/UNIX Shell类型与区别 273
11.1 Linux/UNIX Shell起源与分类 274
11.2 dash简介 275
11.3 tcsh简介 277
11.4 Korn Shell简介 282
11.5 本章小结 287
第12章 子Shell与进程处理 288
12.1 子Shell 289
12.1.1 内建命令 289
12.1.2 圆括号结构 292
12.2 Shell的限制模式 297
12.3 进程处理 299
12.3.1 进程和作业 301
12.3.2 作业控制 302
12.3.3 信号 307
12.3.4 trap命令 309
12.4 本章小结 312
12.5 上机提议 312
第13章 函数 314
13.1 函数的定义和基本知识 315
13.2 向函数传递参数 318
13.3 函数返回值 321
13.4 函数调用 322
13.4.1 脚本放置多个函数 322
13.4.2 函数相互调用 324
13.4.3 一个函数调用多个函数 325
13.5 局部变量和全局变量 327
13.6 函数递归 328
13.6.1 使用局部变量的递归 329
13.6.2 不使用局部变量的递归 330
13.7 本章小结 332
13.8 上机提议 333
第14章 别名、列表及数组 335
14.1 别名 336
14.2 列表 339
14.3 数组 342
14.3.1 数组的基本用法 342
14.3.2 数组的特殊用法 346
14.3.3 用数组实现简单的数据结构 350
14.4 本章小结 356
14.5 上机提议 356
第15章 一些混杂的主题 359
15.1 脚本编写风格 360
15.1.1 缩进 360
15.1.2 {}的格式 362
15.1.3 空格和空行的用法 362
15.1.4 判断和循环的编程风格 363
15.1.5 命名规范 364
15.1.6 注释风格 365
15.2 脚本优化 366
15.2.1 简化脚本 366
15.2.2 保持脚本的灵活性 368
15.2.3 给用户足够的提示 369
15.3 Linux中的特殊命令 371
15.3.1 shift命令 371
15.3.2 getopts命令 374
15.4 交互式和非交互式Shell脚本 376
15.4.1 非交互式Shell脚本 376
15.4.2 交互式Shell脚本 378
15.5 /dev文件系统 379
15.5.1 /dev文件系统基础知识 380
15.5.2 /dev/zero伪设备 381
15.5.3 /dev/null伪设备 383
15.6 /proc文件系统 384
15.6.1 使/proc/sys优化系统参数 386
15.6.2 查看运行中的进程信息 387
15.6.3 查看文件系统信息 388
15.6.4 查看网络信息 389
15.7 Shell包装 390
15.8 带颜色的脚本 392
15.9 Linux脚本安全 398
15.9.1 使用shc工具加密Shell脚本 398
15.9.2 Linux Shell脚本编写的病毒 399
15.9.3 Linux Shell中的木马 400
15.1 0本章小结 401
15.1 1 上机提议 401
第16章 Shell脚本调试技术 403
16.1 Shell脚本调试概述 404
16.2 Shell脚本调试技术 406
16.2.1 使用trap命令 406
16.2.2 使用tee命令 409
16.2.3 调试钩子 411
16.2.4 使用Shell选项 412
16.3 本章小结 417
16.4 上机提议 417
第17章 bash Shell编程范例 420
17.1 将文本文件转化为HTML文件 421
17.2 查找文本中n个出现频率最高的单词 425
17.3 伪随机数的产生和应用 427
17.4 crontab的设置和应用 431
17.5 使用MySQL数据库 434
17.5.1 MySQL基础 434
17.5.2 Shell脚本使用MySQL 437
17.6 Linux服务器性能监控系统 442
17.6.1 Ganglia简介及安装 443
17.6.2 提取服务器性能参数名称及数据 448
17.6.3 动态更新服务器监控数据 455
17.7 本章小结 457
17.8 上机提议 457
附录 459
附录A POSIX标准简介 460
附录B 常用ASCⅡ码对照表 461
附录C Linux信号及其意义 466
附录D bash内建变量索引 467
附录E bash内建命令索引 469
参考文献 472