UNIX Shell範例精解(第4版)

內容簡介

在本書的再版中,Quigley對她的經典著作進行了全新的改版,增加了當前shell程式設計師所需的最新內容——使用bash進行Linux shell編程。

本書匯聚了Quigley 21年來的 shell編程教學經驗。書中不僅展示了能幫助讀者快速入門的大量精選範例,還系統地講解了UNIX與GNU/Linux上的awk、sed及grep等內容。在Quigley的指導下,即使是shell初學者也可以學會UNIX/Linux上所有主流shell的編程知識,包括5種shell的互動式命令及腳本編程,從而領會作者的編程思路。本書可作為shell編程的入門教程,也是系統管理員、程式設計人員的必備參考。

圖書目錄

第1章UNIX/Linuxshell簡介 1

1.1UNIX與Linux及其歷史 1

1.1.1UNIX簡介 1

1.1.2為什麼選擇Linux 2

1.2shell的定義與功能 3

1.2.1UNIXshell 4

1.2.2Linux的shell 4

1.3shell的歷史 6

1.3.1shell的作用 7

1.3.2shell的職責 7

1.4系統啟動與登錄shell 7

1.4.1解析命令行 8

1.4.2命令類型 8

1.5進程與shell 10

1.5.1哪些進程正在運行? 10

1.5.2系統調用 11

1.5.3創建進程 12

1.6環境與繼承 15

1.6.1所有權 15

1.6.2為檔案創建掩碼 15

1.6.3修改許可權與所有者 16

1.6.4工作目錄 18

1.6.5變數 19

1.6.6重定向與管道 20

1.6.7shell和信號 25

1.7在腳本中執行命令 26

第2章shell編程快速入門 27

2.1shell腳本簡介 27

2.2腳本實例:主要shell的比較 27

2.2.1開始之前 27

2.2.2示例說明 28

2.3Cshell與TCshell的語法和

結構 28

2.4Bourneshell的語法和結構 34

2.5Kornshell結構 41

2.6Bashshell結構 49

第3章正則表達式與模式匹配 57

3.1正則表達式 57

3.1.1定義和示例 57

3.1.2正則表達式元字元 58

3.2組合正則表達式元字元 63

第4章grep家族 69

4.1grep命令 69

4.1.1grep的含義 69

4.1.2grep如何工作 70

4.1.3元字元 70

4.1.4grep的退出狀態 72

4.2使用正則表達式的grep實例 72

4.3grep的選項 77

4.4grep與管道 79

4.5egrep(擴展的grep) 80

4.5.1egrep示例 81

4.5.2egrep回顧 83

4.6fgrep(固定的grep或

快速的grep) 83

4.7Linux與GNUgrep 84

4.8帶正則表達式的GNU

基本grep(grep-G) 87

4.9grep–E或egrep

(GNU擴展grep) 88

4.9.1grep–E和egrep實例 89

4.9.2grep變體的不規則形式 92

4.10固定的grep(grep–F和fgrep) 95

4.11遞歸的grep(rgrep,grep-R) 95

4.12帶選項的GNUgrep 95

4.13帶選項的grep

(UNIX和GNU) 97

第5章流編輯器sed 105

5.1sed簡介 105

5.2sed的不同版本 105

5.3sed的工作過程 106

5.4正則表達式 106

5.5定址 107

5.6命令與選項 108

5.6.1用sed修改檔案 109

5.6.2GNUsed的選項 109

5.7報錯信息和退出狀態 110

5.8元字元 110

5.9sed範例 111

5.9.1列印:p命令 112

5.9.2刪除:d命令 113

5.9.3替換:s命令 114

5.9.4指定行的範圍:逗號 116

5.9.5多重編輯:e命令 117

5.9.6讀檔案:r命令 118

5.9.7寫檔案:w命令 119

5.9.8追加:a命令 119

5.9.9插入:i命令 120

5.9.10修改:c命令 121

5.9.11獲取下一行:n命令 121

5.9.12轉換:y命令 122

5.9.13退出:q命令 122

5.9.14暫存和取用:h命令

和g命令 123

5.9.15暫存和互換:h命令

和x命令 126

5.10sed腳本編程 126

5.10.1sed腳本範例 127

5.10.2回顧 129

第6章awk實用程式 131

6.1什麼是awk、nawk、gawk 131

6.1.1awk簡介 131

6.1.2awk版本 131

6.2awk的格式 132

6.2.1從檔案輸入 132

6.2.2從命令輸入 133

6.3awk工作原理 134

6.4格式化輸出 135

6.4.1print函式 135

6.4.2OFMT變數 136

6.4.3printf函式 136

6.5檔案中的awk命令 139

6.6記錄與欄位 140

6.6.1記錄 140

6.6.2欄位 141

6.6.3欄位分隔設定 141

6.7模式與操作 143

6.7.1模式 143

6.7.2操作 144

6.8正則表達式 145

6.8.1匹配整行 146

6.8.2匹配操作符 146

6.9腳本檔案中的awk命令 148

6.10複習 149

6.10.1簡單的模式匹配 149

6.10.2簡單的操作 150

6.10.3模式與操作組合的

正則表達式 152

6.10.4輸入欄位分隔設定 154

6.10.5編寫awk腳本 156

6.11比較表達式 157

6.11.1關係運算符 158

6.11.2條件表達式 159

6.11.3算術運算 159

6.11.4邏輯操作符和複合模式 160

6.11.5範圍模式 161

6.11.6驗證數據合法性 161

6.12複習 162

6.12.1相等性測試 163

6.12.2關係運算符 164

6.12.3邏輯運算符 165

6.12.4邏輯非運算符 165

6.12.5算術運算符 166

6.12.6範圍運算符 168

6.12.7條件運算符 168

6.12.8賦值運算符 169

6.13變數 170

6.13.1數值變數和字元串變數 170

6.13.2用戶自定義變數 171

6.13.3BEGIN模式 174

6.13.4END模式 175

6.14重定向和管道 175

6.14.1輸出重定向 175

6.14.2輸入重定向(getline) 175

6.15管道 177

6.16回顧 179

6.16.1遞增和遞減運算符 179

6.16.2內置變數 180

6.16.3BEGIN模式 183

6.16.4END模式 184

6.16.5包含BEGIN和END

模式的awk腳本 185

6.16.6printf函式 186

6.16.7重定向與管道 187

6.16.8打開和關閉管道 188

6.17條件語句 190

6.17.1if語句 190

6.17.2if/else語句 190

6.17.3if/else和elseif語句 191

6.18循環 192

6.18.1while循環 192

6.18.2for循環 193

6.18.3循環控制 193

6.19程式控制語句 194

6.19.1next語句 194

6.19.2exit語句 194

6.20數組 194

6.20.1關聯數組的下標 195

6.20.2處理命令行參數(nawk) 200

6.21awk的內置函式 202

6.22內置算術函式 205

6.22.1整數函式 205

6.22.2隨機數發生器 206

6.23用戶自定義函式(nawk) 207

6.24複習 208

6.25雜項 213

6.25.1固定欄位 214

6.25.2多行記錄 216

6.25.3生成格式信函 217

6.25.4與shell互動 219

6.26awk內置函式 221

6.26.1字元串函式 221

6.26.2gawk的時間函式 224

6.26.3命令行參數 226

6.26.4讀輸入(getline) 227

6.26.5控制函式 228

6.26.6用戶自定義函式 229

6.26.7awk/gawk命令行選項 229

第7章互動式的Bourneshell 233

7.1簡介 233

7.2環境 234

7.2.1初始化檔案 234

7.2.2提示符 237

7.2.3搜尋路徑 238

7.2.4hash命令 238

7.2.5dot命令 239

7.3命令行 239

7.3.1退出狀態 240

7.3.2含多條命令的命令行 240

7.3.3命令的條件執行 241

7.3.4在後台執行的命令 241

7.4元字元(通配符) 242

7.5檔案名稱替換 242

7.5.1星號 243

7.5.2問號 243

7.5.3方括弧 244

7.5.4轉義元字元 244

7.6變數 245

7.6.1局部變數 245

7.6.2設定局部變數 245

7.6.3環境變數 247

7.6.4列出已設定的變數 248

7.6.5復位變數 249

7.6.6列印變數的值:echo命令 250

7.6.7變數擴展修飾符 251

7.6.8位置參數 253

7.6.9其他特殊變數 254

7.7引用 255

7.7.1反斜槓 256

7.7.2單引號 256

7.7.3雙引號 257

7.8命令替換 257

7.9函式入門 258

7.9.1定義函式 258

7.9.2列出和復位函式 259

7.10標準I/O和重定向 259

7.11管道 264

7.12here文檔與重定向輸入 265

第8章Bourneshell編程 269

8.1簡介 269

8.2讀取用戶輸入 271

8.3算術運算 272

8.3.1整數運算與expr命令 273

8.3.2浮點運算 273

8.4位置參量和命令行參數 274

8.4.1set命令與位置參量 275

8.4.2$*和$@有何區別 277

8.5條件結構和流控制 278

8.5.1測試退出狀態:test命令 279

8.5.2if命令 280

8.5.3exit命令和?變數 282

8.5.4檢查空值 283

8.5.5if/else命令 284

8.5.6if/elif/else命令 285

8.5.7檔案測試 287

8.5.8null命令 287

8.5.9case命令 289

8.5.10用here文檔和case

命令生成選單 290

8.6循環命令 291

8.6.1for命令 291

8.6.2詞表中的$*和$@變數 293

8.6.3while命令 295

8.6.4until命令 297

8.6.5循環控制命令 298

8.6.6嵌套循環和循環控制 302

8.6.7I/O重定向和子shell 304

8.6.8在後台執行循環 306

8.6.9exec命令和循環 307

8.6.10IFS和循環 308

8.7函式 309

8.7.1清除函式 310

8.7.2函式的參數和返回值 310

8.7.3函式與dot命令 312

8.8捕獲信號 314

8.8.1重置信號 315

8.8.2忽略信號 316

8.8.3列出陷阱 316

8.8.4函式中的信號陷阱 317

8.8.5調試 318

8.9命令行 319

8.9.1用getopts處理命令行選項 319

8.9.2eval命令和命令行解析 324

8.10shell的調用選項 325

8.10.1set命令和選項 326

8.10.2shell的內置命令 326

第9章互動式的Cshell與TCshell 335

9.1簡介 335

9.2環境 336

9.2.1初始化檔案 336

9.2.2搜尋路徑 338

9.2.3rehash命令 339

9.2.4hashstat命令 339

9.2.5source命令 339

9.2.6shell提示符 340

9.3C/TCshell命令行 341

9.3.1退出狀態 341

9.3.2命令編組 341

9.3.3命令的條件執行 342

9.3.4後台命令 343

9.3.5命令行歷史 343

9.4別名 347

9.4.1列出別名 347

9.4.2創建別名 348

9.4.3刪除別名 348

9.4.4別名環 349

9.5操作目錄棧 349

9.6作業控制 351

9.6.1&號和後台作業 351

9.6.2暫停鍵序列和後台作業 352

9.6.3jobs命令 352

9.6.4前台和後台命令 353

9.7shell元字元 353

9.8檔案名稱替換 354

9.8.1星號 355

9.8.2問號 355

9.8.3方括弧 356

9.8.4花括弧 356

9.8.5轉義元字元 357

9.8.6~號擴展 357

9.8.7檔案名稱補全:變數filec 358

9.8.8用noglob關閉元字元 358

9.9重定向與管道 359

9.9.1重定向輸入 359

9.9.2here文檔 360

9.9.3重定向輸出 361

9.9.4將輸出追加到已有檔案 362

9.9.5重定向輸出和報錯信息 362

9.9.6分離輸出與報錯信息 363

9.9.7變數noclobber 364

9.10變數 365

9.10.1花括弧 366

9.10.2局部變數 366

9.10.3環境變數 369

9.10.4數組 371

9.10.5專用變數 373

9.11命令替換 375

9.12引用 377

9.12.1反斜槓 378

9.12.2單引號 378

9.12.3雙引號 379

9.12.4引用的遊戲 379

9.13互動式TCshell的新特性 381

9.13.1tcsh的版本 382

9.13.2shell提示符 382

9.14TCshell命令行 385

9.14.1命令行與退出狀態 385

9.14.2TCshell命令行歷史 386

9.14.3內置命令行編輯器 393

9.15TCshell命令、檔案名稱

與變數補齊 399

9.15.1autolist變數 399

9.15.2fignore變數 400

9.15.3shell變數complete 401

9.15.4編程補全 401

9.16TCshell拼寫校正 405

9.17TCshell別名 406

9.17.1列出別名 406

9.17.2創建別名 407

9.17.3刪除別名 408

9.17.4別名循環 408

9.17.5特殊的tcsh別名 408

9.18TCshell作業控制 409

9.18.1jobs命令與listjobs變數 409

9.18.2前台與後台命令 410

9.18.3作業調度 411

9.19在TCshell中顯示變數的值 412

9.19.1echo命令 412

9.19.2printf命令 413

9.19.3花括弧與變數 414

9.19.4大小寫轉換 415

9.20TCshell內置命令 416

9.20.1特殊的內置T/TC

shell變數 424

9.20.2TCshell命令行開關 429

第10章Cshell與TCshell編程 433

10.1簡介 433

10.2讀取用戶輸入 435

10.2.1變數$< 435

10.2.2根據輸入的字元串

創建詞表 436

10.3算術運算 436

10.3.1算術運算符 436

10.3.2浮點算術運算 438

10.4腳本調試 438

10.5命令行參數 440

10.6條件結構與流控制 442

10.6.1測試表達式 442

10.6.2優先權和組合規則 443

10.6.3if語句 444

10.6.4測試未設定或值為

空的變數 445

10.6.5if/else語句 445

10.6.6邏輯表達式 446

10.6.7if語句和單條命令 447

10.6.8if/elseif語句 447

10.6.9退出狀態和變數status 448

10.6.10從shell腳本中退出 448

10.6.11使用別名創建

錯誤信息 449

10.6.12在腳本中使用變數

status 450

10.6.13在條件結構中對

命令求值 450

10.6.14goto命令 451

10.6.15Cshell檔案測試 452

10.6.16test命令與檔案測試 453

10.6.17條件結構的嵌套 454

10.6.18TCshell檔案測試 455

10.6.19內置命令filetest(tcsh) 456

10.6.20新增的TCshell檔案

測試操作 457

10.6.21switch命令 459

10.6.22here文檔和選單 461

10.7循環命令 463

10.7.1foreach循環 463

10.7.2while循環 465

10.7.3repeat命令 466

10.7.4循環控制命令 466

10.8中斷處理 470

10.9setuid腳本 471

10.10保存腳本 471

10.11內置命令 472

第11章互動式Kornshell 481

11.1簡介 481

11.2環境 482

11.2.1初始化檔案 482

11.2.2提示符 486

11.2.3搜尋路徑 487

11.2.4句點命令 487

11.3命令行 488

11.3.1命令執行的次序 488

11.3.2退出狀態 489

11.3.3含多條命令的命令行

和命令組 490

11.3.4命令的條件執行 490

11.3.5後台執行的命令 490

11.3.6命令行歷史 491

11.3.7命令行編輯 494

11.4檔案名稱擴展 497

11.5別名 497

11.5.1別名列表 498

11.5.2創建別名 499

11.5.3刪除別名 499

11.5.4別名定位 499

11.6作業控制 500

11.7元字元 501

11.8檔案名稱替換(通配符) 502

11.8.1星號 503

11.8.2問號 503

11.8.3方括弧 504

11.8.4轉義元字元 505

11.8.5代字元號和連字元擴展 505

11.8.6新增的ksh元字元 506

11.8.7noglob變數 507

11.9變數 507

11.9.1局部變數 507

11.9.2環境變數 509

11.9.3列出已設定的變數 512

11.9.4復位變數 514

11.9.5顯示變數的值 514

11.9.6轉義序列 516

11.9.7變數表達式和擴

展修飾符 517

11.9.8變數子字元串擴展 519

11.9.9變數屬性:typeset命令 520

11.9.10位置參數 521

11.9.11其他特殊變數 523

11.10引用 524

11.10.1反斜槓 524

11.10.2單引號 524

11.10.3雙引號 525

11.11命令替換 525

11.12函式 527

11.12.1函式的定義 527

11.12.2函式和別名 528

11.12.3列出函式 529

11.12.4取消函式的定義 529

11.13標準I/O和重定向 530

11.13.1exec命令和重定向 531

11.13.2重定向與子shell 532

11.14管道 533

11.15time命令 535

11.15.1time命令 535

11.15.2TMOUT變數 536

第12章Kornshell編程 537

12.1簡介 537

12.2讀取用戶輸入 539

12.2.1read命令和檔案描述符 541

12.2.2從整個檔案中讀取數據 542

12.3算術運算 542

12.3.1整型數值 543

12.3.2使用不同的基數 544

12.3.3列出所有整型變數 544

12.3.4算術運算符和let命令 545

12.4位置參量和命令行參數 547

12.5分支結構和流程控制 549

12.5.1測試退出狀態和$?變數 550

12.5.2老的test命令 551

12.5.3新的test命令 552

12.5.4帶有二元操作符的

檔案測試 553

12.5.5邏輯操作符 553

12.5.6檔案測試 554

12.5.7if命令 555

12.5.8使用老式風格的

Bournetest 556

12.5.9使用新式風格的

Korntest 557

12.5.10使用舊式風格的帶數字

表達式的Bournetest 557

12.5.11let命令和數字測試 557

12.5.12if/else命令 558

12.5.13if/elif/else命令 559

12.5.14exit命令 560

12.5.15null命令 561

12.5.16case命令 562

12.6循環命令 564

12.6.1for命令 564

12.6.2詞表中的變數$*和$@ 566

12.6.3while命令 567

12.6.4until命令 569

12.6.5select命令和選單 570

12.6.6循環控制命令 573

12.6.7嵌套循環和循環控制 576

12.6.8I/O重定向和循環 577

12.6.9在後台運行循環 578

12.6.10exec命令和循環 579

12.6.11IFS和循環 580

12.7數組 581

12.8函式 583

12.8.1定義函式 583

12.8.2列出和取消函式定義 584

12.8.3局部變數和返回值 584

12.8.4導出函式 586

12.8.5typeset命令和函式選項 587

12.9trap命令 588

12.9.1偽信號 589

12.9.2復位信號 589

12.9.3忽略信號 590

12.9.4列出信號 590

12.9.5陷入和函式 592

12.10協作進程 593

12.11調試 596

12.12命令行 598

12.13安全性 603

12.13.1特權腳本 603

12.13.2受限shell 603

12.14內置命令 603

12.15Kornshell調用參數 607

第13章互動式bashshell 619

13.1簡介 619

13.1.1bash版本 619

13.1.2啟動 620

13.2環境 621

13.2.1初始化檔案 621

13.2.2用內置的set和shopt

命令設定bash選項 629

13.2.3提示符 632

13.2.4搜尋路徑 634

13.2.5hash命令 634

13.2.6source或dot命令 635

13.3命令行 636

13.3.1處理命令的順序 636

13.3.2內置命令和help命令 637

13.3.3改變命令行處理的順序 637

13.3.4退出狀態 638

13.3.5含多條命令的命令行 639

13.3.6命令編組 640

13.3.7命令的條件執行 640

13.3.8在後台執行的命令 640

13.4作業控制 641

13.5命令行捷徑 643

13.5.1命令和檔案名稱補全 643

13.5.2歷史 644

13.5.3從歷史檔案訪問命令 644

13.5.4命令行編輯 650

13.6別名 654

13.6.1列出別名 654

13.6.2創建別名 654

13.6.3刪除別名 655

13.7操作目錄棧 655

13.7.1內置命令dirs 655

13.7.2pushd命令和popd命令 655

13.8元字元(通配符) 657

13.9檔案名稱替換(globbing) 657

13.9.1星號 658

13.9.2問號 658

13.9.3方括弧 659

13.9.4花括弧 659

13.9.5轉義元字元 660

13.9.6代字元號和連字元擴展 661

13.9.7控制通配符(globbing) 661

13.9.8擴展的檔案名稱globbing

(bash2.x) 662

13.10變數 663

13.10.1變數類型 663

13.10.2命名慣例 663

13.10.3內置命令declare 664

13.10.4局部變數和作用域 664

13.10.5環境變數 666

13.10.6復位變數 671

13.10.7顯示變數值 671

13.10.8變數擴展修飾符 673

13.10.9子串的變數擴展 676

13.10.10位置參量 678

13.10.11其他特殊變數 679

13.11引用 680

13.11.1反斜槓 680

13.11.2單引號 681

13.11.3雙引號 682

13.12命令替換 682

13.13算術擴展 685

13.14擴展順序 685

13.15數組 685

13.16函式 687

13.16.1定義函式 688

13.16.2列出和清除函式 690

13.17標準I/O和重定向 690

13.18管道 694

13.19shell調用選項 697

13.19.1set命令和選項 697

13.19.2shopt命令和選項 699

13.20shell內置命令 700

第14章bashshell編程 705

14.1簡介 705

14.2讀取用戶輸入 707

14.2.1變數 707

14.2.2read命令 707

14.3算術運算 710

14.3.1整數運算(declare

和let命令) 710

14.3.2浮點數運算 712

14.4位置參量和命令行參數 712

14.4.1位置參量 712

14.4.2set命令與位置參量 714

14.5條件結構和流程控制 717

14.5.1退出狀態 717

14.5.2內置命令test與let 717

14.5.3if命令 722

14.5.4if/else命令 726

14.5.5if/elif/else命令 727

14.5.6檔案測試 729

14.5.7null命令 731

14.5.8case命令 733

14.6循環命令 735

14.6.1for命令 735

14.6.2詞表中的$*和@變數 737

14.6.3while命令 738

14.6.4until命令 741

14.6.5select命令和選單 742

14.6.6循環控制命令 746

14.6.7I/O重定向與子shell 752

14.6.8在後台執行循環 754

14.6.9IFS和循環 754

14.7函式 755

14.7.1清除函式 756

14.7.2導出函式 756

14.7.3函式的參數和返回值 756

14.7.4函式與source

(或dot)命令 759

14.8捕獲信號 762

14.8.1重置信號 763

14.8.2忽略信號 764

14.8.3列出陷阱 764

14.8.4函式中的信號陷阱 765

14.9調試 766

14.10命令行 768

14.10.1用getopts處理命令

行選項 768

14.10.2eval命令和命令行

解析 773

14.11bash的選項 774

14.11.1shell調用選項 774

14.11.2set命令及其選項 775

14.11.3shopt命令及其選項 776

14.12shell的內置命令 778

14.13bashshell的習題 780

第15章調試shell腳本 787

15.1簡介 787

15.2風格問題 787

15.3錯誤類型 788

15.3.1運行時錯誤 788

15.3.2命名慣例 788

15.3.3參數不足 789

15.3.4路徑問題 790

15.3.5shbang行 791

15.3.6別名問題 792

15.4可能導致語法錯誤的原因 793

15.4.1未定義變數與誤寫變數 793

15.4.2未完成的編程語句 795

15.4.35種shell中常見的

錯誤信息 806

15.4.4邏輯錯誤與健壯性 814

15.5使用shell選項與set命令

進行跟蹤 821

15.5.1調試Bourneshell腳本 821

15.5.2調試C/TCshell腳本 822

15.5.3調試Kornshell腳本 825

15.5.4調試bash腳本 827

15.6小結 830

第16章系統管理員與shell 831

16.1簡介 831

16.2超級用戶 831

16.3使用su命令變為超級用戶 832

16.3.1以根用戶身份運行腳本 834

16.3.2以root身份運行的

腳本(setuid程式) 835

16.4引導腳本 837

16.4.1相關術語 837

16.4.2一個引導腳本的例子

——cron工具 841

16.4.3編寫一個可移植的腳本 845

16.4.4用戶指定初始化檔案 848

16.4.5系統範圍內的初始化

檔案 849

16.5小結 855

附錄A常用的UNIX/Linux實用程式 857

附錄B各種shell的比較 899

相關詞條

熱門詞條

聯絡我們