第1章 设置 1
实践1.1 运行最近的KornShell 2
实践1.3 答案 2
实践1.1 练习 3
1.1.1 在Linux和其他的UNIX操作系统上设置KornShell 3
1.1.2 在MS Windows系统上设置KornShell 4
实践1.1 答案 5
1.1.1 答案 5
1.1.2 答案 5
实践1.1 自测题 6
1.2.1 为程序建立目录 7
实践1.2 设置交互式环境 7
实践1.2 练习 7
实践1.2 设置Profile和环境文件 7
1.2.2 设置Profile和环境文件 8
实践1.2 答案 10
1.2.1 答案 10
1.2.2 答案 11
实践1.2 自测题 15
1.3.1 定义并运行脚本 17
实践1.3 编辑并运行脚本和函数 17
实践1.3 练习 17
1.3.2 用点(.)执行脚本 18
1.3.3 定义并运行函数 19
1.3.1 答案 22
1.3.2 答案 24
1.3.3 答案 25
实践1.3 自测题 29
第1章 思考题 29
第2章 命令语法 30
实践2.1 命令构成 31
实践2.1 命令语法 31
实践2.1 练习 32
2.1.1 识别命令名称 32
2.1.2 识别参数 33
2.1.3 为程序语法提供文档 33
2.1.1 答案 34
实践2.1 答案 34
2.1.2 答案 35
2.1.3 答案 36
实践2.1 自测题 37
实践2.2 命令类型 39
实践2.2 内部命令 39
实践2.2 练习 41
2.2.1 列出全部内部的命令 41
2.2.3 执行外部命令 42
2.2.2 使用两个内部工具:print和@whence 42
2.2.4 定义别名 43
2.2.5 编写并行动简单的函数 44
实践2.2 答案 45
2.2.1 答案 45
2.2.2 答案 47
2.2.3 答案 48
2.2.4 答案 48
2.2.5 答案 50
实践2.2 自测题 51
实践2.3 重定向标准输入输出 53
实践2.3 练习 53
2.3.1 重定向stdin和stdout(“<”和“>”) 53
2.3.2 连续重定向控制(>>和>1) 55
2.3.3 重定向stderr(2>) 56
2.3.4 用于重定向文件描述符的连接符号 57
2.3.5 用于stdin(<<)的内嵌文档 58
2.3.1 答案 59
实践2.3 答案 59
2.3.2 答案 63
2.3.3 答案 65
2.3.4 答案 67
2.3.5 答案 68
实践2.3 自测题 69
第2章 思考题 70
第3章 复合命令的语法 72
3.1.1 顺序执行(;) 73
实践3.1 命令序列 73
实践3.1 练习 73
3.1.2 并行执行( ) 74
3.1.3 管道(│) 75
3.1.4 条件命令 和│ 77
3.1.5 协作进程(│ ) 78
实践3.1 答案 79
3.1.1 答案 79
3.1.2 答案 81
3.1.3 答案 84
3.1.4 答案 88
3.1.5 答案 89
实践3.1 自测题 90
实践3.2 命令组 92
实践3.2 练习 92
3.2.1 用{}和()来给命令分组 92
3.2.2 用命令组来控制输入/输出重定向 93
3.2.1 答案 94
3.2.3 用命令来控制 和││ 94
实践3.2 答案 94
3.2.2 答案 95
3.2.3 答案 97
实践3.2 自测题 98
第3章 思考题 99
第4章 简单变量 100
实践4.1 术语 101
实践4.1 练习 102
实践4.1 答案 103
4.1.1答案 103
实践4.1 自测题 104
实践4.2 求值及赋值 106
实践4.2 练习 106
4.2.1 简单变量求值 106
4.2.2 用等号给变量赋值 107
4.2.3 用unset删除变量 109
4.2.1 答案 111
实践4.2 答案 111
4.2.2 答案 113
4.2.3 答案 116
实践4.2 自测题 119
实践4.3 变量引用 121
实践4.3 练习 121
4.3.1 赋值引用 121
4.3.2 对变更引用的引用 122
4.3.3 引用单个字符 123
4.3.1 答案 124
实践4.3 答案 124
4.3.2 答案 125
4.3.3 答案 127
实践4.3 自测题 128
第4章 思考题 128
实践5.1 参数 131
实践5.1 练习 131
5.1.1 验证自己的设置 131
5.1.3 使用特殊参数变量(*@*) 133
5.1.2 向函数或脚本传递参数 133
5.1.4 使用set给位置参数赋值 134
5.1.5 使用shift存取位置参数 135
实践5.1 答案 136
5.1.1 答案 136
5.1.2 答案 138
5.1.3 答案 139
5.1.4 答案 141
5.1.5 答案 143
实践5.1 自测题 144
实践5.2 处理选项参数 146
实践5.2 练习 146
5.2.1 使用getopts 146
5.2.2 使用OPTIND变量 147
5.2.3 使用OPTARG变量 148
5.2.4 定制getopts错误信息 149
实践5.2 答案 150
5.2.1 答案 150
5.2.2 答案 151
5.2.3 答案 152
5.2.4 答案 152
实践5.2 自测题 155
第5章 思考题 155
第6章 高级变量用法 156
实践6.1 类型变量和范围 157
实践6.1 练习 157
6.1.1 声明数值型变量和赋值 157
6.1.2 书写算术表达式 160
6.1.3 使用算术扩展 162
6.1.4 控制变量的范围 163
实践6.1 答案 166
6.1.1 答案 166
6.1.2 答案 171
6.1.3 答案 175
6.1.4 答案 176
实践6.1 自测题 180
6.2.1 使用索引数组 182
实践6.2 数组和复合变量 182
实践6.2 练习 182
6.2.2 声明和使用联合数组 184
6.2.3 使用复合变量和训练函数 185
实践6.2 答案 187
6.2.1 答案 187
6.2.2 答案 191
6.2.3 答案 193
实践6.2 自测题 195
第6章 思考题 196
第7章 基本测试 198
实践7.1 if命令 199
实践7.1 练习 200
7.1.1 写一个简单的if、then、…else语句 200
7.1.2 使用if测试外部命令的输出 201
7.1.3 使用一种可选用方式测试一条命令 203
7.1.4 if 语句嵌套 203
7.1.1 答案 204
实践7.1 答案 204
7.1.2 答案 207
7.1.3 答案 210
7.1.4 答案 210
实践7.1 自测题 211
实践7.2 [[命令…]]操作符 213
实践7.2 练习 213
7.2.1 在if语句中使用[[…]] 213
7.2.2 使用[[…]]代替if 214
7.2.3 写逻辑表达式 215
实践7.2 答案 219
7.2.1 答案 219
7.2.2 答案 221
7.2.3 答案 222
实践7.2 自测题 225
第7章 思考题 226
第8章 循环 227
8.1.1 使用whine重复命令 228
实践8.1 练习 228
实践8.1 循环:while和euntil 228
8.1.2 使用break和continue管理一个循环 230
8.1.3 使用while的变体until 232
实践8.1 答案 233
8.1.1 答案 233
8.1.2 答案 234
8.1.3 答案 236
实践8.1 自测题 237
8.2.1 使用带有值列表的for循环 239
实践8.2 循环:列表和算术for循环 239
实践8.2 练习 239
8.2.2 用for进行反复计数 241
实践8.2 答案 243
8.2.1 答案 243
8.2.2 答案 245
实践8.2 自测题 247
第8章 思考题 248
第9章 case与select语句 249
实践9.1 case与select语句 250
实践9.1 练习 251
9.1.1 使用case命令 251
9.1.2 使用select命令 252
9.1.3 使用select命令的各种用法 254
实践9.1 答案 255
9.1.1 答案 255
9.1.2 答案 257
9.1.3 答案 258
实践9.1 自测题 259
第9章 思考题 261
第10章 模式扩展和置换 262
实践10.1 模式 263
实践10.1 练习 263
10.1.1 用星号(*)来区配0个或多个字符 263
10.1.2 用问号(?)来匹配1个字符 265
10.1.3 用方括号([])来匹配字符的集合 266
10.1.4 使用子模式 267
10.1.1 答案 269
实践10.1 答案 269
10.1.2 答案 273
10.1.3 答案 274
10.1.4 答案 276
实践10.1 自测题 277
实践10.2 命令置换 280
实践10.2 练习 280
10.2.1 用命令的输出作为变量的值 280
10.2.2 对参数的值使用命令置换 281
10.2.1 答案 283
实践10.2 答案 283
10.2.2 答案 285
实践10.2 自测题 287
实践10.3 参数扩展 289
实践10.3 练习 289
10.3.1 处理默认值和错误 289
10.3.2 区分未设置的变量和空变量 291
10.3.3 使用字符串和子字符串 292
10.3.1 答案 295
实践10.3 答案 295
10.3.2 答案 298
10.3.3 答案 299
实践10.3 自测题 302
第10章 思考题 302
第11章 输入/输出和陷阱处理 304
实践11.1 READ和PRENTF命令 305
实践11.1 练习 305
11.1.1 使用read命令 305
11.1.2 格式化输出 308
实践11.1 答案 311
11.1.1 答案 311
11.1.2 答案 314
实践11.1 自测题 318
实践11.2 exec命令 320
实践11.2 练习 320
11.2.1 用exec命令执行另外一个程序 320
11.2.2 用exec命令打开和关闭文件 320
11.2.3 用exec命令读写"感兴趣的"设备 323
实践11.2 答案 324
11.2.1 答案 325
11.2.2 答案 325
11.2.3 答案 328
实践11.3 自测题 330
实践11.3 截获和产生陷阱 332
实践11.3 练习 332
11.3.1 截获INT和EXIT陷阱 332
11.3.2 使用DEBUG陷阱 335
实践11.3 答案 336
11.3.1 答案 336
11.3.2 答案 339
实践11.3 自测题 340
第11章 思考题 341
附录A 自测题答案 343
附录B 内部命令参考 350
附录C 术语表 369