第1章 环境 1
1.1 什么是shell 1
1.2 什么是shell脚本 2
1.3 对#!/bin/ksh的解释 2
1.3.1 文件属性 5
1.3.2 目录 7
1.3.3 chmod 11
1.4 umask 12
1.5 注释 13
1.6 .profile脚本 14
1.7 别名(aliases) 15
1.8 ksh环境选项 17
1.9 变量 17
1.9.1 Shell变量 18
1.9.2 内置变量 21
1.9.3 环境变量 21
1.10 环境文件 23
1.11 历史文件 25
第2章 进程控制 29
2.1 怎样运行一个脚本 29
2.2 任务和进程 31
2.2.1 启动进程 31
2.2.2 终止进程 33
2.2.3 后台 36
2.2.4 前台 37
2.3 信号 39
2.3.1 Ctrl键信号 42
2.3.2 ps 43
2.3.3 KILL 45
2.4 nohup命令 48
2.5 安排任务 50
2.5.1 cron 50
2.5.2 at 52
第3章 变量 57
3.1 区分大小写 57
3.3.1 访问 58
3.3 标量 58
3.2 有效字符 58
3.3.2 赋值 59
3.3.3 typeset命令 59
3.3.4 四种常见错误 61
3.4 数组 64
3.4.1 声明 64
3.4.2 赋值——两种方法 64
3.4.3 访问——两种方法 65
3.5 只读 66
3.6 释放变量 67
第4章 正规表达式 69
4.1 正规表达式与通配符 69
4.2 字符集 71
4.3 模式匹配 74
4.3.1匹配行首 76
4.3.2 匹配行尾 76
4.4 元字符(metacharacter) 77
4.5 反向参照 78
5.1.1 不使用转义字符的* 81
第5章 引用 81
5.1 转义字符 81
5.1.2 使用转义字符的* 82
5.1.3 在不同的目录中不使用转义字符的* 82
5.1.4 使用带有两个转义字符的* 83
5.2 引用选项集 83
5.2.1 单引号 83
5.2.2 双引号 84
5.3 续行 85
5.4 命令替换——两种方法 86
5.5 参数替换 87
5.6 数学替换 91
数学表达式 92
第6章 流控制 95
6.1 if语句 95
6.1.1 退出状态 96
6.1.2 ((和[[命令 97
6.1.3 条件语句所用的选项 98
6.1.5 使用 或ll将if语句写在一行上 100
6.1.4 if语句中的命令 100
6.2 复合if语句 103
嵌套if语句 103
6.3 case条件 105
6.4 循环结构 106
6.4.1 while循环 107
6.4.2 until循环 108
6.4.3 for循环 109
6.4.4 select循环 111
6.6 循环实例 113
6.5 循环相关命令 113
第7章 数据操作 117
7.1 函数 117
7.1.1 命令行函数 118
7.1.2 查看函数 119
7.1.3 函数参数与命令行参数 120
7.1.4 函数返回值(整数) 121
7.1.5 函数返回值(字符串) 123
7.2 函数详述 123
7.2.2 全局变量 124
7.2.1 局部变量 124
7.2.3 按地址传递参数 125
7.2.4 面向对象的discipline函数 127
7.2.5 递归函数 128
7.2.6 使用自动加载函数 129
7.2.7 内置函数 130
7.3 数学操作 132
7.4 过滤器 137
7.5 检验文件(testing files) 141
7.5.1 检验字符串 142
7.5.2 比较字符型函数 143
7.5.3 比较数字 143
7.5.4 复合条件 146
第8章 信息传递 149
8.1 命令行参数 149
8.2 用户输入 154
8.3 重定向 162
8.4 协进程 165
9.1 路径 171
第9章 文件和目录的操作 171
9.2 文件描述符 174
9.3 特殊文件 176
9.4 链接 177
9.5 目录 181
9.6 隐含文件 183
9.7 属性 184
9.8 权限 187
9.10 访问文件 188
9.9 文件命名 188
9.11 过滤器 193
9.12 使用临时文件 203
第10章 输出控制 205
10.1 echo输出 205
10.2 printf 209
10.3 输出重定向 213
10.3.1 子shell输出重定向 214
10.3.2 循环输出重定向 214
10.4 多输出重定向 215
10.5 管道与重定向 216
10.7 本地文档(here document) 217
10.6 stderr重定向 217
第11章 故障诊断 221
11.1 语法的检查 221
11.2 命令翻译顺序 223
11.3 verbose模式 225
11.4 执行跟踪 227
11.5 调试陷阱 229
12.1 定义和使用陷阱 233
第12章 陷阱 233
12.2 注释 238
12.3 脚本帮助 238
12.4 怎样使你的脚本“防弹” 239
第13章 综合实例 245
13.1 sys_check脚本 245
13.2 第一个sys_check的运行 247
13.3 第二个sys_check的运行 261
13.4 sys_check的数字版本 264