Shell從入門到精通(第2版)
張春曉
相關主題
商品描述
目錄大綱
第1篇 認識Shell編程
第1章 Shell入門基礎 2
1.1 為什麽學習和使用Shell編程 2
1.2 Shell簡介 2
1.2.1 Shell的起源 3
1.2.2 Shell的功能 4
1.2.3 Shell的分類 4
1.3 Shell的特性 5
1.3.1 交互式程序 5
1.3.2 創建腳本 6
1.3.3 設置可執行腳本 6
1.4 向腳本傳遞參數 7
1.4.1 Shell腳本的參數 8
1.4.2 參數的擴展 9
1.5 第一個Shell程序 10
1.5.1 Shell腳本的基本元素 10
1.5.2 指定命令解讀器 11
1.5.3 Shell腳本的註釋和風格 12
1.5.4 如何執行Shell程序 13
1.5.5 Shell程序的退出狀態 13
1.6 小結 15
1.7 習題 15
第2章 Shell編程環境的搭建 17
2.1 在不同的操作系統上搭建Shell編程環境 17
2.1.1 在Windows上搭建Shell編程環境 17
2.1.2 在Linux上搭建Shell編程環境 20
2.1.3 在FreeBSD上搭建Shell編程環境 22
2.2 編輯器的選擇 23
2.2.1 圖形化編輯器 24
2.2.2 vi(vim)編輯器 24
2.3 系統環境的搭建 30
2.3.1 Shell配置文件 30
2.3.2 命令別名 33
2.4 小結 34
2.5 習題 34
第2篇 Shell編程核心技術
第3章 變量和引用 36
3.1 深入理解變量 36
3.1.1 什麽是變量 36
3.1.2 變量的命名 36
3.1.3 變量的類型 37
3.1.4 變量的定義 39
3.1.5 變量和引號 42
3.1.6 變量的作用域 42
3.1.7 系統變量 45
3.1.8 環境變量 47
3.2 變量的賦值和清空 48
3.2.1 變量的賦值 49
3.2.2 引用變量的值 49
3.2.3 清除變量 50
3.3 引用和替換 51
3.3.1 引用 51
3.3.2 全引用 52
3.3.3 部分引用 52
3.3.4 命令替換 53
3.3.5 轉義 54
3.4 小結 54
3.5 習題 54
第4章 條件測試和判斷語句 56
4.1 條件測試 56
4.1.1 條件測試的基本語法 56
4.1.2 字符串測試 57
4.1.3 整數測試 60
4.1.4 文件測試 62
4.1.5 邏輯操作符 65
4.2 條件判斷語句 66
4.2.1 使用簡單的if語句進行條件判斷 66
4.2.2 使用if…else語句進行流程控制 69
4.2.3 使用if…elif語句進行多條件判斷 71
4.2.4 使用exit語句退出程序 72
4.3 多條件判斷語句case 74
4.3.1 case的基本語法 74
4.3.2 利用case語句處理選項參數 75
4.3.3 利用case語句處理用戶的輸入 77
4.4 運算符 78
4.4.1 算術運算符 78
4.4.2 位運算符 82
4.4.3 自增或自減運算符 84
4.4.4 數字常量的進制 85
4.5 小結 86
4.6 習題 86
第5章 循環結構 88
5.1 步進循環語句for 88
5.1.1 帶列表的for循環語句 88
5.1.2 不帶列表的for循環語句 93
5.1.3 類C風格的for循環語句 93
5.1.4 使用for循環語句處理數組 95
5.2 until循環語句 96
5.2.1 until語句的基本語法 96
5.2.2 利用until語句批量增加用戶 97
5.3 while循環語句 99
5.3.1 while語句的基本語法 99
5.3.2 通過計數器控制while循環結構 99
5.3.3 通過結束標記控制while循環結構 100
5.3.4 理解while語句與until語句的區別 101
5.4 嵌套循環 102
5.5 利用break和continue語句控制循環 103
5.5.1 利用break語句控制循環 103
5.5.2 利用continue語句控制循環 105
5.5.3 分析break語句和continue語句的區別 106
5.6 小結 109
5.7 習題 109
第6章 函數 111
6.1 函數的基礎知識 111
6.1.1 什麽是函數 111
6.1.2 函數的定義 112
6.1.3 函數的調用 113
6.1.4 函數鏈接 114
6.1.5 函數的返回值 115
6.1.6 函數和別名 117
6.1.7 全局變量和局部變量 118
6.2 函數的參數 120
6.2.1 包含參數的函數的調用方法 120
6.2.2 獲取函數參數的個數 121
6.2.3 通過位置變量接收參數值 122
6.2.4 移動位置參數 122
6.2.5 通過getopts接收函數的參數 123
6.2.6 傳遞間接參數 124
6.2.7 通過全局變量傳遞數據 126
6.2.8 傳遞數組參數 126
6.3 函數庫文件 128
6.3.1 函數庫文件的定義 128
6.3.2 函數庫文件的調用 129
6.4 遞歸函數 130
6.5 小結 132
6.6 習題 133
第7章 數組 134
7.1 定義數組 134
7.1.1 通過指定元素值定義數組 134
7.1.2 通過declare語句定義數組 135
7.1.3 通過元素值集合定義數組 136
7.1.4 通過鍵值對定義數組 137
7.1.5 數組和普通變量 138
7.2 數組的賦值 139
7.2.1 按索引為元素賦值 139
7.2.2 通過集合為數組賦值 140
7.2.3 在數組末尾追加新元素 141
7.2.4 通過循環為數組元素賦值 142
7.3 訪問數組 142
7.3.1 訪問第1個數組元素 142
7.3.2 通過下標訪問數組元素 143
7.3.3 計算數組的長度 143
7.3.4 通過循環遍歷數組元素 145
7.3.5 引用所有的數組元素 145
7.3.6 以切片方式獲取部分數組元素 146
7.3.7 數組元素的替換 148
7.4 刪除數組 149
7.4.1 刪除指定的數組元素 149
7.4.2 刪除整個數組 150
7.5 數組的其他操作 151
7.5.1 復制數組 151
7.5.2 連接數組 151
7.5.3 將文件內容加載到數組中 152
7.6 小結 153
7.7 習題 153
第8章 正則表達式 154
8.1 正則表達式簡介 154
8.1.1 為什麽使用正則表達式 154
8.1.2 如何學習正則表達式 155
8.1.3 如何實踐正則表達式 156
8.2 正則表達式基礎 156
8.2.1 正則表達式的原理 156
8.2.2 標準正則表達式 157
8.2.3 擴展正則表達式 161
8.2.4 Perl正則表達式 163
8.2.5 正則表達式的字符集 164
8.3 正則表達式的應用 165
8.3.1 匹配單個字符 166
8.3.2 匹配多個字符 168
8.3.3 匹配字符串的開頭或者結尾 170
8.3.4 運算符的優先級 171
8.3.5 子表達式 172
8.3.6 通配符 174
8.4 grep命令 175
8.4.1 grep命令的基本語法 175
8.4.2 grep命令族簡介 176
8.5 小結 177
8.6 習題 177
第9章 文本處理 178
9.1 使用echo命令輸出文本 178
9.1.1 顯示普通字符串 178
9.1.2 顯示轉義字符 179
9.1.3 顯示變量 181
9.1.4 換行和不換行 182
9.1.5 顯示命令的執行結果 183
9.1.6 echo命令的執行結果重定向 183
9.2 文本格式化的輸出 184
9.2.1 使用UNIX製表符 184
9.2.2 使用fold命令格式化行 185
9.2.3 使用fmt命令格式化段落 187
9.2.4 使用rev命令反轉字符順序 189
9.2.5 使用pr命令格式化文本頁 190
9.3 使用sort命令對文本進行排序 193
9.3.1 sort命令的基本用法 193
9.3.2 使用單個關鍵字進行排序 194
9.3.3 根據指定的列進行排序 198
9.3.4 根據關鍵字進行降序排序 198
9.3.5 數值列的排序 200
9.3.6 自定義列分隔符 201
9.3.7 刪除重復的行 202
9.3.8 根據多個關鍵字進行排序 202
9.3.9 使用sort命令合並文件 204
9.4 文本的統計 205
9.4.1 輸出包含行號的文本行 205
9.4.2 統計行數 207
9.4.3 統計單詞數和字符數 209
9.5 使用cut命令選取文本列 209
9.5.1 cut命令及其語法 210
9.5.2 選擇指定的文本列 211
9.5.3 選擇指定數量的字符 212
9.5.4 排除不包含列分隔符的行 213
9.6 使用paste命令拼接文本列 214
9.6.1 paste命令及其語法 214
9.6.2 自定義列分隔符 216
9.6.3 拼接指定的文本列 216
9.7 使用join命令連接文本列 217
9.7.1 join命令及其語法 217
9.7.2 指定連接關鍵字列 219
9.7.3 內連接文本文件 220
9.7.4 左連接文本文件 220
9.7.5 右連接文本文件 221
9.7.6 全連接文本文件 222
9.7.7 自定義輸出列 222
9.8 使用tr命令替換文件內容 223
9.8.1 tr命令及其語法 223
9.8.2 去除重復出現的字符 224
9.8.3 刪除空行 225
9.8.4 大小寫轉換 225
9.8.5 刪除指定的字符 226
9.9 小結 227
9.10 習題 227
第10章 流編輯器 229
10.1 sed命令簡介 229
10.1.1 sed命令的基本語法 229
10.1.2 sed命令的工作方式 231
10.1.3 使用行號定位文本行 231
10.1.4 使用正則表達式定位文本行 232
10.2 sed命令的常用操作 233
10.2.1 sed命令的基本語法 233
10.2.2 選擇文本 234
10.2.3 替換文本 236
10.2.4 刪除文本 239
10.2.5 追加文本 242
10.2.6 插入文本 243
10.3 組合命令 243
10.3.1 使用-e選項執行多個子命令 244
10.3.2 使用分號執行多個子命令 244
10.3.3 對一個地址使用多個子命令 245
10.3.4 sed腳本文件 246
10.4 小結 248
10.5 習題 249
第11章 文本處理利器awk命令 250
11.1 awk命令簡介 250
11.1.1 awk命令的功能 250
11.1.2 awk命令的基本語法 251
11.1.3 awk命令的工作流程 252
11.1.4 執行awk命令的幾種方式 252
11.2 awk命令的模式匹配 254
11.2.1 關系表達式 254
11.2.2 正則表達式 255
11.2.3 混合模式 256
11.2.4 區間模式 256
11.2.5 BEGIN模式 257
11.2.6 END模式 258
11.3 變量 259
11.3.1 變量的定義和引用 259
11.3.2 系統內置變量 260
11.3.3 記錄分隔符和字段分隔符 260
11.3.4 記錄和字段的引用 263
11.4 運算符和表達式 264
11.4.1 算術運算符 264
11.4.2 賦值運算符 265
11.4.3 條件運算符 266
11.4.4 邏輯運算符 266
11.4.5 關系運算符 267
11.4.6 其他運算符 268
11.5 函數 268
11.5.1 字符串函數 268
11.5.2 算術函數 272
11.6 數組 273
11.6.1 數組的定義和賦值 273
11.6.2 遍歷數組 274
11.7 流程控制 276
11.7.1 if語句 276
11.7.2 while語句 277
11.7.3 do…while語句 278
11.7.4 for語句 279
11.7.5 break語句 280
11.7.6 continue語句 281
11.7.7 next語句 282
11.7.8 exit語句 283
11.8 awk命令格式化的輸出 283
11.8.1 基本的print語句 283
11.8.2 格式化輸出printf()函數 283
11.8.3 使用sprintf()函數生成格式化字符串 284
11.9 awk命令與Shell的交互 285
11.9.1 通過管道實現與Shell的交換 285
11.9.2 通過system()函數實現與Shell的交互 286
11.10 小結 287
11.11 習題 287
第12章 文件操作 288
12.1 文件的基礎知識 288
12.1.1 列出文件 288
12.1.2 文件的類型 289
12.1.3 文件的權限 292
12.2 查找文件 293
12.2.1 find命令及其語法 293
12.2.2 find命令——路徑 294
12.2.3 find命令——測試 295
12.2.4 find命令——使用!運算符對測試求反 298
12.2.5 find命令——處理文件權限錯誤信息 298
12.2.6 find命令——動作 299
12.3 比較文件 300
12.3.1 使用comm比較文件 301
12.3.2 使用diff比較文件 304
12.4 文件描述符 307
12.4.1 什麽是文件描述符 307
12.4.2 標準輸入、標準輸出和標準錯誤 308
12.5 重定向 309
12.5.1 輸出重定向(覆蓋) 309
12.5.2 輸出重定向(追加) 311
12.5.3 輸入重定向 311
12.5.4 當前文檔 312
12.5.5 重定向兩個文件描述符 313
12.5.6 使用exec命令分配文件描述符 313
12.6 小結 315
12.7 習題 315
第13章 子Shell與進程處理 317
13.1 子Shell 317
13.1.1 什麽是子Shell 317
13.1.2 內部命令、保留字和外部命令 318
13.1.3 在子Shell中執行命令 321
13.1.4 把子Shell中的變量值傳回父Shell 325
13.2 進程處理 327
13.2.1 什麽是進程 327
13.2.2 通過腳本監控進程 328
13.2.3 作業控制 329
13.2.4 信號與trap命令 332
13.3 小結 334
13.4 習題 334
第3篇 Shell編程實戰
第14章 Shell腳本調試技術 336
14.1 Shell腳本中的常見錯誤 336
14.1.1 常見的語法錯誤 336
14.1.2 常見的邏輯錯誤 339
14.2 Shell腳本調試技術 340
14.2.1 使用echo命令調試腳本 340
14.2.2 使用trap命令調試Shell腳本 341
14.2.3 使用tee命令調試Shell腳本 343
14.2.4 使用調試鉤子調試Shell腳本 344
14.3 小結 346
14.4 習題 346
第15章 利用Shell腳本解決實際問題 347
15.1 編寫系統服務腳本 347
15.1.1 系統的啟動過程 347
15.1.2 運行級別 348
15.1.3 服務腳本的基本語法 349
15.1.4 編寫MySQL服務腳本 352
15.2 通過腳本管理Apache服務器日誌 358
15.2.1 Apache日誌簡介 359
15.2.2 歸檔文件名生成函數 360
15.2.3 過期日誌歸檔函數 361
15.2.4 過期日誌刪除函數 362
15.2.5 日誌歸檔主程序 362
15.2.6 定時運行日誌歸檔腳本 363
15.3 小結 367
15.4 習題 367