个人工具

高级Bash脚本编程指南

来自Ubuntu中文

Tusooa讨论 | 贡献2009年10月8日 (四) 17:34的版本

跳转至: 导航, 搜索

转载说明

譯者序

毫無疑問,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:thegrendel@theriver.com

這本書假定你沒有任何腳本或一般程序的編程知識,但是如果你有相關的知識,那麼你將很容易 達到中高級的水平...all the while sneaking in little snippets of UNIX? wisdom and lore(這句不知道怎麼譯).你可以把本書作為教材,自學手冊,或者你獲得shell腳本技術的文檔. 書中的練習和例子腳本中的註釋將會與讀者有更好的互動,但是最關鍵的前提是: 想真正學習腳本編程的唯一途徑就是編寫腳本.

這本書也可作為教材來講解一般的編程概念.

下載本書最新版本,這是一個以tar和bzip2進行打包的,並且是以HTML來發行的.http://personal.riverusers.com/~thegrendel/abs-guide-5.5.tar.bz2

當然,你也可以獲得本書的pdf版本在 http://www.tldp.org/LDP/abs/abs-guide.pdf.

可以查看修訂歷史.http://personal.riverusers.com/~thegrendel/Change.log

譯者:楊春敏,黃毅

mail:chunmin.yang@gmail.com

一直想好好學習一下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. 休息时间

第四部份. 高级

  1. 正则表达式
    1. 一个简要的正则表达式介绍
    2. 通配
  2. 子shell(Subshells)
  3. 受限shell(Restricted Shells)
  4. 进程替换
  5. 函数
    1. 复杂函数和函数复杂性
    2. 局部变量
    3. 不使用局部变量的递归
  6. 别名(Aliases)
  7. 列表结构
  8. 数组
  9. /dev 和 /proc
    1. /dev
    2. /proc
  10. 关于Zeros和Nulls
  11. 调试
  12. 选项
  13. Gotchas
  14. 脚本编程风格
    1. 非官方的Shell脚本风格
  15. 杂项
    1. 交互式和非交互式的shells和脚本
    2. Shell 包装
    3. 测试和比较: 另一种方法
    4. 递归
    5. 彩色脚本
    6. 优化
    7. 各种小技巧
    8. 安全话题
      1. 被感染的脚本
      2. 隐藏Shell脚本源码
    9. 移植话题
    10. 在Windows下进行Shell编程
  16. Bash, 版本 2 和 3
    1. Bash, 版本2
    2. Bash, 版本3

35. 后记

  1. 作者后记
  2. 关于作者
  3. 哪里可以取得帮助?
  4. 制作这本书的工具
    1. 硬件
    2. 软件和排版软件
  5. Credits