Linux Shell命令行及腳本編程實例詳解

Linux Shell命令行及腳本編程實例詳解

本書理論結合實踐,全面、系統地介紹了Linux Shell(Bash)腳本編程的語法、命令、技巧等內容。本書偏重於實踐教學,在講解理論知識時,通過一些典型實例讓讀者了解理論知識在實際環境中的套用,並對易混淆和較難理解的知識點做了重點分析,以加深讀者對知識的理解。另外,作者專門為本書錄製了高清配套教學視頻,以幫助讀者高效學習,同時也提供了本書實例源程式以方便讀者學習。 本書共15章,分為兩篇。主要內容包括:Linux及Linux Shell簡介、初識Linux Shell、常用Shell(Bash)命令、Shell命令進階、Shell編程基礎、Shell的條件執行、Bash循環、Shell函式、正則表達式、腳本輸入處理、Shell重定向、管道和過濾器、捕獲、sed和awk,以及其他Linux Shell種類介紹。 本書使用了大量的實例詳細地介紹了Bash的語法及各種技巧,並以循序漸進的方式講解了Linux Shell(Bash)的各種特性,讓讀者能夠迅速上手,並能學以致用。對於初次接觸Linux Shell的讀者,本書是一本很好的自學教材;對於接觸過Linux Shell的讀者,本書可以作為進階讀物或隨時查閱的技術手冊;另外,本書也可以作為高等學校相關專業的教材和各類培訓學校的教材。

前 言

在當今的網際網路世界,想必最為流行的一個詞就是“雲計算”了,而且雲計算又引領了大數據時代的到來。而Linux在推動雲計算方面起到了舉足輕重的作用。比如,當今最著名的商業雲計算平台“亞馬遜彈性計算雲(EC2)”就是基於Linux的。這就需要在Linux伺服器上進行大量的數據處理和管理工作,以及一些套用的部署和監測,這時就需要命令行和Shell腳本的幫助。在Linux系統中,我們通常是在命令行下完成一些管理和配置的任務,並通過Shell腳本將一些重複或定期的任務自動化,通過短短几行腳本自動地將大部分手頭工作搞定,從而節省大量的時間。而且理解Shell腳本也可以讓你更好地了解作業系統。Shell腳本還可以和許多外部命令行工具結合起來完成信息查詢、文本處理、任務定時自動化以及監測系統之類的工作。當然,伴隨著這些便利性的還有巨大的破壞性。比如,稍不留神,你可能就會將整個根目錄全部毀掉,或者錯誤地處理重要的配置檔案。這時,了解Linux命令行和Shell腳本相關的細節、遵循Linux使用規範就顯得尤其重要了。

本書面向系統管理員,基於Linux系統的軟體開發和測試人員,以及所有想有效使用Linux系統的愛好者。書中系統而全面地介紹了Shell(Bash)腳本編程的語法、命令和技巧等內容,結合大量的實例進行講解,你可以將其作為參考,或是作為自己編寫腳本時的靈感源泉。

關於“Linux典藏大系”

“Linux典藏大系”是清華大學出版社自2010年1月以來陸續推出的一個圖書系列,截止2013年,已經出版了10餘個品種。該系列圖書涵蓋了Linux技術的方方面面,可以滿足各個層次和各個領域的讀者學習Linux技術的需求。該系列圖書自出版以來獲得了廣大讀者的好評,已經成為了Linux圖書市場上最耀眼的明星品牌之一。其銷量在同類圖書中也名列前茅,其中一些圖書還獲得了“51CTO讀書頻道”頒發的“最受讀者喜愛的原創IT技術圖書獎”。該系列圖書在出版過程中也得到了國內Linux領域最知名的技術社區ChinaUnix(簡稱CU)的大力支持和幫助,讀者在CU社區中就圖書的內容與活躍在CU社區中的Linux技術愛好者進行廣泛交流,取得了良好的學習效果。

本書特色

1.視頻講解

為了幫助讀者更加高效、直觀地學習,編著者為本書重點內容專門錄製了配套教學視頻,需讀者自行下載。

2.內容全面

本書將理論與實踐相結合,全面介紹了Linux系統的常用命令及Shell腳本編程所需的知識點。書中對Linux Shell腳本編程的基本概念、語法、命令、技巧和較難理解的知識點都配合圖示和實例進行了詳細講解。

3.循序漸進

本書從最基本的Linux Shell命令開始講解,逐步深入到Linux Shell腳本編程,讓讀者可以迅速掌握Linux Shell的各種特性,並能在實際開發中加以使用。

4.實例豐富

本書偏重於實踐教學,書中的每一個理論知識都給出了具體的典型實例。例如,對每一個Linux常用命令、Linux Shell的相關概念及Shell腳本編程的相關知識等,都列舉了大量實例供讀者了解這些知識點在實際環境中的套用。

5.經驗傳授

本書是基於編著者多年的Linux系統管理和Linux平台程式設計的經驗總結而來,書中給出了大量的經驗和技巧,盡力消除讀者在學習Linux Shell編程時可能會遇到的各種障礙,從而更加迅速而高效地掌握Shell腳本編程。

內容結構

第1篇 Linux Shell基礎和使用(第1~4章)

本篇介紹Linux命令行和Linux Shell的基礎知識,包括Linux及Linux Shell簡介、Bash簡介、Bash啟動和退出腳本、Shell中的變數、Shell中的擴展、創建和使用別名,以及Shell下的常用命令等。這些內容都是學習後續章節所必須要掌握的基礎知識。

第2篇 Shell 腳本編程(第5~15章)

本篇主要介紹Shell腳本編程所需的知識,包括Shell腳本中的注釋、Shell變數進階、Shell的算術運算、如何退出腳本、如何調試腳本、Shell腳本編程風格、Shell的條件執行、Shell中的循環和控制語句、Shell函式、正則表達式、腳本的輸入處理、Shell重定向、管道和過濾器、Shell中的捕獲、sed和awk,以及其他Shell中的介紹等內容。這些內容幾乎涵蓋了日常使用Shell腳本編程的方方面面。

讀者對象

* Linux Shell編程入門新手;

* Linux Shell編程進階人員;

* 廣大Linux程式設計人員;

* Linux系統管理員;

* 網站管理工程師;

* Linux培訓機構的學員;

* Linux Shell編程愛好者;

* 需要一本案頭必備查詢手冊的人員。

關於編著者

本書由劉艷濤主筆編寫。其他參與編寫的人員有陳冠軍、陳浩、黃振東、蔣慶學、李代敘、李世民、李思清、李雲龍、李志剛、劉存勇、劉燕珍、龍哲、呂軼、牟春梅、屈明環、石峰、史艷艷、宋寧寧、王德亮、王俊清、王雅寧、翁盛鑫。

目 錄

第1篇 Linux Shell基礎和使用

第1章 Linux及Linux Shell簡介

1.1 關於Linux 2

1.1.1 什麼是Linux 2

1.1.2 誰創建了Linux 3

1.1.3 Linux在日常生活中的使用 3

1.1.4 Linux Kernel是什麼 3

1.1.5 Linux的理念 4

1.2 什麼是Linux Shell 4

1.3 Shell的種類 5

1.4 怎樣使用Shell 6

1.5 Shell腳本是什麼 7

1.6 為什麼使用Shell腳本 8

1.7 實例:創建你的第一個Shell腳本 8

1.8 小結 9

第2章 初識Linux Shell

2.1 Bash Shell 10

2.1.1 Bash簡介 10

2.1.2 Bash提供的改進 10

2.2 Shell在Linux環境中的角色 11

2.2.1 與登錄Shell相關的檔案 11

2.2.2 Bash啟動腳本 11

2.2.3 實例:定製自己的Bash登錄腳本 12

2.2.4 Bash退出腳本 14

2.2.5 實例:定製自己的Bash退出腳本 14

2.2.6 有效的登錄Shell的路徑 15

2.3 Shell中的變數 15

2.3.1 Shell中變數的類型 15

2.3.2 實例:如何定義變數和給變數賦值 17

2.3.3 變數命名規則 19

2.3.4 實例:使用echo和printf列印變數的值 19

2.3.5 變數的引用 22

2.3.6 實例:export語句的使用 23

2.3.7 實例:如何刪除變數 25

2.3.8 實例:如何檢查變數是否存在 25

2.4 Shell環境進階 26

2.4.1 實例:回調命令歷史 26

2.4.2 實例:Shell中的擴展 27

2.4.3 實例:創建和使用別名 30

2.4.4 實例:修改Bash提示符 31

2.4.5 實例:設定Shell選項 34

2.5 小結 37

第3章 常用Shell(Bash)命令

3.1 查看檔案和目錄 38

3.1.1 ls命令實例:列出檔案名稱和目錄 38

3.1.2 cat命令實例:連線顯示檔案內容 42

3.1.3 less、more命令實例:分屏顯示檔案 43

3.1.4 head命令實例:顯示檔案頭部 46

3.1.5 tail命令實例:顯示檔案尾部 47

3.1.6 file命令實例:查看檔案類型 48

3.1.7 wc命令實例:查看檔案統計信息 50

3.1.8 find命令實例:查找檔案或目錄 50

3.2 操作檔案和目錄 52

3.2.1 touch命令實例:創建檔案 52

3.2.2 mkdir命令實例:創建目錄 53

3.2.3 cp命令實例:複製檔案或目錄 54

3.2.4 ln命令實例:連結檔案或目錄 55

3.2.5 mv命令實例:重命名檔案或目錄 56

3.2.6 rm命令實例:刪除檔案或目錄 57

3.3 管理檔案或目錄許可權 58

3.3.1 ls -l:顯示檔案和目錄許可權 58

3.3.2 chmod命令實例:修改許可權 59

3.3.3 chown、chgrp命令實例:修改檔案所有者和用戶組 61

3.3.4 設定setuid和setgid許可權位實例:設定用戶和組許可權位 63

3.4 文本處理 65

3.4.1 sort命令實例:文本排序 65

3.4.2 uniq命令實例:文本去重 67

3.4.3 tr命令實例:替換或刪除字元 68

3.4.4 grep命令實例:查找字元串 70

3.4.5 diff命令實例:比較兩個檔案 71

3.5 其他常用命令 73

3.5.1 hostname命令實例:查看主機名 73

3.5.2 w、who命令實例:列出系統登錄的用戶 74

3.5.3 uptime命令實例:查看系統運行時間 75

3.5.4 uname命令實例:查看系統信息 75

3.5.5 date命令實例:顯示和設定系統日期和時間 76

3.5.6 id命令實例:顯示用戶屬性 78

3.6 小結 79

第4章 Shell命令進階

4.1 檔案處理和歸檔 81

4.1.1 paster命令實例:合併檔案 81

4.1.2 dd命令實例:備份和拷貝檔案 83

4.1.3 gzip、bzip2命令實例:壓縮和歸檔檔案 84

4.1.4 gunzip、bunzip2命令實例:解壓縮檔案 85

4.1.5 tar命令實例:打包和解包檔案 85

4.2 監測和管理磁碟 87

4.2.1 mount、umount命令實例:掛載和卸載存儲介質 87

4.2.2 df命令實例:報告檔案系統磁碟空間利用率 90

4.2.3 du命令實例:評估檔案空間利用率 91

4.3 後台執行命令 92

4.3.1 cron、crontab命令實例:執行計畫任務 92

4.3.2 at命令實例:在指定時間執行命令 94

4.3.3 &控制操作符實例:將任務放在後台運行 95

4.3.4 nohup命令實例:運行一個對掛起免疫的命令 96

4.4 小結 97

第2篇 Shell 腳本編程

第5章 Shell編程基礎

5.1 Shell腳本的第一行“#!”(Shebang) 100

5.2 Shell中的注釋 100

5.3 實例:如何設定腳本的許可權和執行腳本 101

5.4 Shell變數進階 102

5.4.1 Bash中的參數擴展 102

5.4.2 Bash的內部變數 106

5.4.3 Bash中的位置參數和特殊參數 109

5.4.4 實例:使用declare指定變數的類型 112

5.4.5 Bash中的數組變數 114

5.5 Shell算術運算 115

5.5.1 Bash的算術運算符 115

5.5.2 數字常量 117

5.5.3 使用算術擴展和let進行算術運算 118

5.5.4 實例:使用expr命令 119

5.6 退出腳本 120

5.6.1 退出狀態碼 120

5.6.2 實例:使用exit命令 121

5.7 實例:調試腳本 122

5.8 Shell腳本編程風格 125

5.9 小結 126

第6章 Shell的條件執行

6.1 條件測試 128

6.1.1 實例:使用test命令 128

6.1.2 if結構的語法格式 133

6.1.3 實例:if…else…fi語句 135

6.1.4 實例:嵌套的if/else語句 136

6.1.5 實例:多級的if…elif…else…fi 137

6.2 條件執行 139

6.2.1 實例:邏輯與“&&” 139

6.2.2 實例:邏輯或“||” 144

6.2.3 實例:邏輯非“!” 147

6.3 case語句實例 148

6.4 小結 151

第7章 Bash循環

7.1 for循環 152

7.1.1 for循環語法 152

7.1.2 實例:嵌套for循環語句 156

7.2 while循環 157

7.2.1 while循環語法 157

7.2.2 實例:定義無限while循環 160

7.3 until循環語句實例 162

7.4 select循環語句實例 163

7.5 循環控制 165

7.5.1 實例:break語句 165

7.5.2 實例:continue語句 167

7.6 小結 168

第8章 Shell函式

8.1 函式的定義 170

8.2 函式的參數、變數與返回值 171

8.2.1 實例:向函式傳遞參數 171

8.2.2 本地變數 173

8.2.3 實例:使用return命令 175

8.2.4 實例:函式返回值測試 176

8.3 函式的調用 176

8.3.1 實例:在Shell命令行調用函式 176

8.3.2 實例:在腳本中調用函式 177

8.3.3 實例:從函式檔案中調用函式 178

8.3.4 實例:遞歸函式調用 181

8.4 實例:將函式放在後台運行 182

8.5 小結 184

第9章 正則表達式

9.1 什麼是正則表達式 185

9.1.1 定義 185

9.1.2 正則表達式類型 185

9.1.3 POSIX字元類 186

9.1.4 Bash正則表達式比較操作符 187

9.2 正則套用基礎 189

9.2.1 實例:使用句點.匹配單字元 189

9.2.2 實例:使用插入符號^匹配 190

9.2.3 實例:使用美元符$匹配 190

9.2.4 實例:使用星號*匹配 190

9.2.5 實例:使用方括弧[ ]匹配 191

9.2.6 實例:使用問號?匹配 191

9.2.7 實例:使用加號+匹配 191

9.3 小結 192

第10章 腳本輸入處理

10.1 參數處理 193

10.1.1 實例:使用case語句處理命令行參數 193

10.1.2 實例:使用shift命令處理命令行參數 198

10.1.3 實例:使用for循環讀取多個參數 201

10.1.4 實例:讀取腳本名 203

10.1.5 實例:測試命令行參數 204

10.2 選項處理 206

10.2.1 實例:使用case語句處理命令行選項 207

10.2.2 實例:使用getopts處理多命令行選項 209

10.2.3 實例:使用getopt處理多命令行選項 214

10.3 獲得用戶輸入 221

10.3.1 實例:基本的讀取 221

10.3.2 實例:輸入逾時 222

10.3.3 實例:隱藏方式讀取 223

10.3.4 實例:從檔案中讀取 224

10.4 小結 227

第11章 Shell重定向

11.1 輸入和輸出 230

11.1.1 標準輸入 230

11.1.2 標準輸出 232

11.1.3 標準錯誤 233

11.2 重定向 233

11.2.1 檔案重定向 234

11.2.2 實例:從檔案輸入 236

11.2.3 實例:從文本或字元串輸入 241

11.2.4 實例:空檔案創建 244

11.2.5 實例:/dev/null丟棄不需要的輸出 245

11.2.6 實例:標準錯誤重定向 246

11.2.7 實例:標準輸出重定向 246

11.2.8 實例:標準錯誤和標準輸出同時重定向 247

11.2.9 實例:追加重定向輸出 247

11.2.10 實例:在單命令行進行標準輸入輸出重定向 247

11.3 檔案描述符 249

11.3.1 實例:使用exec命令 249

11.3.2 實例:指定用於輸入的檔案描述符 251

11.3.3 實例:指定用於輸出的檔案描述符 254

11.3.4 實例:關閉檔案描述符 260

11.3.5 實例:打開用於讀和寫的檔案描述符 261

11.3.6 實例:在同一腳本中使用exec進行輸入和輸出重定向 261

11.4 小結 264

第12章 管道和過濾器

12.1 管道 266

12.1.1 操作符“|”和“>”之間的區別 266

12.1.2 為什麼使用管道 267

12.1.3 實例:使用管道連線程式 267

12.1.4 實例:管道中的輸入重定向 269

12.1.5 實例:管道中的輸出重定向 270

12.2 過濾器 271

12.2.1 實例:在管道中使用awk命令 272

12.2.2 實例:在管道中使用cut命令 273

12.2.3 實例:在管道中使用grep命令 274

12.2.4 實例:在管道中使用tar命令 275

12.2.5 實例:在管道中使用head命令 275

12.2.6 實例:在管道中使用paste命令 276

12.2.7 實例:在管道中使用sed命令 277

12.2.8 實例:在管道中使用sort命令 278

12.2.9 實例:在管道中使用split命令 278

12.2.10 實例:在管道中使用strings命令 279

12.2.11 實例:在管道中使用tail命令 279

12.2.12 實例:在管道中使用tee命令 280

12.2.13 實例:在管道中使用tr命令 282

12.2.14 實例:在管道中使用uniq命令 282

12.2.15 實例:在管道中使用wc命令 283

12.3 小結 283

第13章 捕獲

13.1 信號 284

13.1.1 Linux中的信號 284

13.1.2 信號的名稱和值 285

13.1.3 Bash中的信號 287

13.2 進程 288

13.2.1 什麼是進程 288

13.2.2 前台進程和後台進程 289

13.2.3 進程的狀態 290

13.2.4 實例:怎樣查看進程 290

13.2.5 實例:向進程傳送信號 294

13.2.6 關於子Shell 296

13.3 捕獲 300

13.3.1 trap語句 300

13.3.2 實例:使用trap語句捕獲信號 303

13.3.3 實例:移除捕獲 308

13.4 小結 309

第14章 sed和awk

14.1 sed編輯器基礎 311

14.1.1 sed簡介 311

14.1.2 sed的模式空間 312

14.2 基本的sed編輯命令 313

14.2.1 追加、更改、插入編輯命令 314

14.2.2 刪除編輯命令 316

14.2.3 替換編輯命令 316

14.2.4 列印編輯命令 319

14.2.5 列印行號編輯命令 319

14.2.6 讀取下一行編輯命令 320

14.2.7 讀和寫檔案編輯命令 321

14.2.8 退出編輯命令 325

14.3 sed命令實例 326

14.3.1 實例:向檔案中添加或插入行 326

14.3.2 實例:更改檔案中指定的行 328

14.3.3 實例:刪除檔案中的行 328

14.3.4 實例:替換檔案中的內容 331

14.3.5 實例:列印檔案中的行 333

14.3.6 實例:列印檔案中的行號 336

14.3.7 實例:從檔案中讀取和向檔案中寫入 336

14.4 sed與Shell 340

14.4.1 實例:在sed中使用Shell變數 340

14.4.2 實例:從sed輸出中設定Shell變數 347

14.5 awk基礎 348

14.5.1 awk簡介 348

14.5.2 awk基本語法 349

14.5.3 第一個awk命令 350

14.5.4 使用awk列印指定的列 351

14.5.5 從awk程式檔案讀取awk指令 351

14.5.6 awk的BEGIN和END塊 352

14.5.7 awk中使用正則表達式 352

14.5.8 awk的表達式和塊 353

14.5.9 awk的條件語句 354

14.5.10 awk中的變數和操作符 354

14.5.11 awk中的特殊變數 355

14.5.12 awk中的循環結構 356

14.5.13 awk中的數組 358

14.6 awk與Shell 359

14.6.1 實例:在awk中使用Shell變數 359

14.6.2 實例:從awk命令的輸出中設定Shell變數 360

14.7 awk命令實例 362

14.7.1 實例:使用awk編寫字元統計工具 362

14.7.2 實例:使用awk程式統計檔案的總列數 364

14.7.3 實例:使用awk自定義顯示檔案的屬性信息 365

14.7.4 實例:使用awk顯示ASCII字元 366

14.7.5 實例:使用awk來獲取進程號 369

14.8 小結 371

第15章 其他Linux Shell種類介紹

15.1 C Shell 374

15.1.1 csh簡介 374

15.1.2 csh的特性 375

15.1.3 csh的內部變數 376

15.1.4 csh的內部命令 376

15.1.5 tcsh在csh基礎上的新特性 381

15.2 Korn Shell 389

15.2.1 ksh簡介 389

15.2.2 ksh的特性 390

15.2.3 ksh的內部變數 395

15.2.4 ksh的內部命令 397

15.2.5 增強的ksh-ksh93 404

15.3 小結 408

相關詞條

熱門詞條

聯絡我們