高级Bash脚本编程指南——一本深入学习shell脚本艺术的书籍
?http://www.reddragonfly.org/abscn/index.html
目錄
序
1. 原書作者致中國讀者(英文)
2. 原書作者致中國讀者(譯文)
3. 黃毅
4. 楊春敏
第一部分. 熱身
1. 為什么使用shell編程?
2. 帶著一個Sha-Bang出發(fā)(Sha-Bang指的是#!)
2.1. 調(diào)用一個腳本
2.2. 初步的練習(xí)
第二部分. 基本
3. 特殊字符
4. 變量和參數(shù)的介紹
4.1. 變量替換
4.2. 變量賦值
4.3. Bash變量是不區(qū)分類型的
4.4. 特殊的變量類型
5. 引用
5.1. 引用變量
5.2. 轉(zhuǎn)義
6. 退出和退出狀態(tài)碼
7. 條件判斷
7.1. 條件測試結(jié)構(gòu)
7.2. 文件測試操作符
7.3. 其他比較操作符
7.4. 嵌套的if/then條件測試
7.5. 檢測你對測試知識的掌握情況
8. 操作符與相關(guān)主題
8.1. 操作符
8.2. 數(shù)字常量
第三部分. 進階
9. 變量重游
9.1. 內(nèi)部變量
9.2. 操作字符串
9.3. 參數(shù)替換
9.4. 指定變量的類型: 使用declare或者typeset
9.5. 變量的間接引用
9.6. $RANDOM: 產(chǎn)生隨機整數(shù)
9.7. 雙圓括號結(jié)構(gòu)
10. 循環(huán)與分支
10.1. 循環(huán)
10.2. 嵌套循環(huán)
10.3. 循環(huán)控制
10.4. 測試與分支(case與select結(jié)構(gòu))
11. 內(nèi)部命令與內(nèi)建命令
11.1. 作業(yè)控制命令
12. 外部過濾器, 程序和命令
12.1. 基本命令
12.2. 復(fù)雜命令
12.3. 時間/日期 命令
12.4. 文本處理命令
12.5. 文件與歸檔命令
12.6. 通訊命令
12.7. 終端控制命令
12.8. 數(shù)學(xué)計算命令
12.9. 混雜命令
13. 系統(tǒng)與管理命令
13.1. 分析一個系統(tǒng)腳本
14. 命令替換
15. 算術(shù)擴展
16. I/O重定向
16.1. 使用exec
16.2. 代碼塊重定向
16.3. 重定向的應(yīng)用
17. Here Document
17.1. Here String
18. 休息片刻
第四部分. 高級主題
19. 正則表達式
19.1. 一份簡要的正則表達式介紹
19.2. 通配(globbing)
20. 子shell
21. 受限shell
22. 進程替換
23. 函數(shù)
23.1. 復(fù)雜函數(shù)和函數(shù)復(fù)雜性
23.2. 局部變量
23.3. 不使用局部變量的遞歸
24. 別名
25. 列表結(jié)構(gòu)
26. 數(shù)組
27. /dev和/proc
27.1. /dev
27.2. /proc
28. Zero與Null
29. 調(diào)試
30. 選項
31. 陷阱
32. 腳本編程風(fēng)格
32.1. 非官方的Shell腳本編寫風(fēng)格
33. 雜項
33.1. 交互與非交互式的交互與非交互式的shell和腳本
33.2. Shell包裝
33.3. 測試和比較: 一種可選的方法
33.4. 遞歸
33.5. 將腳本"彩色化"
33.6. 優(yōu)化
33.7. 各種小技巧
33.8. 安全問題
33.9. 可移植性問題
33.10. Windows下的shell腳本
34. Bash, 版本2與版本3
34.1. Bash, 版本2
34.2. Bash, 版本3
35. 后記
35.1. 作者后記
35.2. 關(guān)于作者
35.3. 譯者后記
35.3.1. 楊春敏
35.3.2. 黃毅
35.4. 在哪里可以獲得幫助
35.5. 用來制作這本書的工具
35.5.1. 硬件
35.5.2. 軟件與排版軟件
35.6. 致謝
35.7. 譯者致謝
參考文獻 A. 捐獻的腳本 B. 參考卡片 C. 一個學(xué)習(xí)Sed和Awk的小手冊
C.1. Sed
C.2. Awk
D. 帶有特殊含義的退出碼 E. I/O和I/O重定向的詳細介紹 F. 命令行選項
F.1. 標準命令行選項
F.2. Bash命令行選項
G. 重要的文件 H. 重要的系統(tǒng)目錄 I. 本地化 J. 歷史命令 K. 一個簡單的.bashrc文件 L. 將DOS批處理文件轉(zhuǎn)換為Shell腳本 M. 練習(xí)
M.1. 分析腳本
M.2. 編寫腳本
N. 修訂記錄 O. 翻譯版修訂記錄 P. 鏡像站點 Q. To Do列表 R. 版權(quán)
表格清單
11-1. 作業(yè)標識符
30-1. Bash選項
33-1. 轉(zhuǎn)義序列中顏色與數(shù)值的對應(yīng)
B-1. 特殊的shell變量
B-2. 測試操作: 二元比較
B-3. 文件類型的測試操作
B-4. 參數(shù)替換和擴展
B-5. 字符串操作
B-6. 一些結(jié)構(gòu)的匯總
C-1. 基本sed操作
C-2. sed操作符舉例
D-1. "保留的"退出碼
L-1. 批處理文件關(guān)鍵字 / 變量 / 操作符, 和等價的shell符號
L-2. DOS命令與UNIX的等價命令
N-1. 修訂歷史
O-1. 翻譯版修訂歷史
例子清單
2-1. 清除: 清除/var/log下的log文件
2-2. 清除:一個改良的清除腳本
2-3. 清除: 一個增強的和廣義的刪除logfile的腳本
3-1. 代碼塊和I/O重定向
3-2. 將一個代碼塊的結(jié)果保存到文件
3-3. 在后臺運行一個循環(huán)
3-4. 備份最后一天所有修改的文件
4-1. 變量賦值和替換
4-2. 簡單的變量賦值
4-3. 簡單和復(fù)雜, 兩種類型的變量賦值
4-4. 整型還是字符串?
4-5. 位置參數(shù)
4-6. wh, whois節(jié)點名字查詢
4-7. 使用shift命令
5-1. echo出一些詭異變量
5-2. 轉(zhuǎn)義符
6-1. 退出/退出狀態(tài)碼
6-2. 反轉(zhuǎn)一個條件的用法!
7-1. 什么是真?
7-2. test, /usr/bin/test, [ ], 和/usr/bin/[都是等價命令
7-3. 算術(shù)測試需要使用(( ))
7-4. 測試那些斷掉的鏈接文件
7-5. 算術(shù)比較與字符串比較
7-6. 檢查字符串是否為null
7-7. zmore
8-1. 最大公約數(shù)
8-2. 使用算術(shù)操作符
8-3. 使用&&和||進行混合條件測試
8-4. 數(shù)字常量表示法
9-1. $IFS與空白字符
9-2. 定時輸入
9-3. 再來一個, 定時輸入
9-4. 定時read
9-5. 我是root么?
9-6. arglist: 通過$*和$@列出所有的參數(shù)
9-7. $*和$@的不一致的行為
9-8. 當$IFS為空時的$*和$@
9-9. 下劃線變量
9-10. 在一個文本文件的段落之間插入空行
9-11. 轉(zhuǎn)換圖片文件格式, 同時更改文件名
9-12. 將音頻流文件轉(zhuǎn)換為ogg各式的文件
9-13. 模擬getopt
9-14. 提取字符串的另一種方法
9-15. 使用參數(shù)替換和錯誤消息
9-16. 參數(shù)替換和"usage"消息(譯者注: 通常就是幫助信息)
9-17. 變量長度
9-18. 參數(shù)替換中的模式匹配
9-19. 修改文件擴展名:
9-20. 使用模式匹配來解析任意字符串
9-21. 對字符串的前綴和后綴使用匹配模式
9-22. 使用declare來指定變量的類型
9-23. 間接引用
9-24. 傳遞一個間接引用給awk
9-25. 產(chǎn)生隨機整數(shù)
9-26. 從一幅撲克牌中取出一張隨機的牌
9-27. 兩個指定值之間的隨機數(shù)
9-28. 用隨機數(shù)來搖單個骰子
9-29. 重新分配隨機數(shù)種子
9-30. 使用awk來產(chǎn)生偽隨機數(shù)
9-31. C語言風(fēng)格的變量操作
10-1. 一個簡單的for循環(huán)
10-2. 每個[list]元素中都帶有兩個參數(shù)的for循環(huán)
10-3. 文件信息: 對包含在變量中的文件列表進行操作
10-4. 在for循環(huán)中操作文件
10-5. 在for循環(huán)中省略in [list]部分
10-6. 使用命令替換來產(chǎn)生for循環(huán)的[list]
10-7. 對于二進制文件的grep替換
10-8. 列出系統(tǒng)上的所有用戶
10-9. 在目錄的所有文件中查找源字串
10-10. 列出目錄中所有的符號鏈接
10-11. 將目錄中所有符號鏈接文件的名字保存到一個文件中
10-12. 一個C風(fēng)格的for循環(huán)
10-13. 在batch mode中使用efax
10-14. 簡單的while循環(huán)
10-15. 另一個while循環(huán)
10-16. 多條件的while循環(huán)
10-17. C風(fēng)格的while循環(huán)
10-18. until循環(huán)
10-19. 嵌套循環(huán)
10-20. break和continue命令在循環(huán)中的效果
10-21. 多層循環(huán)的退出
10-22. 多層循環(huán)的continue
10-23. 在實際的任務(wù)中使用"continue N"
10-24. 使用case
10-25. 使用case來創(chuàng)建菜單
10-26. 使用命令替換來產(chǎn)生case變量
10-27. 簡單的字符串匹配
10-28. 檢查輸入字符是否為字母
10-29. 使用select來創(chuàng)建菜單
10-30. 使用函數(shù)中的select結(jié)構(gòu)來創(chuàng)建菜單
11-1. 一個fork出多個自身實例的腳本
11-2. 使用printf的例子
11-3. 使用read來進行變量分配
11-4. 當使用一個不帶變量參數(shù)的read命令時, 將會發(fā)生什么?
11-5. read命令的多行輸入
11-6. 檢測方向鍵
11-7. 通過文件重定向來使用read命令
11-8. 管道輸出到read中的問題
11-9. 修改當前工作目錄
11-10. 使用"let"命令來做算術(shù)運算.
11-11. 展示eval命令的效果
11-12. 強制登出(log-off)
11-13. 另一個"rot13"版本
11-14. 在Perl腳本中使用eval命令來強制變量替換
11-15. 使用set命令來改變腳本的位置參數(shù)
11-16. 反轉(zhuǎn)位置參數(shù)
11-17. 重新分配位置參數(shù)
11-18. "Unsett"一個變量
11-19. 使用export命令來將一個變量傳遞到一個內(nèi)嵌awk的腳本中
11-20. 使用getopts命令來來讀取傳遞給腳本的選項/參數(shù)
11-21. "includ"一個數(shù)據(jù)文件
11-22. 一個(沒什么用的)source自身的腳本
11-23. exec命令的效果
11-24. 一個exec自身的腳本
11-25. 在繼續(xù)處理之前, 等待一個進程的結(jié)束
11-26. 一個結(jié)束自身的腳本程序
12-1. 使用ls命令來創(chuàng)建一個燒錄CDR的內(nèi)容列表
12-2. 到底是Hello還是Good-bye
12-3. 糟糕的文件名, 刪除當前目錄下文件名中包含一些糟糕字符(包括空白的文件.
12-4. 通過文件的inode號來刪除文件
12-5. Logfile: 使用xargs來監(jiān)控系統(tǒng)log
12-6. 把當前目錄下的文件拷貝到另一個文件中
12-7. 通過名字kill進程
12-8. 使用xargs分析單詞出現(xiàn)的頻率
12-9. 使用expr
12-10. 使用date命令
12-11. 分析單詞出現(xiàn)的頻率
12-12. 哪個文件是腳本?
12-13. 產(chǎn)生10-進制隨機數(shù)
12-14. 使用tail命令來監(jiān)控系統(tǒng)log
12-15. 在腳本中模擬"grep"的行為
12-16. 在1913年的韋氏詞典中查找定義
12-17. 檢查列表中單詞的正確性
12-18. 轉(zhuǎn)換大寫: 把一個文件的內(nèi)容全部轉(zhuǎn)換為大寫.
12-19. 轉(zhuǎn)換小寫: 將當前目錄下的所有文全部轉(zhuǎn)換為小寫.
12-20. Du: DOS到UNIX文本文件的轉(zhuǎn)換.
12-21. rot13: rot13, 弱智加密.
12-22. 產(chǎn)生"Crypto-Quote"游戲(譯者: 一種文字游戲)
12-23. 格式化文件列表.
12-24. 使用column來格式化目錄列表
12-25. nl: 一個自己計算行號的腳本.
12-26. manview: 查看格式化的man頁
12-27. 使用cpio來拷貝一個目錄樹
12-28. 解包一個rpm歸檔文件
12-29. 從C文件中去掉注釋
12-30. 瀏覽/usr/X11R6/bin
12-31. 一個"改進過"的strings命令
12-32. 在一個腳本中使用cmp命令來比較兩個文件.
12-33. basename和dirname
12-34. 檢查文件完整性
12-35. Uudecode編碼后的文件
12-36. 查找濫用的鏈接來報告垃圾郵件發(fā)送者
12-37. 分析一個垃圾郵件域
12-38. 獲得一份股票報價
12-39. 更新FC4(Fedora 4)
12-40. 使用ssh
12-41. 一個mail自身的腳本
12-42. 按月償還貸款
12-43. 數(shù)制轉(zhuǎn)換
12-44. 使用"here document"來調(diào)用bc
12-45. 計算圓周率
12-46. 將10進制數(shù)字轉(zhuǎn)換為16進制數(shù)字
12-47. 因子分解
12-48. 計算直角三角形的斜邊
12-49. 使用seq命令來產(chǎn)生循環(huán)參數(shù)
12-50. 字母統(tǒng)計
12-51. 使用getopt來分析命令行選項
12-52. 一個拷貝自身的腳本
12-53. 練習(xí)dd
12-54. 記錄按鍵
12-55. 安全的刪除一個文件
12-56. 文件名產(chǎn)生器
12-57. 將長度單位-米, 轉(zhuǎn)化為英里
12-58. 使用m4
13-1. 設(shè)置一個新密碼
13-2. 設(shè)置一個擦除字符
13-3. 保密密碼: 關(guān)閉終端對于密碼的echo
13-4. 按鍵檢測
13-5. 掃描遠程機器上的identd服務(wù)進程
13-6. 使用pidof命令幫忙kill一個進程
13-7. 檢查一個CD鏡像
13-8. 在一個文件中創(chuàng)建文件系統(tǒng)
13-9. 添加一個新的硬盤驅(qū)動器
13-10. 用umask將輸出文件隱藏起來
13-11. killall, 來自于/etc/rc.d/init.d
14-1. 愚蠢的腳本策略
14-2. 將一個循環(huán)輸出的內(nèi)容設(shè)置到變量中
14-3. 找anagram(回文構(gòu)詞法, 可以將一個有意義的單詞, 變換為1個或多個有意義的單詞, 但是還是原來的子母集合)
16-1. 使用exec重定向stdin
16-2. 使用exec來重定向stdout
16-3. 使用exec在同一個腳本中重定向stdin和stdout
16-4. 避免子shell
16-5. while循環(huán)的重定向
16-6. 重定向while循環(huán)的另一種形式
16-7. 重定向until循環(huán)
16-8. 重定向for循環(huán)
16-9. 重定向for循環(huán)(stdin和stdout都進行重定向)
16-10. 重定向if/then測試結(jié)構(gòu)
16-11. 用于上面例子的"names.data"數(shù)據(jù)文件
16-12. 事件紀錄
17-1. 廣播: 將消息發(fā)送給每個登陸的用戶
17-2. 虛擬文件: 創(chuàng)建一個2行的虛擬文件
17-3. 使用cat的多行消息
17-4. 帶有抑制tab功能的多行消息
17-5. 使用參數(shù)替換的here document
17-6. 上傳一個文件對到"Sunsite"的incoming目錄
17-7. 關(guān)閉參數(shù)替換
17-8. 生成另外一個腳本的腳本
17-9. Here document與函數(shù)
17-10. "匿名"的here Document
17-11. 注釋掉一段代碼塊
17-12. 一個自文檔化(self-documenting)的腳本
17-13. 在一個文件的開頭添加文本
17-14. 分析一個郵箱
20-1. 子shell中的變量作用域
20-2. 列出用戶的配置文件
20-3. 在子shell中進行并行處理
21-1. 在受限模式下運行腳本
23-1. 簡單函數(shù)
23-2. 帶參數(shù)的函數(shù)
23-3. 函數(shù)與傳遞給腳本的命令行參數(shù)
23-4. 將一個間接引用傳遞給函數(shù)
23-5. 對一個傳遞給函數(shù)的參數(shù)進行解除引用的操作
23-6. 再來一次, 對一個傳遞給函數(shù)的參數(shù)進行解除引用的操作
23-7. 取兩個數(shù)中的最大值
23-8. 將阿拉伯數(shù)字轉(zhuǎn)化為羅馬數(shù)字
23-9. 測試函數(shù)最大的返回值
23-10. 比較兩個大整數(shù)
23-11. 從username中取得用戶的真名
23-12. 局部變量的可見范圍
23-13. 使用局部變量的遞歸
23-14. 漢諾塔
24-1. 用在腳本中的別名
24-2. unalias: 設(shè)置與刪除別名
25-1. 使用"與列表"來測試命令行參數(shù)
25-2. 使用"與列表"來測試命令行參數(shù)的另一個例子
25-3. 將"或列表"和"與列表"結(jié)合使用
26-1. 簡單的數(shù)組使用
26-2. 格式化一首詩
26-3. 多種數(shù)組操作
26-4. 用于數(shù)組的字符串操作
26-5. 將腳本的內(nèi)容賦值給數(shù)組
26-6. 一些數(shù)組專用的小道具
26-7. 空數(shù)組與包含空元素的數(shù)組
26-8. 初始化數(shù)組
26-9. 拷貝和連接數(shù)組
26-10. 關(guān)于串聯(lián)數(shù)組的更多信息
26-11. 一位老朋友: 冒泡排序
26-12. 嵌套數(shù)組與間接引用
26-13. 復(fù)雜的數(shù)組應(yīng)用: 埃拉托色尼素數(shù)篩子
26-14. 模擬一個下推堆棧
26-15. 復(fù)雜的數(shù)組應(yīng)用: 探索一個神秘的數(shù)學(xué)序列
26-16. 模擬一個二維數(shù)組, 并使他傾斜
27-1. 利用/dev/tcp來檢修故障
27-2. 找出與給定PID相關(guān)聯(lián)的進程
27-3. 網(wǎng)絡(luò)連接狀態(tài)
28-1. 隱藏令人厭惡的cookie
28-2. 使用/dev/zero來建立一個交換文件
28-3. 創(chuàng)建一個ramdisk
29-1. 一個錯誤腳本
29-2. 缺少關(guān)鍵字
29-3. test24, 另一個錯誤腳本
29-4. 使用"assert"來測試條件
29-5. 捕獲exit
29-6. Control-C之后, 清除垃圾
29-7. 跟蹤一個變量
29-8. 運行多進程(在對稱多處理器(SMP box)的機器上)
31-1. 數(shù)字比較與字符串比較并不相同
31-2. 子shell缺陷
31-3. 將echo的輸出通過管道傳遞給read命令
33-1. shell包裝
33-2. 稍微復(fù)雜一些的shell包裝
33-3. 一個通用的shell包裝, 用來寫日志文件
33-4. 包裝awd腳本的shell包裝
33-5. 另一個包裝awd腳本的shell包裝
33-6. 將Perl嵌入到Bash腳本中
33-7. 將Bash和Perl腳本寫到同一個文件中
33-8. 遞歸調(diào)用自身的(沒用的)腳本
33-9. 遞歸調(diào)用自身的(有用的)腳本
33-10. 另一個遞歸調(diào)用自身的(有用的)腳本
33-11. 一個"彩色的"地址數(shù)據(jù)庫
33-12. 畫一個盒子
33-13. 顯示彩色文本
33-14. "賽馬"游戲
33-15. 返回值小技巧
33-16. 返回多個值的技巧
33-17. 傳遞數(shù)組到函數(shù), 從函數(shù)中返回數(shù)組
33-18. anagram游戲
33-19. 從shell腳本中調(diào)用窗口部件
34-1. 字符串擴展
34-2. 間接變量引用 - 新方法
34-3. 使用間接變量引用的簡單數(shù)據(jù)庫應(yīng)用
34-4. 使用數(shù)組和其他的小技巧來處理4人隨機打牌
A-1. mailformat: 格式化一個e-mail消息
A-2. rn: 一個非常簡單的文件重命名工具
A-3. blank-rename: 重命名包含空白的文件名
A-4. encryptedpw: 使用一個本地加密口令, 上傳到一個ftp服務(wù)器.
A-5. copy-cd: 拷貝一個數(shù)據(jù)CD
A-6. Collatz序列
A-7. days-between: 計算兩個日期之間天數(shù)差
A-8. 構(gòu)造一個"字典"
A-9. Soundex轉(zhuǎn)換
A-10. "Game of Life"
A-11. "Game of Life"的數(shù)據(jù)文件
A-12. behead: 去掉信件與新消息的頭
A-13. ftpget: 通過ftp下載文件
A-14. password: 產(chǎn)生隨機的8個字符的密碼
A-15. fifo: 使用命名管道來做每日的備份
A-16. 使用模操作符來產(chǎn)生素數(shù)
A-17. tree: 顯示目錄樹
A-18. string functions: C風(fēng)格的字符串函數(shù)
A-19. 目錄信息
A-20. 面向?qū)ο髷?shù)據(jù)庫
A-21. hash函數(shù)庫
A-22. 使用hash函數(shù)來給文本上色
A-23. 深入hash函數(shù)
A-24. 掛載USB keychain型的存儲設(shè)備
A-25. 保存weblog
A-26. 保護字符串的字面含義
A-27. 不保護字符串的字面含義
A-28. 鑒定是否是垃圾郵件服務(wù)器
A-29. 垃圾郵件服務(wù)器獵手
A-30. 使得wget更易用
A-31. 一個"podcasting"(譯者: 指的是在互聯(lián)網(wǎng)上發(fā)布音視頻文件, 并允許用戶訂閱并自動接收的方法)腳本
A-32. 基礎(chǔ)回顧
A-33. 一個擴展的cd命令
C-1. 計算字符出現(xiàn)次數(shù)
K-1. .bashrc文件樣本
L-1. VIEWDATA.BAT: DOS批處理文件
L-2. viewdata.sh: 轉(zhuǎn)換自VIEWDATA.BAT的shell腳本
Q-1. 打印服務(wù)器環(huán)境
?http://www.reddragonfly.org/abscn/index.html
總結(jié)
以上是生活随笔為你收集整理的高级Bash脚本编程指南——一本深入学习shell脚本艺术的书籍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SiteSucker Pro for M
- 下一篇: 对抗样本(三)FGSM