第1篇 Linux Shell基础和使用 2
第1章 Linux及Linux Shell简介 2
1.1 关于Linux 2
1.1.1 什么是Linux 2
1.1.2 谁创建了Linux 3
1.1.3 Linux在日常生活中的使用 3
1.1.4 Linux Kernel是什么 3
1.1.5 Linux的理念 4
1.2 什么是Linux Shell 4
1.3 Shell的种类 5
1.4 怎样使用Shell 6
1.5 Shell脚本是什么 7
1.6 为什么使用Shell脚本 8
1.7 实例:创建你的第一个Shell脚本 8
1.8 小结 9
第2章 初识Linux Shell 10
2.1 Bash Shell 10
2.1.1 Bash简介 10
2.1.2 Bash提供的改进 10
2.2 Shell在Linux环境中的角色 11
2.2.1 与登录Shell相关的文件 11
2.2.2 Bash启动脚本 11
2.2.3 实例:定制自己的Bash登录脚本 12
2.2.4 Bash退出脚本 14
2.2.5 实例:定制自己的Bash退出脚本 14
2.2.6 有效的登录Shell的路径 15
2.3 Shell中的变量 15
2.3.1 Shell中变量的类型 15
2.3.2 实例:如何定义变量和给变量赋值 17
2.3.3 变量命名规则 19
2.3.4 实例:使用echo和printf打印变量的值 19
2.3.5 变量的引用 22
2.3.6 实例:export语句的使用 23
2.3.7 实例:如何删除变量 25
2.3.8 实例:如何检查变量是否存在 25
2.4 Shell环境进阶 26
2.4.1 实例:回调命令历史 26
2.4.2 实例:Shell中的扩展 27
2.4.3 实例:创建和使用别名 30
2.4.4 实例:修改Bash提示符 31
2.4.5 实例:设置Shell选项 34
2.5 小结 37
第3章 常用Shell(Bash)命令 38
3.1 查看文件和目录 38
3.1.1 Is命令实例:列出文件名和目录 38
3.1.2 cat命令实例:连接显示文件内容 42
3.1.3 less、more命令实例:分屏显示文件 43
3.1.4 head命令实例:显示文件头部 46
3.1.5 tail 命令实例:显示文件尾部 47
3.1.6 file命令实例:查看文件类型 48
3.1.7 wc命令实例:查看文件统计信息 50
3.1.8 find命令实例:查找文件或目录 50
3.2 操作文件和目录 52
3.2.1 touch命令实例:创建文件 52
3.2.2 mkdir命令实例:创建目录 53
3.2.3 cp命令实例:复制文件或目录 54
3.2.4 In命令实例:链接文件或目录 55
3.2.5 mv命令实例:重命名文件或目录 56
3.2.6 rm命令实例:删除文件或目录 57
3.3 管理文件或目录权限 58
3.3.1 ls-1:显示文件和目录权限 58
3.3.2 chmod命令实例:修改权限 59
3.3.3 chown、chgrp 命令实例:修改文件所有者和用户组 61
3.3.4 设置setuid和setgid权限位实例:设置用户和组权限位 63
3.4 文本处理 65
3.4.1 sort命令实例:文本排序 65
3.4.2 uniq命令实例:文本去重 67
3.4.3 tr命令实例:替换或删除字符 68
3.4.4 grep命令实例:查找字符串 70
3.4.5 diff命令实例:比较两个文件 71
3.5 其他常用命令 73
3.5.1 hostname命令实例:查看主机名 73
3.5.2 w、who命令实例:列出系统登录的用户 74
3.5.3 uptime命令实例:查看系统运行时间 75
3.5.4 uname命令实例:查看系统信息 75
3.5.5 date命令实例:显示和设置系统日期和时间 76
3.5.6 id命令实例:显示用户属性 78
3.6 小结 79
第4章 Shell命令进阶 81
4.1 文件处理和归档 81
4.1.1 paster命令实例:合并文件 81
4.1.2 dd命令实例:备份和拷贝文件 83
4.1.3 gzip、bzip2命令实例:压缩和归档文件 84
4.1.4 gunzip、bunzip2命令实例:解压缩文件 85
4.1.5 tar命令实例:打包和解包文件 85
4.2 监测和管理磁盘 87
4.2.1 mount、umount命令实例:挂载和卸载存储介质 87
4.2.2 df命令实例:报告文件系统磁盘空间利用率 90
4.2.3 du命令实例:评估文件空间利用率 91
4.3 后台执行命令 92
4.3.1 cron、crontab命令实例:执行计划任务 92
4.3.2 at命令实例:在指定时间执行命令 94
4.3.3 &控制操作符实例:将任务放在后台运行 95
4.3.4 nohup命令实例:运行一个对挂起免疫的命令 96
4.4 小结 97
第2篇 Shell脚本编程 100
第5章 Shell编程基础 100
5.1 Shell脚本的第一行“#!”(Shebang) 100
5.2 Shell中的注释 100
5.3 实例:如何设置脚本的权限和执行脚本 101
5.4 Shell变量进阶 102
5.4.1 Bash中的参数扩展 102
5.4.2 Bash的内部变量 106
5.4.3 Bash中的位置参数和特殊参数 109
5.4.4 实例:使用declare指定变量的类型 112
5.4.5 Bash中的数组变量 114
5.5 Shell算术运算 115
5.5.1 Bash的算术运算符 115
5.5.2 数字常量 117
5.5.3 使用算术扩展和let进行算术运算 118
5.5.4 实例:使用expr命令 119
5.6 退出脚本 120
5.6.1 退出状态码 120
5.6.2 实例:使用exit命令 121
5.7 实例:调试脚本 122
5.8 Shell脚本编程风格 125
5.9 小结 126
第6章 Shell的条件执行 128
6.1 条件测试 128
6.1.1 实例:使用test命令 128
6.1.2 if结构的语法格式 133
6.1.3 实例:if...else...fi语句 135
6.1.4 实例:嵌套的if/else语句 136
6.1.5 实例:多级的if...elif..else...fi 137
6.2 条件执行 139
6.2.1 实例:逻辑与“&&” 139
6.2.2 实例:逻辑或“‖” 144
6.2.3 实例:逻辑非“!” 147
6.3 case语句实例 148
6.4 小结 151
第7章 Bash循环 152
7.1 for循环 152
7.1.1 for循环语法 152
7.1.2 实例:嵌套for循环语句 156
7.2 while循环 157
7.2.1 while循环语法 157
7.2.2 实例:定义无限while循环 160
7.3 until循环语句实例 162
7.4 select循环语句实例 163
7.5 循环控制 165
7.5.1 实例:break语句 165
7.5.2 实例:continue语句 167
7.6 小结 168
第8章 Shell函数 170
8.1 函数的定义 170
8.2 函数的参数、变量与返回值 171
8.2.1 实例:向函数传递参数 171
8.2.2 本地变量 173
8.2.3 实例:使用return命令 175
8.2.4 实例:函数返回值测试 176
8.3 函数的调用 176
8.3.1 实例:在Shell命令行调用函数 176
8.3.2 实例:在脚本中调用函数 177
8.3.3 实例:从函数文件中调用函数 178
8.3.4 实例:递归函数调用 181
8.4 实例:将函数放在后台运行 182
8.5 小结 184
第9章 正则表达式 185
9.1 什么是正则表达式 185
9.1.1 定义 185
9.1.2 正则表达式类型 185
9.1.3 POSIX字符类 186
9.1.4 Bash正则表达式比较操作符 187
9.2 正则应用基础 189
9.2.1 实例:使用句点.匹配单字符 189
9.2.2 实例:使用插入符号∧匹配 190
9.2.3 实例:使用美元符$匹配 190
9.2.4 实例:使用星号*匹配 190
9.2.5 实例:使用方括号[]匹配 191
9.2.6 实例:使用问号?匹配 191
9.2.7 实例:使用加号+匹配 191
9.3 小结 192
第10章 脚本输入处理 193
10.1 参数处理 193
10.1.1 实例:使用case语句处理命令行参数 193
10.1.2 实例:使用shift命令处理命令行参数 198
10.1.3 实例:使用for循环读取多个参数 201
10.1.4 实例:读取脚本名 203
10.1.5 实例:测试命令行参数 204
10.2 选项处理 206
10.2.1 实例:使用case语句处理命令行选项 207
10.2.2 实例:使用getopts处理多命令行选项 209
10.2.3 实例:使用getopt处理多命令行选项 214
10.3 获得用户输入 221
10.3.1 实例:基本的读取 221
10.3.2 实例:输入超时 222
10.3.3 实例:隐藏方式读取 223
10.3.4 实例:从文件中读取 224
10.4 小结 227
第11章 Shell重定向 230
11.1 输入和输出 230
11.1.1 标准输入 230
11.1.2 标准输出 232
11.1.3 标准错误 233
11.2 重定向 233
11.2.1 文件重定向 234
11.2.2 实例:从文件输入 236
11.2.3 实例:从文本或字符串输入 241
11.2.4 实例:空文件创建 244
11.2.5 实例:/dev/null丢弃不需要的输出 245
11.2.6 实例:标准错误重定向 246
11.2.7 实例:标准输出重定向 246
11.2.8 实例:标准错误和标准输出同时重定向 247
11.2.9 实例:追加重定向输出 247
11.2.10 实例:在单命令行进行标准输入输出重定向 247
11.3 文件描述符 249
11.3.1 实例:使用exec命令 249
11.3.2 实例:指定用于输入的文件描述符 251
11.3.3 实例:指定用于输出的文件描述符 254
11.3.4 实例:关闭文件描述符 260
11.3.5 实例:打开用于读和写的文件描述符 261
11.3.6 实例:在同一脚本中使用exec进行输入和输出重定向 261
11.4 小结 264
第12章 管道和过滤器 266
12.1 管道 266
12.1.1 操作符“|”和“>”之间的区别 266
12.1.2 为什么使用管道 267
12.1.3 实例:使用管道连接程序 267
12.1.4 实例:管道中的输入重定向 269
12.1.5 实例:管道中的输出重定向 270
12.2 过滤器 271
12.2.1 实例:在管道中使用awk命令 272
12.2.2 实例:在管道中使用cut命令 273
12.2.3 实例:在管道中使用grep命令 274
12.2.4 实例:在管道中使用tar命令 275
12.2.5 实例:在管道中使用head命令 275
12.2.6 实例:在管道中使用paste命令 276
12.2.7 实例:在管道中使用sed命令 277
12.2.8 实例:在管道中使用sort命令 278
12.2.9 实例:在管道中使用split命令 278
12.2.10 实例:在管道中使用strings命令 279
12.2.11 实例:在管道中使用tail命令 279
12.2.12 实例:在管道中使用tee命令 280
12.2.13 实例:在管道中使用tr命令 282
12.2.14 实例:在管道中使用uniq命令 282
12.2.15 实例:在管道中使用wc命令 283
12.3 小结 283
第13章 捕获 284
13.1 信号 284
13.1.1 Linux中的信号 284
13.1.2 信号的名称和值 285
13.1.3 Bash中的信号 287
13.2 进程 288
13.2.1 什么是进程 288
13.2.2 前台进程和后台进程 289
13.2.3 进程的状态 290
13.2.4 实例:怎样查看进程 290
13.2.5 实例:向进程发送信号 294
13.2.6 关于子Shell 296
13.3 捕获 300
13.3.1 trap语句 300
13.3.2 实例:使用 trap语句捕获信号 303
13.3.3 实例:移除捕获 308
13.4 小结 309
第14章 sed和awk 311
14.1 sed编辑器基础 311
14.1.1 sed简介 311
14.1.2 sed的模式空间 312
14.2 基本的sed编辑命令 313
14.2.1 追加、更改、插入编辑命令 314
14.2.2 删除编辑命令 316
14.2.3 替换编辑命令 316
14.2.4 打印编辑命令 319
14.2.5 打印行号编辑命令 319
14.2.6 读取下一行编辑命令 320
14.2.7 读和写文件编辑命令 321
14.2.8 退出编辑命令 325
14.3 sed命令实例 326
14.3.1 实例:向文件中添加或插入行 326
14.3.2 实例:更改文件中指定的行 328
14.3.3 实例:删除文件中的行 328
14.3.4 实例:替换文件中的内容 331
14.3.5 实例:打印文件中的行 333
14.3.6 实例:打印文件中的 行号 336
14.3.7 实例:从文件中读取和向文件中写入 336
14.4 scd与 Shell 340
14.4.1 实例:在sed中使用Shell变量 340
14.4.2 实例:从sed输出中设置Shell变量 347
14.5 awk基础 348
14.5.1 awk简介 348
14.5.2 awk基本语法 349
14.5.3 第个awk命令 350
14.5.4 使用awk打印指定的列 351
14.5.5 从awk程序文件读取awk指令 351
14.5.6 awk的BEGIN和END块 352
14.5.7 awk中使用正则表达式 352
14.5.8 awk的表达式和块 353
14.5.9 awk的条件语句 354
14.5.10 awk中的变量和操作符 354
14.5.11 awk中的特殊变量 355
14.5.12 awk中的循环结构 356
14.5.13 awk中的数组 358
14.6 awk与Shell 359
14.6.1 实例:在awk中使用Shell变量 359
14.6.2 实例:从awk命令的输出中设置Shell变量 360
14.7 awk命令实例 362
14.7.1 实例:使用awk编写字符统计工具 362
14.7.2 实例:使用awk程序统计文件的总列数 364
14.7.3 实例:使用awk自定义显示文件的属性信息 365
14.7.4 实例:使用awk显示ASCII字符 366
14.7.5 实例:使用awk来获取进程号 369
14.8 小结 371
第15章 其他Linux Shell种类介绍 374
15.1 C Shell 374
15.1.1 csh简介 374
15.1.2 csh的特性 375
15.1.3 csh的内部变量 376
15.1.4 csh的内部命令 376
15.1.5 tcsh在csh基础上的新特性 381
15.2 Korn Shell 389
15.2.1 ksh简介 389
15.2.2 ksh的特性 390
15.2.3 ksh的内部变量 395
15.2.4 ksh的内部命令 397
15.2.5 增强的ksh-ksh93 404
15.3 小结 408