?? shell編程.txt
字號:
譯者序
毫無疑問,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腳本技術的文檔.
書中的練習和例子腳本中的注釋將會與讀者有更好的互動,但是最關鍵的前提是:
想真正學習腳本編程的唯一途徑就是編寫腳本.
這本書也可作為教材來講解一般的編程概念.
下載本書最新版本,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:chunmin.yang@gmail.com
一直想好好學習一下bash,可惜網上的資料都雜亂不堪,我還是喜歡通過一本書系統的學習.這本
書來得正是時候.本書的作者真是非常的嚴謹,從例子里的改進人名單就能看出來.可惜我水平真
的是非常有限,好多地方估計譯得都有問題.希望閱讀的朋友們多多提些修改建議.我會盡我的最
大努力去修正它.
目錄
++++
第一部分. 熱身
1. 為什么使用shell編程
2. 帶著一個Sha-Bang出發(Sha-Bang指的是#!)
2.1. 調用一個腳本
2.2. 初步的練習
第二部分. 基本
3. 特殊字符
4. 變量和參數的介紹
4.1. 變量替換
4.2. 變量賦值
4.3. Bash變量是不分類型的
4.4. 特殊的變量類型
5. 引用(翻譯的可能有問題,特指引號)
5.1. 引用變量
5.2. 轉義(\)
6. 退出和退出狀態
7. Tests
7.1. Test結構
7.2. 文件測試操作
7.3. 其他比較操作
7.4. 嵌套的if/then條件test
7.5. 檢查你的test知識
8. 操作符和相關的主題
8.1. 操作符
8.2. 數字常量
第三部分. 超越基本
9. 變量重游
9.1. 內部變量
9.2. 操作字符串
9.3. 參數替換
9.4. 指定類型的變量:declare或者typeset
9.5. 變量的間接引用
9.6. $RANDOM: 產生隨機整數
9.7. 雙圓括號結構
10. 循環和分支
10.1. 循環
10.2. 嵌套循環
10.3. 循環控制
10.4. 測試與分支(case和select結構)
11. 內部命令與內建
11.1. 作業控制命令
12. 外部過濾器,程序和命令
12.1. 基本命令
12.2. 復雜命令
12.3. 時間/日期 命令
12.4. 文本處理命令
12.5. 文件與歸檔命令
12.6. 通訊命令
12.7. 終端控制命令
12.8. 數學計算命令
12.9. 混雜命令
13. 系統與管理命令
13.1. 分析一個系統腳本
14. 命令替換
15. 算術擴展
16. I/O 重定向
16.1. 使用exec
16.2. 代碼塊的重定向
16.3. 應用
17. Here Documents
17.1. Here Strings
18. 休息時間
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
Bibliography
A. Contributed Scripts
B. Reference Cards
C. A Sed and Awk Micro-Primer
C.1. Sed
C.2. Awk
D. Exit Codes With Special Meanings
E. A Detailed Introduction to I/O and I/O Redirection
F. Standard Command-Line Options
G. Important Files
H. Important System Directories
I. Localization
J. History Commands
K. A Sample .bashrc File
L. Converting DOS Batch Files to Shell Scripts
M. Exercises
M.1. Analyzing Scripts
M.2. Writing Scripts
N. Revision History
O. Mirror Sites
P. To Do List
Q. Copyright
表格清單:
11-1. 作業標識符
30-1. Bash 選項
33-1. 轉義序列中數值和彩色的對應
B-1. Special Shell Variables
B-2. TEST Operators: Binary Comparison
B-3. TEST Operators: Files
B-4. Parameter Substitution and Expansion
B-5. String Operations
B-6. Miscellaneous Constructs
C-1. Basic sed operators
C-2. Examples of sed operators
D-1. "Reserved" Exit Codes
L-1. Batch file keywords / variables / operators, and their shell equivalents
L-2. DOS commands and their UNIX equivalents
N-1. Revision History
例子清單:
2-1. 清除:清除/var/log下的log文件
2-2. 清除:一個改良的清除腳本
2-3. cleanup:一個增強的和廣義的刪除logfile的腳本
3-1. 代碼塊和I/O重定向
3-2. 將一個代碼塊的結果保存到文件
3-3. 在后臺運行一個循環
3-4. 備份最后一天所有修改的文件.
4-1. 變量賦值和替換
4-2. 一般的變量賦值
4-3. 變量賦值,一般的和比較特殊的
4-4. 整型還是string?
4-5. 位置參數
4-6. wh,whois節點名字查詢
4-7. 使用shift
5-1. echo一些詭異的變量
5-2. 轉義符
6-1. exit/exit狀態
6-2. 否定一個條件使用!
7-1. 什么情況下為真?
7-2. 幾個等效命令test,/usr/bin/test,[],和/usr/bin/[
7-3. 算數測試使用(( ))
7-4. test死的鏈接文件
7-5. 數字和字符串比較
7-6. 測試字符串是否為null
7-7. zmore
8-1. 最大公約數
8-2. 使用算術操作符
8-3. 使用&&和||進行混合狀態的test
8-4. 數字常量的處理
9-1. $IFS和空白
9-2. 時間輸入
9-3. 再來一個時間輸入
9-4. Timed read
9-5. 我是root?
9-6. arglist:通過$*和$@列出所有的參數
9-7. 不一致的$*和$@行為
9-8. 當$IFS為空時的$*和$@
9-9. 下劃線變量
9-10. 在一個文本文件的段間插入空行
9-11. 利用修改文件名,來轉換圖片格式
9-12. 模仿getopt命令
9-13. 提取字符串的一種可選的方法
9-14. 使用參數替換和error messages
9-15. 參數替換和"usage"messages
9-16. 變量長度
9-17. 參數替換中的模式匹配
9-18. 重命名文件擴展名
9-19. 使用模式匹配來分析比較特殊的字符串
9-20. 對字符串的前綴或后綴使用匹配模式
9-21. 使用declare來指定變量的類型
9-22. 間接引用
9-23. 傳遞一個間接引用給awk
9-24. 產生隨機數
9-25. 從一副撲克牌中取出一張隨機的牌
9-26. 兩個指定值之間的隨機數
9-27. 使用隨機數來搖一個骰子
9-28. 重新分配隨機數種子
9-29. 使用awk產生偽隨機數
9-30. C風格的變量處理
10-1. 循環的一個簡單例子
10-2. 每個[list]元素帶兩個參數的for循環
10-3. 文件信息:對包含在變量中的文件列表進行操作
10-4. 在for循環中操作文件
10-5. 在for循環中省略[list]
10-6. 使用命令替換來產生for循環的[list]
10-7. 對于二進制文件的一個grep替換
10-8. 列出系統上的所有用戶
10-9. 在目錄的所有文件中查找源字串
10-10. 列出目錄中所有的符號連接文件
10-11. 將目錄中的符號連接文件名保存到一個文件中
10-12. 一個C風格的for循環
10-13. 在batch mode中使用efax
10-14. 簡單的while循環
10-15. 另一個while循環
10-16. 多條件的while循環
10-17. C風格的while循環
10-18. until循環
10-19. 嵌套循環
10-20. break和continue命令在循環中的效果
10-21. 多層循環的退出
10-22. 多層循環的continue
10-23. 在實際的任務中使用"continue N"
10-24. 使用case
10-25. 使用case來創建菜單
10-26. 使用命令替換來產生case變量
10-27. 簡單字符串匹配
10-28. 檢查是否是字母輸入
10-29. 用select來創建菜單
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -