第1章初識Shell1
1.1Shell如何連接用戶和內核1
1.2Shell連接其他程序2
1.3Shell同樣支持編程2
1.4Shell是一種腳本語言3
1.5Shell的各種版本3
1.5.1Bourne Shell4
1.5.2C Shell4
1.5.3Bash Shell4
1.5.4查看Shell版本4
1.6Shell是運維工程師必備技能5
1.7Shell變量的定義7
1.8Shell變量的類型7
1.8.1自定義變量7
1.8.2環境變量8
1.8.3位置變量9
1.8.4預定義變量9
1.9Shell變量的賦值10
1.9.1直接賦值10
1.9.2從鍵盤讀入賦值10
1.9.3使用命令行參數賦值11
1.9.4利用命令的輸出結果賦值11
1.9.5從文件中讀入數據賦值12
1.10Shell變量的運算13
1.10.1expr數值運算命令13
1.10.2“(())“或“[ ]”數值運算命令13
1.10.3let數值運算命令14
1.10.4Shell小數運算14
1.11Shell變量的刪除、替換和替代14
1.11.1Shell變量的刪除14
1.11.2Shell變量的替換15
1.11.3Shell變量的替代16
1.12Shell變量的自增16
1.13Shell變量中的特殊符號17
1.14本章小結21
1.15習題21
第2章Shell條件測試23
2.1Shell中的條件測試語句23
2.1.1文件測試23
2.1.2整數測試24
2.1.3字符串測試25
2.1.4邏輯運算符26
2.2if條件語句27
2.2.1if單分支27
2.2.2if雙分支27
2.2.3if多分支28
2.2.4if語句配置yum源實戰腳本29
2.3case條件語句30
2.4case條件語句案例實戰31
2.4.1case刪除用戶判斷31
2.4.2case實現繫統工具箱的使用32
2.4.3case實現jumpserver33
2.4.4case實現多版本PHP安裝35
2.5本章小結37
2.6習題37
第3章Shell循環39
3.1for循環語法結構39
3.2for循環語句案例實戰40
3.2.1for循環語句實現批量主機ping探測40
3.2.2for循環語句實現批量用戶創建41
3.2.3for循環語句實現文件中批量用戶創建42
3.3expect交互式公鑰推送43
3.3.1expect實現非交互登錄43
3.3.2expect實現非交互傳輸文件44
3.3.3expect實現批量主機公鑰推送45
3.3.4for循環語句實現批量主機密碼修改48
3.3.5for循環語句實現批量遠程主機SSH配置49
3.4while循環和until循環50
3.4.1while循環語句語法結構51
3.4.2until循環語句語法結構51
3.5循環語句案例實戰51
3.5.1while循環語句實現批量用戶創建51
3.5.2while循環語句和until循環語句測試遠程主機連接52
3.5.3for、while、until終極對決53
3.6Shell的並發控制55
3.6.1for循環實現Shell的並發控制55
3.6.2for後臺循環實現Shell的並發控制56
3.7Shell的並發控制案例實戰56
3.7.1for循環實現Shell的並發控制案例實戰56
3.7.2for後臺循環實現Shell的並發控制案例實戰57
3.7.3Linux管道實現Shell的並發控制案例實戰58
3.8本章小結59
3.9習題60
第4章Shell數組61
4.1Shell數組的基本概念61
4.2Shell數組的類型61
4.2.1普通數組62
4.2.2關聯數組62
4.2.3定義數組的類型62
4.3Shell數組的定義62
4.3.1直接定義數組63
4.3.2下標定義數組63
4.3.3間接定義數組63
4.3.4從文件中讀入定義數組64
4.4Shell數組的遍歷及賦值64
4.4.1常見的訪問Shell數組表達式64
4.4.2while循環實現Shell數組的遍歷65
4.4.3for循環實現Shell數組的遍歷66
4.4.4Shell數組的賦值66
4.4.5Shell數組的刪除67
4.4.6Shell數組的截取和替換67
4.5Shell數組腳本實戰68
4.5.1array數組實現性別統計68
4.5.2array數組統計不同類型Shell的數量69
4.5.3array數組統計TCP連接狀態數量70
4.6本章小結71
4.7習題71
第5章Shell編程中函數的用法73
5.1Shell函數的概念73
5.2Shell函數的語法74
5.3Shell函數的調用74
5.3.1Shell函數的傳參介紹74
5.3.2Shell函數的返回值介紹75
5.4Shell函數的應用實戰75
5.4.1腳本中調用Shell函數75
5.4.2Shell函數的返回值77
5.4.3Shell函數的位置參數78
5.4.4Shell函數數組變量的傳參78
5.4.5Shell函數的返回輸出數組變量79
5.5Shell內置命令和外部命令的區別80
5.6Shell內置命令80
5.6.1循環結構中break、continue、return和exit的區別80
5.6.2break、continue、exit命令執行流程圖81
5.6.3break命令和continue命令案例實戰82
5.6.4shift命令84
5.7本章小結84
5.8習題85
第6章正則表達式86
6.1正則表達式概念86
6.2正則字符87
6.3正則表達式語法88
6.4正則表達式運算符優先級89
6.5正則表達式匹配規則90
6.5.1基本模式匹配90
6.5.2字符簇90
6.6grep命令92
6.6.1grep命令簡介92
6.6.2grep命令語法格式93
6.6.3grep命令使用方式93
6.6.4grep命令結合正則表達式使用95
6.6.5grep命令結合正則表達式案例實戰97
6.7本章小結100
6.8習題101
第7章流編輯器sed102
7.1sed工作原理102
7.2sed語法格式及特點103
7.2.1sed語法格式103
7.2.2sed特點104
7.3sed用法104
7.4sed支持正則表達式105
7.5sed案例實戰108
7.6本章小結114
7.7習題114
第8章awk文本處理工具116
8.1awk簡介116
8.2awk工作流程117
8.3awk工作原理117
8.4awk語法格式118
8.4.1awk基本語法格式118
8.4.2awk語法選項實例118
8.5awk內置變量123
8.6awk模式128
8.7awk流程控制131
8.7.1if條件語句132
8.7.2while循環133
8.7.3for循環135
8.7.4break命令、continue命令、exit命令136
8.7.5數組137
8.8awk中的函數141
8.8.1awk內建函數141
8.8.2awk自定義函數142
8.9本章小結144
8.10習題145
第9章繫統性能分析146
9.1常見的性能分析工具146
9.1.1vmstat命令146
9.1.2sar繫統活動取樣命令149
9.1.3iostat性能分析命令150
9.1.4top性能監控命令152
9.1.5ps實時監控繫統命令155
9.1.6netstat監控網絡狀態命令160
9.1.7ifconfig查看地址命令166
9.1.8ss顯示連接狀態命令170
9.1.9free顯示內存命令176
9.1.10df查看磁盤占用命令178
9.1.11dstat動態顯示繫統負載命令181
9.1.12iotop查看I/O命令184
9.1.13iftop實時監控命令185
9.2項目繫統資源性能瓶頸腳本187
9.3本章小結197
9.4習題197
第10章項目實戰集199
10.1服務器存活狀態腳本項目199
10.2Nginx日志分析項目201
10.3Zabbix信息收集項目208
10.3.1Zabbix監控TCP狀態信息收集208
10.3.2Zabbix監控MySQL狀態信息收集210
10.3.3Zabbix監控內存信息收集213
10.4多機部署MySQL數據庫項目214
10.5多機部署LNMP項目216
10.6本章小結218
10.7習題218