高级Bash脚本编程指南

来自Ubuntu中文
跳到导航跳到搜索
可打印版本不再受到支持且可能有渲染错误。请更新您的浏览器书签并改用浏览器默认打印功能。

转载说明

译者序

毫无疑问,UNIX/Linux最重要的软件之一就是shell,目前最流行的shell被称为Bash(Bourne Again Shell),几乎所有的Linux和绝大部分的UNIX都可以使用Bash。作为系统与用户之间的交互接口,shell几乎是你在UNIX工作平台上最亲密的朋友,因此,学好shell,是学习Linux/UNIX的的开始,并且它会始终伴随你的工作学习。

shell是如此地重要,但令人惊奇的是,介绍shell的书没有真正令人满意的。所幸的是,我看到了这本被人称为abs的书,这本书介绍了bash大量的细节和广阔的范围,我遇到的绝大部分的技术问题--无论是我忘记的或是以前没有发现的--都可以在这本书里找到答案。这本使用大量的例子详细地介绍了Bash的语法,各种技巧,调试等等的技术,以循序渐进的学习方式,让你了解Bash的所有特性,在书中还有许多练习可以引导你思考,以得到更深入的知识。无论你是新手还是老手,或是使用其他语言的程序员,我能肯定你能在此书用受益。而本书除了介绍BASH的知识之外,也有许多有用的关于Linux/UNIX的知识和其他shell的介绍。

在看到本书的英文版后,我决定把它翻译出来,在Linuxsir论坛上结识了译者之一杨春敏共同翻译这本书,600多页的书是本大部头的书,我们花了6个月的业余时间才翻译完了。

关于版权的问题,英文版的作者Mendel Cooper对英文版的版权做了详细的约定,请参考:Appendix Q. Copyright。中文版版权由译者杨春敏和黄毅共同所有,在遵守英文版版权相应条款的条件下,欢迎在保留本书译者名字和版权说明以非盈利的方式自由发布此中文版,以盈利目的的所有行为必须联系英文作者和两位中文译者以获得许可。

本书得以成稿,我(黄毅)要多谢我的女朋友,本该给予她的时间我用来了翻译,多谢你的理解,你是一个很棒的女朋友!

译者 杨春敏 黄毅 2006.5.15

Advanced Bash-Scripting Guide <<高级Bash脚本编程指南>> 一本深入学习shell脚本艺术的书籍

Version 3.7.2 2005/11/16

作者:Mendel Cooper

mail:[email protected]

这本书假定你没有任何脚本或一般程序的编程知识,但是如果你有相关的知识,那么你将很容易 达到中高级的水平...all the while sneaking in little snippets of UNIX? wisdom and lore(这句不知道怎么译).你可以把本书作为教材,自学手册,或者你获得shell脚本技术的文档. 书中的练习和例子脚本中的注释将会与读者有更好的互动,但是最关键的前提是: 想真正学习脚本编程的唯一途径就是编写脚本.

这本书也可作为教材来讲解一般的编程概念.

下载本书最新版本,http://personal.riverusers.com/~thegrendel/abs-guide-3.7.tar.bz2, 这是一个以tar和bzip2进行打包的,并且是以HTML来发行的.当然,你也可以获得本书的pdf版本 在http://www.tldp.org/LDP/abs/abs-guide.pdf.可以在 http://personal.riverusers.com/~thegrendel/Change.log中查看修订历史.

译者:杨春敏,黄毅 mail:[email protected]

一直想好好学习一下bash,可惜网上的资料都杂乱不堪,我还是喜欢通过一本书系统的学习.这本 书来得正是时候.本书的作者真是非常的严谨,从例子里的改进人名单就能看出来.可惜我水平真 的是非常有限,好多地方估计译得都有问题.希望阅读的朋友们多多提些修改建议.我会尽我的最 大努力去修正它.

目录

第一部分. 热身

  1. 为什么使用shell编程
  2. 带着一个Sha-Bang出发(Sha-Bang指的是#!)
    1. 调用一个脚本
    2. 初步的练习

第二部分. 基本

  1. 特殊字符
  2. 变量和参数的介绍
    1. 变量替换
    2. 变量赋值
    3. Bash变量是不分类型的
    4. 特殊的变量类型
  3. 引用(翻译的可能有问题,特指引号)
    1. 引用变量
    2. 转义(\)
  4. 退出和退出状态
  5. Tests
    1. Test结构
    2. 文件测试操作
    3. 其他比较操作
    4. 嵌套的if/then条件test
    5. 检查你的test知识
  6. 操作符和相关的主题
    1. 操作符
    2. 数字常量

第三部分. 超越基本

  1. 变量重游
    1. 内部变量
    2. 操作字符串
    3. 参数替换
    4. 指定类型的变量:declare或者typeset
    5. 变量的间接引用
    6. RANDOM: 产生随机整数
    7. 双圆括号结构
  2. 循环和分支
    1. 循环
    2. 嵌套循环
    3. 循环控制
    4. 测试与分支(case和select结构)
  3. 内部命令与内建
    1. 作业控制命令
  4. 外部过滤器,程序和命令
    1. 基本命令
    2. 复杂命令
    3. 时间/日期 命令
    4. 文本处理命令
    5. 文件与归档命令
    6. 通讯命令
    7. 终端控制命令
    8. 数学计算命令
    9. 混杂命令
  5. 系统与管理命令
    1. 分析一个系统脚本
  6. 命令替换
  7. 算术扩展
  8. I/O 重定向
    1. 使用exec
    2. 代码块的重定向
    3. 应用
  9. Here Documents
    1. Here Strings
  10. 休息时间

Part 4. 高级

   19. 正则表达式
       19.1. 一个简要的正则表达式介绍
       19.2. 通配
   20. 子shell(Subshells)
   21. 受限shell(Restricted Shells)
   22. 进程替换
   23. 函数
       23.1. 复杂函数和函数复杂性
       23.2. 局部变量
       23.3. 不使用局部变量的递归
   24. 别名(Aliases)
   25. 列表结构
   26. 数组
   27. /dev 和 /proc
       27.1. /dev
       27.2. /proc
   28. 关于Zeros和Nulls
   29. 调试
   30. 选项
   31. Gotchas
   32. 脚本编程风格
       32.1. 非官方的Shell脚本风格
   33. 杂项
       33.1. 交互式和非交互式的shells和脚本
       33.2. Shell 包装
       33.3. 测试和比较: 另一种方法
       33.4. 递归
       33.5. 彩色脚本
       33.6. 优化
       33.7. 各种小技巧
       33.8. 安全话题

33.8.1. 被感染的脚本 33.8.2. 隐藏Shell脚本源码

       33.9. 移植话题
       33.10. 在Windows下进行Shell编程
   34. Bash, 版本 2 和 3
       34.1. Bash, 版本2
       34.2. Bash, 版本3

35. 后记

   35.1. 作者后记
   35.2. 关于作者
   35.3. 哪里可以取得帮助?
   35.4. 制作这本书的工具
       35.4.1. 硬件
       35.4.2. 软件和排版软件
   35.5. Credits