当前位置首页 > 百科> 正文

精通Unix Shell脚本编程

2019-12-01 21:59:10 百科
精通Unix Shell脚本编程

精通Unix Shell脚本编程

《精通Unix Shell脚本编程》是2010年3月1日清华大学出版社出版的图书,作者是米歇尔。本书的每一章都从日常工作中一个常见的UNIX挑战开始,然后揭示了如何採用基本的语法并将其转换成shell脚本可以解决的问题。

基本介绍

  • 书名:精通Unix Shell脚本编程
  • 作者:米歇尔(Randal K.MiChael)
  • 原版名称:Mastering Unix Shell Scripting(Second Edition)
  • ISBN:7302218951, 9787302218951
  • 页数:877页
  • 出版社:清华大学出版社
  • 出版时间:2010年3月1日
  • 装帧:平装
  • 开本:16
  • 尺寸:25.8 x 18.4 x 4.2 cm
  • 正文语种: 简体中文

作者简介

米歇尔(Randal K.MiChael)是UNIX系统管理工作组的高级顾问。他讲授UNI义shell脚本,在企业设定方面编写了大量的shell脚本以解决从系统监控到複製大型资料库等问题和任务。另外,他在该行业有30余年的工作经验,其中15年的时间一直担任UNIX系统管理员,主要解决与AlX、HP-UX、Linux、OpenBSD和Solaris相关的实际问题。

内容简介

準备进入UNIX领域!UNIX专家Randal K.Michael将通过编写shell脚本的每个细节指导您自动完成特定任务。通过《精通Unix Shell脚本编程(第2版)》,您将了解完整的shell脚本和每一部分的详细描述,学会如何修改相关信息,从而创建用来监控具体系统事件和情况的工具,并提升解决实际系统管理问题的能力。
《精通Unix Shell脚本编程(第2版)》主要内容
最有效地使用BASH、Bourne和KORN shell脚本
执行各种UNIX版本的正确命令
定义正确的命令语法以满足特定的shell脚本目的
过滤命令的输出以去除不必要的数据
创建shell脚本选项,允许终端用户编写更加灵活的命令行
使用rsync複製数据
使用Dirvish创建快照类型的备份
使用记录档案解析数据
使用特定命令为政府审计做好準备

目录

第Ⅰ部分 shell脚本基础
第1章 脚本编程快速入门和概述 3
1.1 区分大小写 3
1.2 UNIX特殊字元 3
1.3 shell 4
1.4 shell脚本 4
1.5 函式 4
1.6 运行shell脚本 5
1.7 shell脚本中的注释和风格 6
1.8 控制结构 7
1.9 使用break、continue、exit和 return语句 10
1.10 here文档 10
1.11 shell脚本命令 11
1.12 符号命令 13
1.13 变数 13
1.14 命令行参数 14
1.15 shift命令 14
1.16 特殊参数$*和$@ 15
1.17 双引号"、符号'和` 16
1.18 在Solaris中使用awk 16
1.19 正确使用echo命令 17
1.20 shell脚本中的数学 17
1.21 内置的数学函式 18
1.22 档案许可权、suid和sgid程式 19
1.23 在远程主机上运行命令 20
1.24 设定陷阱 21
1.25 用户信息命令 22
1.25.1 who命令 22
1.25.2 w命令 22
1.25.3 last命令 23
1.26 ps命令 23
1.27 与用户通信 24
1.28 统一大写或小写文本以方便测试 24
1.29 检测返回代码 25
1.30 基于时间的脚本执行 26
1.30.1 cron表 26
1.30.2 at命令 27
1.31 输出控制 28
1.31.1 静默运行 28
1.31.2 使用getopts解析命令行参数 29
1.31.3 使用后台函式创建一个协作进程 30
1.32 捕获延迟命令输出 31
1.33 逐行处理档案的最快方式 32
1.34 循环中使用命令输出 35
1.35 邮件通知技术 36
1.35.1 使用mail 和mailx 命令 36
1.35.2 使用sendmail 命令来传送外发邮件 36
1.36 创建一个进度指示器 37
1.36.1 一系列圆点 37
1.36.2 一条旋转线 38
1.36.3 运行时间 39
1.37 使用记录档案 39
1.38 创建伪随机数 41
1.39 检查AlX中的失效磁碟分区 42
1.40 自动主机ping 42
1.41 高亮显示档案中的特定文本 43
1.42 使印表机一直列印 44
1.42.1 AIX 的“传统”印表机子系统 44
1.42.2 System V和CUPS列印 44
1.43 自动进行FTP 档案传输 44
1.44 使用rsync複製数据 44
1.45 捕获大于$MEG 的档案列表 46
1.46 捕获用户的按键操作 46
1.47 使用bc实用工具来进行浮点数学运算 47
1.48 数基转换 48
1.48.1 使用typeset命令 48
1.48.2 使用printf 命令 48
1.49 使用select 命令创建选单 49
1.50 删除档案中的重複行 51
1.51 删除档案中的空白行 51
1.52 测试NULL 变数 51
1.53 直接访问上一个位置参数$#的值 52
1.54 删除命令输出中的列标题 52
1.55 数组 53
1.56 测试字元串 53
1.57 小结 57
第2章 逐行处理档案的24种方法 59
2.1 命令语句 59
2.1.1 使用档案描述符 60
2.1.2 创建一个在时间测试中使用的大档案 60
2.2 逐行处理档案的24种方法 65
2.2.1 方法1:cat_while_read_Line 65
2.2.2 方法2:while_read_LINE_bottom 66
2.2.3 方法3:cat_while_LINE_line 67
2.2.4 方法4:while_LINE_line_bottom 68
2.2.5 方法5:cat_while_LINE_line_cmdsub2 69
2.2.6 方法6:while_LINE_line_bottom_cmdsub2 69
2.2.7 方法7:for_LINE_cat_FILE 70
2.2.8 方法8:for_LINE_cat_FILE_cmdsub2 70
2.2.9 方法9:while_line_outfile 71
2.2.10 方法10:while_read_LINE_FD_IN 72
2.2.11 方法11:cat_while_read_LINE_FD_OUT 73
2.2.12 方法12:while_read_LINE_bottom_FD_OUT 74
2.2.13 方法13:while_LINE_line_bottom_FD_OUT 75
2.2.14 方法14:while_LINE_line_bottom_cmdsub2_FD_OUT 76
2.2.15 方法15:for_LINE_cat_FILE_FD_OUT 77
2.2.16 方法16:for_LINE_cat_FILE_cmdsub2_FD_OUT 78
2.2.17 方法17:while_line_outfile_FD_IN 78
2.2.18 方法18:while_line_outfile_FD_OUT 79
2.2.19 方法19:while_line_outfile_FD_IN_AND_OUT 80
2.2.20 方法20:while_LINE_line_FD_IN 81
2.2.21 方法21:while_LINE_line_cmdsub2_FD_IN 82
2.2.22 方法22:while_read_LINE_FD_ IN _AND_OUT 83
2.2.23 方法23:while_LINE_line_FD_IN_AND_OUT 84
2.2.24 方法24:while_LINE_line_cmdsub2_FD_IN_AND_OUT 86
2.3 计时测试各种方法 87
2.3.1 计时脚本 87
2.3.2 每个方法的计时数据 105
2.3.3 计时命令替代方法 113
2.4 使用命令输入和使用档案输入的区别 115
2.5 小结 115
2.6 作业 116
第3章 自动事件通知 117
3.1 自动事件通知的基础 117
3.1.1 使用mail和mailx命令 117
3.1.2 设定邮件别名 119
3.2 外发邮件的问题 120
3.2.1 使用.forward档案创建一个“Bounce”账户 122
3.2.2 使用sendmail命令传送外发邮件 123
3.3 拨号数据机软体 124
3.4 SNMP 陷阱 124
3.5 小结 125
3.6 作业 125
第4章 进度指示器 127
4.1 使用一系列圆点来指示进度 127
4.2 使用一条旋转线来指示进度 129
4.3 使用运行时间来指示进度 131
4.4 联合反馈方法 133
4.5 其他要考虑的选项 136
4.6 小结 136
4.7 作业 136
第Ⅱ部分 程式设计师、测试员和分析员脚本
第5章 使用记录档案 139
5.1 记录的概念 139
5.1.1 定长记录档案 139
5.1.2 变长记录档案 140
5.2 处理记录档案 141
5.3 记录的任务和记录档案 145
5.3.1 定长记录档案的任务 146
5.3.2 变长记录档案的任务 147
5.4 合併进程 149
5.5 合併记录生成shell脚本 152
5.6 其他需要考虑的问题 162
5.7 小结 162
5.8 作业 163
第6章 自动FTP处理 165
6.1 语法 165
6.2 自动档案传输和远程目录列表 168
6.2.1 使用FTP获得远程计算机上的目录列表 168
6.2.2 从远程计算机上获得一个或多个档案 169
6.2.3 将一个或多个档案传输到远程计算机 173
6.2.4 用变数代替硬编码的密码 176
6.2.5 将FTP脚本修改为使用密码 179
6.3 加密怎幺样 185
6.3.1 创建加密密钥 185
6.3.2 创建不需要密码的安全shell访问 186
6.3.3 安全FTP和安全複製语法 186
6.3.4 用autoexpect和expect脚本实现自动FTP 188
6.4 其他要考虑的问题 191
6.4.1 使用命令行开关项控制执行 191
6.4.2 对活动进行记录 192
6.4.3 对脚本增加调试模式 192
6.4.4 把密码读入shell脚本 192
6.5 小结 192
6.6 作业 193
第7章 使用rsync有效複製数据 195
7.1 语法 195
7.2 普通rsync shell脚本 196
7.3 用rsync命令複製多目录档案 197
7.4 用rsync複製多档案系统 212
7.5 用rsync複製Oracle资料库 224
7.6 用rsync複製shell脚本 226
7.7 小结 259
7.8 作业 260
第8章 用Expect和autoexpect实现自动互动 261
8.1 下载和安装Expect 261
8.2 互动脚本或程式会话的基础 263
8.3 用autoexpect自动创建Expect脚本 266
8.4 使用变数 272
8.5 条件测试 274
8.5.1 Expect中的case语句 274
8.5.2 Expect中的if…then…else循环 280
8.5.3 Expect中的while循环 281
8.5.4 Expect中的for循环 282
8.5.5 Expect中的函式 284
8.6 在Sun Blade Chassis和JumpStart中使用Expect脚本 285
8.7 小结 290
8.8 作业 290
第9章 查找大档案和特定类型的档案 291
9.1 语法 291
9.2 记住档案和目录的许可许可权 292
9.3 别因档案的大小而吃惊 292
9.4 创建脚本 293
9.5 其他要考虑的问题 298
9.6 小结 298
9.7 作业 298
第10章 进程监视与进程启动前、启动时和进程停止后事件 301
10.1 语法 301
10.2 监视进程的启动 302
10.3 监视进程的结束 303
10.4 当进程启动或停止时进行监视和记录 308
10.5 进程监视的定时执行、显示每个进程的PID、为事件打上时间戳和定时功能 312
10.6 其他要考虑的问题 330
10.6.1 一般性用途 330
10.6.2 要考虑的修改事项 330
10.7 小结 330
10.8 作业 331
第11章 伪随机数和数据的生成 333
11.1 随机数的产生 333
11.2 方法 334
11.2.1 方法1:利用PID和RANDOM shell变数产生一个伪随机数 334
11.2.2 方法2:产生一个在0到32767之间的随机数 335
11.2.3 方法3:产生1到用户定义的最大值之间的数字 335
11.2.4 方法4:产生位于1和用户定义的最大数之间的固定长度的数 336
11.2.5 方法5:使用/dev/random和/dev/urandom字元专用档案 338
11.3 创建伪随机数的shell脚本 341
11.4 创建唯一的档案名称 346
11.5 创建一个由随机字元组成的档案 353
11.6 其他要考虑的问题 359
11.7 小结 360
11.8 作业 360
第12章 创建伪随机密码 361
12.1 随机性 361
12.2 创建伪随机密码 362
12.3 语法 362
12.4 建立密码创建脚本 363
12.4.1 出现顺序 364
12.4.2 脚本主体的开始 375
12.5 其他需要考虑的问题 387
12.5.1 密码报表 387
12.5.2 选用哪个密码 387
12.5.3 其他用途 387
12.6 小结 388
12.7 作业 388
第13章 浮点数学运算和bc工具程式 389
13.1 语法 389
13.2 使用bc创建shell脚本 390
13.2.1 创建float_add.ksh shell脚本 390
13.2.2 整数和浮点数的测试 395
13.2.3 用bc命令创建一个数学运算语句 397
13.2.4 使用here文档 398
13.2.5 创建float_subtract.ksh shell脚本 398
13.2.6 使用getopts解析命令行 403
13.2.7 为bc工具创建数学运算语句 405
13.2.8 here文档和提交结果 406
13.2.9 创建float_multiply.ksh shell脚本 407
13.2.10 解析命令行以获取有效数字 412
13.2.11 创建float_divide.ksh shell 脚本 413
13.2.12 创建float_average.ksh shell 脚本 420
13.3 其他需要考虑的问题 424
13.4 小结 425
13.5 作业 425
第14章 数制转换 427
14.1 语法 427
14.1.1 例1:将十进制转换为十六进制 428
14.1.2 例2:将八进制转换为十六进制 428
14.1.3 例3:十进制数转换为八进制 429
14.1.4 例4:将十进制转换为十六进制 429
14.2 利用脚本解决问题 429
14.2.1 二进制转换为十六进制的shell脚本 429
14.2.2 十进制转换为十六进制的脚本 432
14.2.3 基于十六进制IP位址产生软体授权码的脚本 436
14.2.4 在任何数制之间进行转换的脚本 440
14.2.5 利用getopts分析命令行 445
14.2.6 继续完善脚本 446
14.2.7 主程式的开始 448
14.3 转换数制的简单、可互动的脚本 449
14.4 利用bc工具进行数制转换 454
14.5 其他需要考虑的问题 460
14.6 小结 460
14.7 作业 460
第15章 hgrep:高亮显示的grep脚本 461
15.1 反白显示控制 461
15.2 创建hgrep.Bash shell脚本 463
15.3 其他需要考虑的问题 469
15.4 小结 470
15.5 作业 470
第16章 监视进程和应用程式 471
16.1 监视本地进程 471
16.2 利用安全shell和远程shell进行远程监控 473
16.2.1 检查活动的Oracle资料库 479
16.2.2 使用autoexpect产生一个expect脚本 482
16.2.3 检查HTTP伺服器/应用程式是否运行 487
16.3 等待进程执行完毕 488
16.4 其他需要考虑的问题 489
16.4.1 echo的正确用法 489
16.4.2 应用程式API和SNMP陷阱 490
16.5 小结 490
16.6 作业 491
第Ⅲ部分 系统管理员脚本
第17章 档案系统的监视 495
17.1 语法 495
17.2 为监视添加异常功能 500
17.3 剩余空间方法 506
17.4 使用带异常功能的MB剩余空间方法 509
17.5 已用百分比——MB剩余空间和大型档案系统 513
17.6 在AIX、Linux、HP-UX、OpenBSD和Solaris上运行档案系统脚本 522
17.6.1 不同作业系统命令语法和输出之间的差异 523
17.6.2 编写中性shell(shell-neutral)脚本 528
17.7 其他应考虑的问题 537
17.7.1 事件通知 537
17.7.2 自动执行 538
17.7.3 修改egrep语句 538
17.8 小结 538
17.9 作业 539
第18章 监视页面调度和交换空间 541
18.1 语法 542
18.1.1 AIX 的lsps命令 542
18.1.2 HP-UX下的swapinfo命令 543
18.1.3 Linux下的free命令 543
18.1.4 OpenBSD下的swapctl命令 544
18.1.5 Solaris下的swap命令 544
18.2 编写shell脚本 544
18.2.1 AIX分页监视器 544
18.2.2 HP-UX交换空间监视器 549
18.2.3 Linux交换空间监视器 554
18.2.4 OpenBSD交换空间监视器 557
18.2.5 Solaris交换空间监视器 560
18.2.6 5合1分页和交换空间监视器 564
18.3 其他需要考虑的问题 572
18.3.1 事件通知 572
18.3.2 日誌档案 572
18.3.3 预约监视 572
18.4 小结 572
18.5 作业 573
第19章 系统负荷监视 575
19.1 在Linux上安装系统统计程式 576
19.2 语法 577
19.2.1 uptime命令的语法 578
19.2.2 iostat语法 579
19.2.3 sar的命令语法 582
19.2.4 vmstat命令的语法 584
19.3 利用脚本解决问题 587
19.3.1 使用uptime命令测量系统负荷 587
19.3.2 使用sar命令测量系统负荷 591
19.3.3 使用iostat命令测量系统负荷 596
19.3.4 使用vmstat测量系统负荷 601
19.4 其他需要考虑的问题 604
19.4.1 尝试为用户检测任何可能的问题 605
19.4.2 向用户显示CPU占用程式列表 605
19.4.3 收集用于描绘曲线的大量数据 605
19.5 小结 605
19.6 作业 606
第20章 对陈旧磁碟分区的监视(AIX特有) 607
20.1 AIX逻辑卷标管理器 607
20.2 命令和方法 608
20.2.1 磁碟子系统命令 608
20.2.2 方法1:在LV级监视陈旧PP 608
20.2.3 方法2:在PV级监视陈旧分区 613
20.2.4 方法3:带重新同步功能的VG、LV和PV监视 616
20.3 其他需要考虑的问题 622
20.3.1 SSA磁碟 622
20.3.2 日誌档案 623
20.3.3 自动执行 623
20.3.4 事件通知 623
20.4 小结 623
20.5 作业 624
第21章 打开/关闭SSA磁碟识别指示灯 625
21.1 语法 625
21.1.1 hdisk转换为pdisk 626
21.1.2 标识一个SSA磁碟 626
21.2 脚本编写过程 626
21.2.1 用法函式和用户反馈函式 627
21.2.2 控制函式 630
21.2.3 完整的shell脚本 635
21.3 其他需要考虑的问题 646
21.3.1 错误日誌 646
21.3.2 交叉引用 646
21.3.3 Root访问和sudo 646
21.4 小结 647
21.5 作业 647
第22章 带失败通知的自动主机ping测试 649
第23章 製作系统配置镜像 665
第24章 sudo的编译、安装、配置和使用 697
第25章 脱离列印伫列地狱:保持印表机持续工作 727
第26章 那些讨厌的SOX审计 765
第27章 使用Dirvish和rsync创建快照类型的备份 779
第28章 对用户按键进行监视和审计 841
附录A Web站点上的内容 859
声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:baisebaisebaise@yeah.net