高级Bash脚本编程指南 在线收藏版
生活随笔
收集整理的這篇文章主要介紹了
高级Bash脚本编程指南 在线收藏版
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這本書假定你沒有任何關于腳本或一般程序的編程知識, 但是如果你具備相關的知識, 那么你將很容易就能夠達到中高級的水平. . . 所有這些只是UNIX?浩瀚知識的一小部分. 你可以把本書作為教材, 自學手冊, 或者是關于shell腳本技術的文檔. 書中的練習和樣例腳本中的注釋將會與讀者進行更好的互動, 但是最關鍵的前提是:?想真正學習腳本編程的唯一途徑就是親自動手編寫腳本.這本書也可作為教材來講解一般的編程概念.1.?原書作者致中國讀者(英文)2.?原書作者致中國讀者(譯文)3.?黃毅4.?楊春敏 第一部分.?熱身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.?條件判斷7.1.?條件測試結構7.2.?文件測試操作符7.3.?其他比較操作符7.4.?嵌套的if/then條件測試7.5.?檢測你對測試知識的掌握情況 8.?操作符與相關主題8.1.?操作符8.2.?數字常量 第三部分.?進階9.?變量重游9.1.?內部變量9.2.?操作字符串9.3.?參數替換9.4.?指定變量的類型: 使用declare或者typeset9.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.?使用exec16.2.?代碼塊重定向16.3.?重定向的應用 17.?Here Document17.1.?Here String 18.?休息片刻 第四部分.?高級主題19.?正則表達式19.1.?一份簡要的正則表達式介紹19.2.?通配(globbing) 20.?子shell21.?受限shell22.?進程替換23.?函數23.1.?復雜函數和函數復雜性23.2.?局部變量23.3.?不使用局部變量的遞歸 24.?別名25.?列表結構26.?數組27.?/dev和/proc27.1.?/dev27.2.?/proc 28.?Zero與Null29.?調試30.?選項31.?陷阱32.?腳本編程風格32.1.?非官方的Shell腳本編寫風格 33.?雜項33.1.?交互與非交互式的交互與非交互式的shell和腳本33.2.?Shell包裝33.3.?測試和比較: 一種可選的方法33.4.?遞歸33.5.?將腳本"彩色化"33.6.?優化33.7.?各種小技巧33.8.?安全問題33.9.?可移植性問題33.10.?Windows下的shell腳本 34.?Bash, 版本2與版本334.1.?Bash, 版本234.2.?Bash, 版本3 35.?后記35.1.?作者后記35.2.?關于作者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.?一個學習Sed和Awk的小手冊C.1.?SedC.2.?Awk D.?帶有特殊含義的退出碼E.?I/O和I/O重定向的詳細介紹F.?命令行選項F.1.?標準命令行選項F.2.?Bash命令行選項 G.?重要的文件H.?重要的系統目錄I.?本地化J.?歷史命令K.?一個簡單的.bashrc文件L.?將DOS批處理文件轉換為Shell腳本M.?練習M.1.?分析腳本M.2.?編寫腳本 N.?修訂記錄O.?翻譯版修訂記錄P.?鏡像站點Q.?To Do列表R.?版權表格清單11-1.?作業標識符30-1.?Bash選項33-1.?轉義序列中顏色與數值的對應B-1.?特殊的shell變量B-2.?測試操作: 二元比較B-3.?文件類型的測試操作B-4.?參數替換和擴展B-5.?字符串操作B-6.?一些結構的匯總C-1.?基本sed操作C-2.?sed操作符舉例D-1.?"保留的"退出碼L-1.?批處理文件關鍵字 / 變量 / 操作符, 和等價的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.?將一個代碼塊的結果保存到文件3-3.?在后臺運行一個循環3-4.?備份最后一天所有修改的文件4-1.?變量賦值和替換4-2.?簡單的變量賦值4-3.?簡單和復雜, 兩種類型的變量賦值4-4.?整型還是字符串?4-5.?位置參數4-6.?wh,?whois節點名字查詢4-7.?使用shift命令5-1.?echo出一些詭異變量5-2.?轉義符6-1.?退出/退出狀態碼6-2.?反轉一個條件的用法!7-1.?什么是真?7-2.?test,?/usr/bin/test,?[ ], 和/usr/bin/[都是等價命令7-3.?算術測試需要使用(( ))7-4.?測試那些斷掉的鏈接文件7-5.?算術比較與字符串比較7-6.?檢查字符串是否為null7-7.?zmore8-1.?最大公約數8-2.?使用算術操作符8-3.?使用&&和||進行混合條件測試8-4.?數字常量表示法9-1.?$IFS與空白字符9-2.?定時輸入9-3.?再來一個, 定時輸入9-4.?定時read9-5.?我是root么?9-6.?arglist: 通過$*和$@列出所有的參數9-7.?$*和$@的不一致的行為9-8.?當$IFS為空時的$*和$@9-9.?下劃線變量9-10.?在一個文本文件的段落之間插入空行9-11.?轉換圖片文件格式, 同時更改文件名9-12.?將音頻流文件轉換為ogg各式的文件9-13.?模擬getopt9-14.?提取字符串的另一種方法9-15.?使用參數替換和錯誤消息9-16.?參數替換和"usage"消息(譯者注: 通常就是幫助信息)9-17.?變量長度9-18.?參數替換中的模式匹配9-19.?修改文件擴展名:9-20.?使用模式匹配來解析任意字符串9-21.?對字符串的前綴和后綴使用匹配模式9-22.?使用declare來指定變量的類型9-23.?間接引用9-24.?傳遞一個間接引用給awk9-25.?產生隨機整數9-26.?從一幅撲克牌中取出一張隨機的牌9-27.?兩個指定值之間的隨機數9-28.?用隨機數來搖單個骰子9-29.?重新分配隨機數種子9-30.?使用awk來產生偽隨機數9-31.?C語言風格的變量操作10-1.?一個簡單的for循環10-2.?每個[list]元素中都帶有兩個參數的for循環10-3.?文件信息:?對包含在變量中的文件列表進行操作10-4.?在for循環中操作文件10-5.?在for循環中省略in [list]部分10-6.?使用命令替換來產生for循環的[list]10-7.?對于二進制文件的grep替換10-8.?列出系統上的所有用戶10-9.?在目錄的所有文件中查找源字串10-10.?列出目錄中所有的符號鏈接10-11.?將目錄中所有符號鏈接文件的名字保存到一個文件中10-12.?一個C風格的for循環10-13.?在batch mode中使用efax10-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.?多層循環的continue10-23.?在實際的任務中使用"continue N"10-24.?使用case10-25.?使用case來創建菜單10-26.?使用命令替換來產生case變量10-27.?簡單的字符串匹配10-28.?檢查輸入字符是否為字母10-29.?使用select來創建菜單10-30.?使用函數中的select結構來創建菜單11-1.?一個fork出多個自身實例的腳本11-2.?使用printf的例子11-3.?使用read來進行變量分配11-4.?當使用一個不帶變量參數的read命令時, 將會發生什么?11-5.?read命令的多行輸入11-6.?檢測方向鍵11-7.?通過文件重定向來使用read命令11-8.?管道輸出到read中的問題11-9.?修改當前工作目錄11-10.?使用"let"命令來做算術運算.11-11.?展示eval命令的效果11-12.?強制登出(log-off)11-13.?另一個"rot13"版本11-14.?在Perl腳本中使用eval命令來強制變量替換11-15.?使用set命令來改變腳本的位置參數11-16.?反轉位置參數11-17.?重新分配位置參數11-18.?"Unsett"一個變量11-19.?使用export命令來將一個變量傳遞到一個內嵌awk的腳本中11-20.?使用getopts命令來來讀取傳遞給腳本的選項/參數11-21.?"includ"一個數據文件11-22.?一個(沒什么用的)source自身的腳本11-23.?exec命令的效果11-24.?一個exec自身的腳本11-25.?在繼續處理之前, 等待一個進程的結束11-26.?一個結束自身的腳本程序12-1.?使用ls命令來創建一個燒錄CDR的內容列表12-2.?到底是Hello還是Good-bye12-3.?糟糕的文件名, 刪除當前目錄下文件名中包含一些糟糕字符(包括空白的文件.12-4.?通過文件的inode號來刪除文件12-5.?Logfile: 使用xargs來監控系統log12-6.?把當前目錄下的文件拷貝到另一個文件中12-7.?通過名字kill進程12-8.?使用xargs分析單詞出現的頻率12-9.?使用expr12-10.?使用date命令12-11.?分析單詞出現的頻率12-12.?哪個文件是腳本?12-13.?產生10-進制隨機數12-14.?使用tail命令來監控系統log12-15.?在腳本中模擬"grep"的行為12-16.?在1913年的韋氏詞典中查找定義12-17.?檢查列表中單詞的正確性12-18.?轉換大寫: 把一個文件的內容全部轉換為大寫.12-19.?轉換小寫: 將當前目錄下的所有文全部轉換為小寫.12-20.?Du: DOS到UNIX文本文件的轉換.12-21.?rot13: rot13, 弱智加密.12-22.?產生"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/bin12-31.?一個"改進過"的strings命令12-32.?在一個腳本中使用cmp命令來比較兩個文件.12-33.?basename和dirname12-34.?檢查文件完整性12-35.?Uudecode編碼后的文件12-36.?查找濫用的鏈接來報告垃圾郵件發送者12-37.?分析一個垃圾郵件域12-38.?獲得一份股票報價12-39.?更新FC4(Fedora 4)12-40.?使用ssh12-41.?一個mail自身的腳本12-42.?按月償還貸款12-43.?數制轉換12-44.?使用"here document"來調用bc12-45.?計算圓周率12-46.?將10進制數字轉換為16進制數字12-47.?因子分解12-48.?計算直角三角形的斜邊12-49.?使用seq命令來產生循環參數12-50.?字母統計12-51.?使用getopt來分析命令行選項12-52.?一個拷貝自身的腳本12-53.?練習dd12-54.?記錄按鍵12-55.?安全的刪除一個文件12-56.?文件名產生器12-57.?將長度單位-米, 轉化為英里12-58.?使用m413-1.?設置一個新密碼13-2.?設置一個擦除字符13-3.?保密密碼: 關閉終端對于密碼的echo13-4.?按鍵檢測13-5.?掃描遠程機器上的identd服務進程13-6.?使用pidof命令幫忙kill一個進程13-7.?檢查一個CD鏡像13-8.?在一個文件中創建文件系統13-9.?添加一個新的硬盤驅動器13-10.?用umask將輸出文件隱藏起來13-11.?killall, 來自于/etc/rc.d/init.d14-1.?愚蠢的腳本策略14-2.?將一個循環輸出的內容設置到變量中14-3.?找anagram(回文構詞法, 可以將一個有意義的單詞, 變換為1個或多個有意義的單詞, 但是還是原來的子母集合)16-1.?使用exec重定向stdin16-2.?使用exec來重定向stdout16-3.?使用exec在同一個腳本中重定向stdin和stdout16-4.?避免子shell16-5.?while循環的重定向16-6.?重定向while循環的另一種形式16-7.?重定向until循環16-8.?重定向for循環16-9.?重定向for循環(stdin和stdout都進行重定向)16-10.?重定向if/then測試結構16-11.?用于上面例子的"names.data"數據文件16-12.?事件紀錄17-1.?廣播: 將消息發送給每個登陸的用戶17-2.?虛擬文件: 創建一個2行的虛擬文件17-3.?使用cat的多行消息17-4.?帶有抑制tab功能的多行消息17-5.?使用參數替換的here document17-6.?上傳一個文件對到"Sunsite"的incoming目錄17-7.?關閉參數替換17-8.?生成另外一個腳本的腳本17-9.?Here document與函數17-10.?"匿名"的here Document17-11.?注釋掉一段代碼塊17-12.?一個自文檔化(self-documenting)的腳本17-13.?在一個文件的開頭添加文本17-14.?分析一個郵箱20-1.?子shell中的變量作用域20-2.?列出用戶的配置文件20-3.?在子shell中進行并行處理21-1.?在受限模式下運行腳本23-1.?簡單函數23-2.?帶參數的函數23-3.?函數與傳遞給腳本的命令行參數23-4.?將一個間接引用傳遞給函數23-5.?對一個傳遞給函數的參數進行解除引用的操作23-6.?再來一次, 對一個傳遞給函數的參數進行解除引用的操作23-7.?取兩個數中的最大值23-8.?將阿拉伯數字轉化為羅馬數字23-9.?測試函數最大的返回值23-10.?比較兩個大整數23-11.?從username中取得用戶的真名23-12.?局部變量的可見范圍23-13.?使用局部變量的遞歸23-14.?漢諾塔24-1.?用在腳本中的別名24-2.?unalias: 設置與刪除別名25-1.?使用"與列表"來測試命令行參數25-2.?使用"與列表"來測試命令行參數的另一個例子25-3.?將"或列表"和"與列表"結合使用26-1.?簡單的數組使用26-2.?格式化一首詩26-3.?多種數組操作26-4.?用于數組的字符串操作26-5.?將腳本的內容賦值給數組26-6.?一些數組專用的小道具26-7.?空數組與包含空元素的數組26-8.?初始化數組26-9.?拷貝和連接數組26-10.?關于串聯數組的更多信息26-11.?一位老朋友:?冒泡排序26-12.?嵌套數組與間接引用26-13.?復雜的數組應用:?埃拉托色尼素數篩子26-14.?模擬一個下推堆棧26-15.?復雜的數組應用:?探索一個神秘的數學序列26-16.?模擬一個二維數組, 并使他傾斜27-1.?利用/dev/tcp來檢修故障27-2.?找出與給定PID相關聯的進程27-3.?網絡連接狀態28-1.?隱藏令人厭惡的cookie28-2.?使用/dev/zero來建立一個交換文件28-3.?創建一個ramdisk29-1.?一個錯誤腳本29-2.?缺少關鍵字29-3.?test24, 另一個錯誤腳本29-4.?使用"assert"來測試條件29-5.?捕獲exit29-6.?Control-C之后, 清除垃圾29-7.?跟蹤一個變量29-8.?運行多進程(在對稱多處理器(SMP box)的機器上)31-1.?數字比較與字符串比較并不相同31-2.?子shell缺陷31-3.?將echo的輸出通過管道傳遞給read命令33-1.?shell包裝33-2.?稍微復雜一些的shell包裝33-3.?一個通用的shell包裝, 用來寫日志文件33-4.?包裝awd腳本的shell包裝33-5.?另一個包裝awd腳本的shell包裝33-6.?將Perl嵌入到Bash腳本中33-7.?將Bash和Perl腳本寫到同一個文件中33-8.?遞歸調用自身的(沒用的)腳本33-9.?遞歸調用自身的(有用的)腳本33-10.?另一個遞歸調用自身的(有用的)腳本33-11.?一個"彩色的"地址數據庫33-12.?畫一個盒子33-13.?顯示彩色文本33-14.?"賽馬"游戲33-15.?返回值小技巧33-16.?返回多個值的技巧33-17.?傳遞數組到函數, 從函數中返回數組33-18.?anagram游戲33-19.?從shell腳本中調用窗口部件34-1.?字符串擴展34-2.?間接變量引用 - 新方法34-3.?使用間接變量引用的簡單數據庫應用34-4.?使用數組和其他的小技巧來處理4人隨機打牌A-1.?mailformat: 格式化一個e-mail消息A-2.?rn: 一個非常簡單的文件重命名工具A-3.?blank-rename: 重命名包含空白的文件名A-4.?encryptedpw: 使用一個本地加密口令, 上傳到一個ftp服務器.A-5.?copy-cd: 拷貝一個數據CDA-6.?Collatz序列A-7.?days-between: 計算兩個日期之間天數差A-8.?構造一個"字典"A-9.?Soundex轉換A-10.?"Game of Life"A-11.?"Game of Life"的數據文件A-12.?behead: 去掉信件與新消息的頭A-13.?ftpget: 通過ftp下載文件A-14.?password: 產生隨機的8個字符的密碼A-15.?fifo: 使用命名管道來做每日的備份A-16.?使用模操作符來產生素數A-17.?tree: 顯示目錄樹A-18.?string functions: C風格的字符串函數A-19.?目錄信息A-20.?面向對象數據庫A-21.?hash函數庫A-22.?使用hash函數來給文本上色A-23.?深入hash函數A-24.?掛載USB keychain型的存儲設備A-25.?保存weblogA-26.?保護字符串的字面含義A-27.?不保護字符串的字面含義A-28.?鑒定是否是垃圾郵件服務器A-29.?垃圾郵件服務器獵手A-30.?使得wget更易用A-31.?一個"podcasting"(譯者: 指的是在互聯網上發布音視頻文件, 并允許用戶訂閱并自動接收的方法)腳本A-32.?基礎回顧A-33.?一個擴展的cd命令C-1.?計算字符出現次數K-1.?.bashrc文件樣本L-1.?VIEWDATA.BAT: DOS批處理文件L-2.?viewdata.sh: 轉換自VIEWDATA.BAT的shell腳本Q-1.?打印服務器環境
本文檔的最新版本是作為一個歸檔文件bzip2-ed,?"tar包"來發布的, 其中還包括SGML源代碼和編譯好的HTML版本. 讀者可以從作者的主頁上下載.?pdf版本也可以從作者的主頁上下載. 查看change log來查看校訂歷史.
目錄序總結
以上是生活随笔為你收集整理的高级Bash脚本编程指南 在线收藏版的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sip 接听后没有声音
- 下一篇: MAC 用配置设置解决vscode中文乱