图书目录

目录

第1篇  认识Shell编程

第1章  Shell入门基础 2

1.1  为什么学习和使用Shell编程 2

1.2  Shell简介 2

1.2.1  Shell的起源 3

1.2.2  Shell的功能 4

1.2.3  Shell的分类 4

1.3  Shell的特性 5

1.3.1  交互式程序 5

1.3.2  创建脚本 6

1.3.3  设置可执行脚本 6

1.4  向脚本传递参数 7

1.4.1  Shell脚本的参数 8

1.4.2  参数的扩展 9

1.5  第一个Shell程序 10

1.5.1  Shell脚本的基本元素 10

1.5.2  指定命令解读器 11

1.5.3  Shell脚本的注释和风格 12

1.5.4  如何执行Shell程序 13

1.5.5  Shell程序的退出状态 13

1.6  小结 15

1.7  习题 15

第2章  Shell编程环境的搭建 17

2.1  在不同的操作系统上搭建Shell编程环境 17

2.1.1  在Windows上搭建Shell编程环境 17

2.1.2  在Linux上搭建Shell编程环境 20

2.1.3  在FreeBSD上搭建Shell编程环境 22

2.2  编辑器的选择 23

2.2.1  图形化编辑器 24

2.2.2  vi(vim)编辑器 24

2.3  系统环境的搭建 30

2.3.1  Shell配置文件 30

2.3.2  命令别名 33

2.4  小结 34

2.5  习题 34

第2篇  Shell编程核心技术

第3章  变量和引用 36

3.1  深入理解变量 36

3.1.1  什么是变量 36

3.1.2  变量的命名 36

3.1.3  变量的类型 37

3.1.4  变量的定义 39

3.1.5  变量和引号 42

3.1.6  变量的作用域 42

3.1.7  系统变量 45

3.1.8  环境变量 47

3.2  变量的赋值和清空 48

3.2.1  变量的赋值 49

3.2.2  引用变量的值 49

3.2.3  清除变量 50

3.3  引用和替换 51

3.3.1  引用 51

3.3.2  全引用 52

3.3.3  部分引用 52

3.3.4  命令替换 53

3.3.5  转义 54

3.4  小结 54

3.5  习题 54

第4章  条件测试和判断语句 56

4.1  条件测试 56

4.1.1  条件测试的基本语法 56

4.1.2  字符串测试 57

4.1.3  整数测试 60

4.1.4  文件测试 62

4.1.5  逻辑操作符 65

4.2  条件判断语句 66

4.2.1  使用简单的if语句进行条件判断 66

4.2.2  使用if…else语句进行流程控制 69

4.2.3  使用if…elif语句进行多条件判断 71

4.2.4  使用exit语句退出程序 72

4.3  多条件判断语句case 74

4.3.1  case的基本语法 74

4.3.2  利用case语句处理选项参数 75

4.3.3  利用case语句处理用户的输入 77

4.4  运算符 78

4.4.1  算术运算符 78

4.4.2  位运算符 82

4.4.3  自增或自减运算符 84

4.4.4  数字常量的进制 85

4.5  小结 86

4.6  习题 86

第5章  循环结构 88

5.1  步进循环语句for 88

5.1.1  带列表的for循环语句 88

5.1.2  不带列表的for循环语句 93

5.1.3  类C风格的for循环语句 93

5.1.4  使用for循环语句处理数组 95

5.2  until循环语句 96

5.2.1  until语句的基本语法 96

5.2.2  利用until语句批量增加用户 97

5.3  while循环语句 99

5.3.1  while语句的基本语法 99

5.3.2  通过计数器控制while循环结构 99

5.3.3  通过结束标记控制while循环结构 100

5.3.4  理解while语句与until语句的区别 101

5.4  嵌套循环 102

5.5  利用break和continue语句控制循环 103

5.5.1  利用break语句控制循环 103

5.5.2  利用continue语句控制循环 105

5.5.3  分析break语句和continue语句的区别 106

5.6  小结 109

5.7  习题 109

第6章  函数 111

6.1  函数的基础知识 111

6.1.1  什么是函数 111

6.1.2  函数的定义 112

6.1.3  函数的调用 113

6.1.4  函数链接 114

6.1.5  函数的返回值 115

6.1.6  函数和别名 117

6.1.7  全局变量和局部变量 118

6.2  函数的参数 120

6.2.1  包含参数的函数的调用方法 120

6.2.2  获取函数参数的个数 121

6.2.3  通过位置变量接收参数值 122

6.2.4  移动位置参数 122

6.2.5  通过getopts接收函数的参数 123

6.2.6  传递间接参数 124

6.2.7  通过全局变量传递数据 126

6.2.8  传递数组参数 126

6.3  函数库文件 128

6.3.1  函数库文件的定义 128

6.3.2  函数库文件的调用 129

6.4  递归函数 130

6.5  小结 132

6.6  习题 133

第7章  数组 134

7.1  定义数组 134

7.1.1  通过指定元素值定义数组 134

7.1.2  通过declare语句定义数组 135

7.1.3  通过元素值集合定义数组 136

7.1.4  通过键值对定义数组 137

7.1.5  数组和普通变量 138

7.2  数组的赋值 139

7.2.1  按索引为元素赋值 139

7.2.2  通过集合为数组赋值 140

7.2.3  在数组末尾追加新元素 141

7.2.4  通过循环为数组元素赋值 142

7.3  访问数组 142

7.3.1  访问第1个数组元素 142

7.3.2  通过下标访问数组元素 143

7.3.3  计算数组的长度 143

7.3.4  通过循环遍历数组元素 145

7.3.5  引用所有的数组元素 145

7.3.6  以切片方式获取部分数组元素 146

7.3.7  数组元素的替换 148

7.4  删除数组 149

7.4.1  删除指定的数组元素 149

7.4.2  删除整个数组 150

7.5  数组的其他操作 151

7.5.1  复制数组 151

7.5.2  连接数组 151

7.5.3  将文件内容加载到数组中 152

7.6  小结 153

7.7  习题 153

第8章  正则表达式 154

8.1  正则表达式简介 154

8.1.1  为什么使用正则表达式 154

8.1.2  如何学习正则表达式 155

8.1.3  如何实践正则表达式 156

8.2  正则表达式基础 156

8.2.1  正则表达式的原理 156

8.2.2  标准正则表达式 157

8.2.3  扩展正则表达式 161

8.2.4  Perl正则表达式 163

8.2.5  正则表达式的字符集 164

8.3  正则表达式的应用 165

8.3.1  匹配单个字符 166

8.3.2  匹配多个字符 168

8.3.3  匹配字符串的开头或者结尾 170

8.3.4  运算符的优先级 171

8.3.5  子表达式 172

8.3.6  通配符 174

8.4  grep命令 175

8.4.1  grep命令的基本语法 175

8.4.2  grep命令族简介 176

8.5  小结 177

8.6  习题 177

第9章  文本处理 178

9.1  使用echo命令输出文本 178

9.1.1  显示普通字符串 178

9.1.2  显示转义字符 179

9.1.3  显示变量 181

9.1.4  换行和不换行 182

9.1.5  显示命令的执行结果 183

9.1.6  echo命令的执行结果重定向 183

9.2  文本格式化的输出 184

9.2.1  使用UNIX制表符 184

9.2.2  使用fold命令格式化行 185

9.2.3  使用fmt命令格式化段落 187

9.2.4  使用rev命令反转字符顺序 189

9.2.5  使用pr命令格式化文本页 190

9.3  使用sort命令对文本进行排序 193

9.3.1  sort命令的基本用法 193

9.3.2  使用单个关键字进行排序 194

9.3.3  根据指定的列进行排序 198

9.3.4  根据关键字进行降序排序 198

9.3.5  数值列的排序 200

9.3.6  自定义列分隔符 201

9.3.7  删除重复的行 202

9.3.8  根据多个关键字进行排序 202

9.3.9  使用sort命令合并文件 204

9.4  文本的统计 205

9.4.1  输出包含行号的文本行 205

9.4.2  统计行数 207

9.4.3  统计单词数和字符数 209

9.5  使用cut命令选取文本列 209

9.5.1  cut命令及其语法 210

9.5.2  选择指定的文本列 211

9.5.3  选择指定数量的字符 212

9.5.4  排除不包含列分隔符的行 213

9.6  使用paste命令拼接文本列 214

9.6.1  paste命令及其语法 214

9.6.2  自定义列分隔符 216

9.6.3  拼接指定的文本列 216

9.7  使用join命令连接文本列 217

9.7.1  join命令及其语法 217

9.7.2  指定连接关键字列 219

9.7.3  内连接文本文件 220

9.7.4  左连接文本文件 220

9.7.5  右连接文本文件 221

9.7.6  全连接文本文件 222

9.7.7  自定义输出列 222

9.8  使用tr命令替换文件内容 223

9.8.1  tr命令及其语法 223

9.8.2  去除重复出现的字符 224

9.8.3  删除空行 225

9.8.4  大小写转换 225

9.8.5  删除指定的字符 226

9.9  小结 227

9.10  习题 227

第10章  流编辑器 229

10.1  sed命令简介 229

10.1.1  sed命令的基本语法 229

10.1.2  sed命令的工作方式 231

10.1.3  使用行号定位文本行 231

10.1.4  使用正则表达式定位文本行 232

10.2  sed命令的常用操作 233

10.2.1  sed命令的基本语法 233

10.2.2  选择文本 234

10.2.3  替换文本 236

10.2.4  删除文本 239

10.2.5  追加文本 242

10.2.6  插入文本 243

10.3  组合命令 243

10.3.1  使用-e选项执行多个子命令 244

10.3.2  使用分号执行多个子命令 244

10.3.3  对一个地址使用多个子命令 245

10.3.4  sed脚本文件 246

10.4  小结 248

10.5  习题 249

第11章  文本处理利器awk命令 250

11.1  awk命令简介 250

11.1.1  awk命令的功能 250

11.1.2  awk命令的基本语法 251

11.1.3  awk命令的工作流程 252

11.1.4  执行awk命令的几种方式 252

11.2  awk命令的模式匹配 254

11.2.1  关系表达式 254

11.2.2  正则表达式 255

11.2.3  混合模式 256

11.2.4  区间模式 256

11.2.5  BEGIN模式 257

11.2.6  END模式 258

11.3  变量 259

11.3.1  变量的定义和引用 259

11.3.2  系统内置变量 260

11.3.3  记录分隔符和字段分隔符 260

11.3.4  记录和字段的引用 263

11.4  运算符和表达式 264

11.4.1  算术运算符 264

11.4.2  赋值运算符 265

11.4.3  条件运算符 266

11.4.4  逻辑运算符 266

11.4.5  关系运算符 267

11.4.6  其他运算符 268

11.5  函数 268

11.5.1  字符串函数 268

11.5.2  算术函数 272

11.6  数组 273

11.6.1  数组的定义和赋值 273

11.6.2  遍历数组 274

11.7  流程控制 276

11.7.1  if语句 276

11.7.2  while语句 277

11.7.3  do…while语句 278

11.7.4  for语句 279

11.7.5  break语句 280

11.7.6  continue语句 281

11.7.7  next语句 282

11.7.8  exit语句 283

11.8  awk命令格式化的输出 283

11.8.1  基本的print语句 283

11.8.2  格式化输出printf()函数 283

11.8.3  使用sprintf()函数生成格式化字符串 284

11.9  awk命令与Shell的交互 285

11.9.1  通过管道实现与Shell的交换 285

11.9.2  通过system()函数实现与Shell的交互 286

11.10  小结 287

11.11  习题 287

第12章  文件操作 288

12.1  文件的基础知识 288

12.1.1  列出文件 288

12.1.2  文件的类型 289

12.1.3  文件的权限 292

12.2  查找文件 293

12.2.1  find命令及其语法 293

12.2.2  find命令——路径 294

12.2.3  find命令——测试 295

12.2.4  find命令——使用!运算符对测试求反 298

12.2.5  find命令——处理文件权限错误信息 298

12.2.6  find命令——动作 299

12.3  比较文件 300

12.3.1  使用comm比较文件 301

12.3.2  使用diff比较文件 304

12.4  文件描述符 307

12.4.1  什么是文件描述符 307

12.4.2  标准输入、标准输出和标准错误 308

12.5  重定向 309

12.5.1  输出重定向(覆盖) 309

12.5.2  输出重定向(追加) 311

12.5.3  输入重定向 311

12.5.4  当前文档 312

12.5.5  重定向两个文件描述符 313

12.5.6  使用exec命令分配文件描述符 313

12.6  小结 315

12.7  习题 315

第13章  子Shell与进程处理 317

13.1  子Shell 317

13.1.1  什么是子Shell 317

13.1.2  内部命令、保留字和外部命令 318

13.1.3  在子Shell中执行命令 321

13.1.4  把子Shell中的变量值传回父Shell 325

13.2  进程处理 327

13.2.1  什么是进程 327

13.2.2  通过脚本监控进程 328

13.2.3  作业控制 329

13.2.4  信号与trap命令 332

13.3  小结 334

13.4  习题 334

第3篇  Shell编程实战

第14章  Shell脚本调试技术 336

14.1  Shell脚本中的常见错误 336

14.1.1  常见的语法错误 336

14.1.2  常见的逻辑错误 339

14.2  Shell脚本调试技术 340

14.2.1  使用echo命令调试脚本 340

14.2.2  使用trap命令调试Shell脚本 341

14.2.3  使用tee命令调试Shell脚本 343

14.2.4  使用调试钩子调试Shell脚本 344

14.3  小结 346

14.4  习题 346

第15章  利用Shell脚本解决实际问题 347

15.1  编写系统服务脚本 347

15.1.1  系统的启动过程 347

15.1.2  运行级别 348

15.1.3  服务脚本的基本语法 349

15.1.4  编写MySQL服务脚本 352

15.2  通过脚本管理Apache服务器日志 358

15.2.1  Apache日志简介 359

15.2.2  归档文件名生成函数 360

15.2.3  过期日志归档函数 361

15.2.4  过期日志删除函数 362

15.2.5  日志归档主程序 362

15.2.6  定时运行日志归档脚本 363

15.3  小结 367

15.4  习题 367