在IT產業鏈中開源的理念已成為絕大多數企業的共識。隨著開源技術的不斷進步與創新,云計算也逐步深入到了每個互聯網企業的內部。但是,隨之而來的便是管理成本的提高,大量的物理或者虛擬主機需要管理與維護,如何能夠更好地實現自動化運維,成為企業需要迫切解決的問題。行業中自動化運維的軟件很多,Puppet、Saltstack、Ansible等讓我們在云時代依然可以輕松管理和維護設備與業務,然而像Ansible這樣的自動化工具,雖然已經內置了很多模塊,但是在解決每個企業的個性化需求時還需要編寫自動化腳本。本書將圍繞Linux系統中最常用的Shell腳本語言,講解如何通過Shell編寫自動化、智能化腳本。全書以案例貫穿,對每個知識點都可以找到與之對應的案例,完成本書中的每個案例對于未來在企業中的實際應用極具意義。另外,在本書中配套有很多游戲案例,通過編寫游戲腳本可以極大地提升學習的樂趣。本書中的代碼可以在https://github.com/jacobproject/shell_scripts下載,現在的商業環境是一個充滿競爭的環境,很多企業的業務量在不斷地增長,對服務質量的要求也越來越高。特別是互聯網企業為了滿足客戶更高的需求,提升用戶使用體驗,IT部門需要維護的設備數量從早期的幾臺,發展到了目前的數以萬計,如此龐大的服務器維護量,通常會讓IT管理人員頭疼不已。本書介紹的自動化運維內容可以讓我們快速掌握大規模批量處理的簡單方法。本書從基礎知識講到數據分析、數據過濾等高級應用,適合Linux運維人員、Shell編程愛好者閱讀,可作為Linux運維人員的一本優秀的案頭書。
丁明一達內集團云計算教學研發總監、開源技術推廣者;紅帽認證架構師(RHCA)、紅帽認證高級講師(RHCI);曾任職于中國電信、鵬博士等多家IT企業,并創辦多個企業,十余年IT行業經驗;精通Linux系統、Shell腳本編程、各大云計算產品、Docker容器技術、分布式存儲技術,擁有豐富的虛擬化技術使用經驗,對企業集群存儲環境及高性能、高可用架構有深入的研究,著有暢銷圖書《Linux運維之道》。
第1章 從這里開始,起飛了 1
1.1 腳本文件的書寫格式 1
1.2 腳本文件的各種執行方式 3
1.3 如何在腳本文件中實現數據的輸入與輸出 6
1.4 輸入與輸出的重定向 17
1.5 各種引號的正確使用姿勢 24
1.6 千變萬化的變量 28
1.7 數據過濾與正則表達式 33
1.8 各式各樣的算術運算 40
第2章 人工智能,很人工、很智能的腳本 46
2.1 智能化腳本的基礎之測試 46
2.2 字符串的判斷與比較 47
2.3 整數的判斷與比較 49
2.4 文件屬性的判斷與比較 51
2.5 探究[[]]和[]的區別 55
2.6 實戰案例:系統性能監控腳本 60
2.7 實戰案例:單分支if語句 62
2.8 實戰案例:雙分支if語句 68
2.9 實戰案例:如何監控HTTP服務狀態 72
2.10 實戰案例:多分支if語句 81
2.11 實戰案例:簡單、高效的case語句 87
2.12 實戰案例:編寫Nginx啟動腳本 92
2.13 揭秘模式匹配與通配符、擴展通配符 94
2.14 Shell小游戲之石頭剪刀布 100
第3章 根本停不下來的循環和中斷控制 104
3.1 玩轉for循環語句 104
3.2 實戰案例:猴子吃香蕉的問題 114
3.3 實戰案例:進化版HTTP狀態監控腳本 116
3.4 神奇的循環嵌套 117
3.5 非常重要的IFS 124
3.6 實戰案例:while循環 130
3.7 Shell小游戲之猜隨機數字 134
3.8 實戰案例:如何通過read命令讀取文件中的數據 136
3.9 until和select循環 140
3.10 中斷與退出控制 143
3.11 Shell小游戲之機選雙色球 149
第4章 請開始你的表演,數組、Subshell與函數 152
4.1 強悍的數組 152
4.2 實戰案例:斐波那契數列 157
4.3 實戰案例:網站日志分析腳本 159
4.4 常犯錯誤的SubShell 164
4.5 啟動進程的若干種方式 172
4.6 非常實用的函數功能 176
4.7 變量的作用域與return返回值 179
4.8 實戰案例:多進程的ping腳本 185
4.9 控制進程數量的核心技術——文件描述符和命名管道 187
4.10 實戰案例:一鍵源碼部署LNMP的腳本 197
4.11 遞歸函數 204
4.12 排序算法之冒泡排序 206
4.13 排序算法之快速排序 209
4.14 排序算法之插入排序 213
4.15 排序算法之計數排序 215
4.16 Shell小游戲之單詞拼接puzzle 218
第5章 一大波腳本技巧正向你走來 221
5.1 Shell八大擴展功能之花括號 221
5.2 Shell八大擴展功能之波浪號 223
5.3 Shell八大擴展功能之變量替換 224
5.4 Shell八大擴展功能之命令替換 234
5.5 Shell八大擴展功能之算術替換 234
5.6 Shell八大擴展功能之進程替換 236
5.7 Shell八大擴展功能之單詞切割 238
5.8 Shell八大擴展功能之路徑替換 239
5.9 實戰案例:生成隨機密碼的若干種方式 240
5.10 Shell解釋器的屬性與初始化命令行終端 247
5.11 trap信號捕獲 257
5.12 實戰案例:電子時鐘 259
5.13 Shell小游戲之抓住小老鼠算你贏 263
5.14 實戰案例:腳本排錯技巧 267
5.15 實戰案例:Shell版本的進度條功能 270
5.16 再談參數傳遞之xargs 276
5.17 使用shift移動位置參數 280
5.18 實戰案例:Nginx日志切割腳本 281
第6章 上古神兵利器sed 285
6.1 sed基本指令 285
6.2 sed高級指令 305
6.3 實戰案例:自動化配置vsftpd腳本 318
6.4 實戰案例:自動化配置DHCP腳本 325
6.5 實戰案例:自動化克隆KVM虛擬機腳本 329
6.6 實戰案例:通過libguestfs管理KVM虛擬機腳本 337
6.7 實戰案例:自動化配置SSH安全策略腳本 343
6.8 實戰案例:基于GRUB配置文件修改內核啟動參數腳本 345
6.9 實戰案例:網絡爬蟲腳本 348
6.10 Shell小游戲之點名抽獎器 354
第7章 不可思議的編程語言awk 356
7.1 awk基礎語法 356
7.2 awk條件判斷 374
7.3 awk數組與循環 379
7.4 awk函數 388
7.5 實戰案例:awk版網站日志分析 398
7.6 實戰案例:監控網絡連接狀態 403
7.7 實戰案例:獲取SSH暴力破解攻擊黑名單列表 412
7.8 實戰案例:性能監控腳本 418
7.9 實戰案例:數據庫監控腳本 420
7.10 實戰案例:awk版網絡爬蟲 429