第1章 基础概述 1
1.1基础命令 1
1.1.1显示日期和时间:date命令 1
1.1.2找出已登录人员:who命令 1
1.1.3回显字符:echo命令 2
1.2使用文件 2
1.2.1列举文件:Is命令 3
1.2.2显示文件内容:cat命令 3
1.2.3统计文件中单词数量:we命令 3
1.2.4命令选项 3
1.2.5复制文件:cp命令 4
1.2.6文件重命名:mv命令 4
1.2.7删除文件:rm命令 5
1.3使用目录 5
1.3.1主目录和路径名 6
1.3.2显示工作目录:pwd命令 7
1.3.3更改目录:cd命令 7
1.3.4 Is命令的更多用法 10
1.3.5创建目录:mkdir命令 12
1.3.6在目录之间复制文件 12
1.3.7在目录间移动文件 13
1.3.8文件链接:In命令 14
1.3.9删除目录:rmdir命令 17
1.4文件名替换 18
1.4.1星号 18
1.4.2匹配单个字符 20
1.5文件名中不易察觉的部分 21
1.5.1文件名中的空格 21
1.5.2其他怪异的字符 22
1.6标准输入/输出和I/O重定向 22
1.6.1标准输入和标准输出 22
1.6.2输出重定向 24
1.6.3输入重定向 26
1.7管道 27
1.8标准错误 29
1.9命令后话 29
1.9.1在一行中输入多个命令 29
1.9.2向后台发送命令 30
1.9.3 ps命令 30
1.10命令总结 31
第2章 什么是Shell 33
2.1内核和实用工具 33
2.2登录Shell 34
2.3在Shell中输入命令 37
2.4 Shell的职责 38
2.4.1程序执行 39
2.4.2变量及文件名替换 40
2.4.3 1/O重定向 41
2.4.4管道 42
2.4.5环境控制 42
2.4.6解释型编程语言 43
第3章 常备工具 44
3.1正则表达式 44
3.1.1匹配任意字符:点号(.) 44
3.1.2匹配行首:脱字符(∧) 46
3.1.3匹配行尾:美元符号($) 46
3.1.4匹配字符组:[…] 47
3.1.5匹配零个或多个字符:星号(*) 50
3.1.6匹配固定次数的子模式:\{…\} 52
3.1.7保存已匹配的字符:\(…\) 54
3.2 cut 57
3.3 paste 61
3.3.1 -d选项 62
3.3.2 -s选项 62
3.4 sed 63
3.4.1 -n选项 64
3.4.2删除行 65
3.5 tr 66
3.5.1 -s选项 69
3.5.2 -d选项 69
3.6 grep 70
3.6.1正则表达式与grep 73
3.6.2 -v选项 74
3.6.3 -I选项 74
3.6.4 -n选项 75
3.7 sort 76
3.7.1 -u选项 76
3.7.2 -r选项 77
3.7.3-o选项 77
3.7.4 -n选项 78
3.7.5跳过某些字段 78
3.7.6 -t选项 79
3.7.7其他选项 80
3.8 uniq 80
3.8.1 -d选项 81
3.8.2其他选项 82
第4章 脚本与变量 83
4.1命令文件 83
4.2变量 86
4.2.1显示变量值 87
4.2.2未定义变量的值为空 89
4.2.3文件名替换与变量 91
4.2.4 $ { variable}结构 92
4.3内建的整数算术操作 92
第5章 引用 95
5.1单引号 95
5.2双引号 98
5.3反斜线 101
5.3.1使用反斜线续行 102
5.3.2双引号中的反斜线 102
5.4命令替换 103
5.4.1反引号 104
5.4.2$(…)结构 104
5.5 expr命令 108
第6章 传递参数 111
6.1变量$# 112
6.2变量$ 113
6.3在电话簿中查找联系人 113
6.4向电话簿中添加联系人 115
6.5从电话簿中删除联系人 116
6.6 shift命令 118
第7章 条件语句 120
7.1退出状态 120
7.2变量$? 121
7.3 test命令 124
7.3.1字符串操作符 124
7.3.2 test的另一种格式 128
7.3.3整数操作符 129
7.3.4文件操作符 130
7.3.5逻辑否定操作符! 131
7.3.6逻辑“与”操作符-a 131
7.3.7括号 132
7.3.8逻辑“或”操作符-o 132
7.4 else 133
7.5 exit命令 135
7.6 elif 137
7.7 case命令 141
7.7.1特殊的模式匹配字符 142
7.7.2调试选项-x 144
7.7.3再谈case 147
7.8空命令: 148
7.9&&和∥ 149
第8章 循环 151
8.1 for命令 151
8.1.1$@变量 154
8.1.2不使用列表的for命令 155
8.2 while命令 156
8.3 until命令 158
8.4再谈循环 162
8.4.1 跳出循环 162
8.4.2跳过循环中余下的命令 163
8.4.3在后台执行循环 164
8.4.4循环上的1/O重定向 165
8.4.5将数据导入及导出循环 166
8.4.6单行循环 166
8.5 getopts命令 167
第9章 数据的读取及打印 171
9.1 read命令 171
9.1.1文件复制程序 171
9.1.2特殊的echo转义字符 173
9.1.3 mycp的改进版本 174
9.1.4 mycp的最终版本 175
9.1.5菜单驱动的电话簿程序 179
9.1.6变量$$与临时文件 183
9.1.7 read的退出状态 184
9.2 printf命令 187
第10章 环境 192
10.1局部变量 192
10.2导出变量 194
10.3 PS1和PS2 198
10.4 HOME 199
10.5 PATH 199
10.6当前目录 206
10.7再谈子Shell 208
10.7.1.命令 209
10.7.2 exec命令 212
10.7.3(…)和{…;} 212
10.7.4另一种将变量传给子Shell的方法 215
10.8 profile文件 216
10.9 TERM变量 217
10.10 TZ变量 218
第11章 再谈参数 219
11.1参数替换 219
11.1.1${Parameter} 219
11.1.2 ${ parameter: -value} 220
11.1.3 ${ arameter:=value} 220
11.1.4${parameter: ?value} 221
11.1.5 ${parameter: +value} 222
11.1.6模式匹配 222
11.1.7${#variable} 224
11.2 $0变量 224
11.3 set命令 225
11.3.1 -x选项 225
11.3.2无参数的set 226
11.3.3使用set为位置参数重新赋值 227
11.3.4__选项 228
11.3.5 set的其他选项 230
11.4 IFS变量 230
11.5 readonly命令 233
11.6 unset命令 234
第12章 拓展内容 235
12.1 eval命令 235
12.2 wait命令 237
12.3$!变量 237
12.4 trap命令 238
12.4.1不使用参数的trap 239
12.4.2忽略信号 240
12.4.3重置信号 240
12.5再谈I/O 241
12.5.1〈&-与〉&- 242
12.5.2行内输入重定向 242
12.5.3 Shell归档文件 244
12.6函数 247
12.6.1删除函数 250
12.6.2 return命令 250
12.7 type命令 250
第13章 再谈rolo 251
13.1数据格式化考量 251
13.2 rolo 252
13.3 add 254
13.4 1u 255
13.5 display 256
13.6 rem 257
13.7 change 259
13.8 listall 260
13.9样例输出 261
第14章 交互式与非标准Shell特性 265
14.1使用正确的Shell 265
14.2 ENV文件 266
14.3命令行编辑 267
14.4命令历史 267
14.5 vi行编辑模式 268
14.6 emacs行编辑模式 272
14.7访问历史记录的其他方法 275
14.7.1 history命令 275
14.7.2 fc命令 276
14.7.3 r命令 277
14.8函数 278
14.8.1局部变量 278
14.8.2自动载入函数 278
14.9整数算术 278
14.9.1整数类型 279
14.9.2不同基数的数字 280
14.10 alias命令 282
14.11数组 284
14.12作业控制 289
14.13其他特性 292
14.13.1 cd命令的其他特性 292
14.13.2波浪符替换 292
14.13.3搜索次序 293
14.14兼容性总结 294
附录A Shell总结 295
附录B更多的相关信息 329