linux下的shell編程
第1篇 Linux命令
第1章 Linux簡介與安裝(教學視頻:52分鍾)2
1.1 Linux系統簡介2
1.1.1 Linux能做什麼2
1.1.2 Linux的主要發行版3
1.1.3 Linux系統的優勢4
1.2 Linux的存儲設備和目錄結構5
1.2.1 Linux系統中的存儲設備5
1.2.2 Linux系統中的目錄結構7
1.3 虛擬化技術的應用8
1.3.1 虛擬化和VMware公司9
1.3.2 VMware Workstation簡介10
1.3.3 VMware Workstation的網路連接方式11
1.3.4 VMware Workstation的使用技巧13
1.3.5 VMware ESX Server簡介13
1.4 Linux安裝過程14
1.4.1 安裝前的准備工作14
1.4.2 創建虛擬機並使用光碟引導15
1.4.3 安裝模式和光碟檢測18
1.4.4 圖形安裝環境配置19
1.4.5 磁碟分區21
1.4.6 引導程序和網路配置23
1.4.7 設置時區和根用戶密碼25
1.4.8 定製軟體包並開始安裝26
1.4.9 第一次啟動27
1.5 小結30
第2章 Linux系統入門(教學視頻:109分鍾)31
2.1 如何使用本書學習31
2.1.1 本書的知識結構和約定31
2.1.2 學習Linux系統的建議33
2.2 登錄系統33
2.2.1 圖形界面登錄33
2.2.2 命令行登錄35
2.2.3 SSH遠程登錄36
2.2.4 Telnet遠程登錄38
2.2.5 VNC遠程登錄38
2.2.6 SFTP登錄39
2.3 關閉、重啟系統41
2.3.1 關閉系統命令之shutdown41
2.3.2 關閉系統命令之poweroff41
2.3.3 掛起系統命令halt42
2.3.4 重啟系統命令reboot42
2.3.5 切換系統運行級別命令init42
2.4 Linux命令基礎及幫助43
2.4.1 Linux系統中的命令43
2.4.2 幫助之help命令和選項45
2.4.3 幫助之man手冊46
2.4.4 幫助之info信息頁48
2.5 系統與用戶的交互程序Shell50
2.5.1 Shell分類50
2.5.2 更改默認Shell51
2.6 Bash中的命令基本操作54
2.6.1 命令行編輯功能54
2.6.2 綁定快捷鍵和命令55
2.6.3 命令行補全功能59
2.6.4 命令歷史功能61
2.6.5 命令別名功能63
2.7 管道和輸入/輸出65
2.7.1 管道65
2.7.2 命令的輸入/輸出和錯誤66
2.7.3 重定向命令的輸入/輸出和錯誤66
2.8 小結69
第3章 常用命令(教學視頻:115分鍾)70
3.1 Linux基本命令70
3.1.1 切換工作目錄命令cd70
3.1.2 查看當前路徑命令pwd71
3.1.3 查看文件列表命令ls72
3.1.4 文件鏈接命令ln75
3.2 文件操作命令76
3.2.1 文件命名規則76
3.2.2 創建文件命令touch77
3.2.3 創建目錄命令mkdir77
3.2.4 移動、重命名文件命令mv78
3.2.5 復制文件命令cp79
3.2.6 刪除文件命令rm80
3.2.7 刪除空目錄命令rmdir81
3.2.8 查看文件類型命令file81
3.3 文本文件內容相關命令82
3.3.1 查看文本文件內容命令cat82
3.3.2 從文本尾查看文本內容命令tail83
3.3.3 從文本首行查看文本內容命令head84
3.3.4 分屏顯示文本內容命令more和less85
3.3.5 文本內容比較命令diff87
3.3.6 文本統計命令wc89
3.4 日期時間命令89
3.4.1 查看日期時間命令date90
3.4.2 查看日歷命令cal90
3.4.3 修改日期時間命令date和clock91
3.5 聯線用戶命令92
3.5.1 查看聯線用戶命令who、finger和w92
3.5.2 與聯線用戶通信的命令wall、write和mesg93
3.5.3 斷開聯線用戶命令fuser94
3.6 切換用戶命令94
3.6.1 臨時切換用戶命令su94
3.6.2 以root用戶身份運行命令sudo95
3.7 定位和查找96
3.7.1 搜索命令 which96
3.7.2 文件搜索命令locate96
3.7.3 特殊文件搜索命令whereis97
3.7.4 關鍵字搜索命令apropos97
3.8 輸入/輸出相關命令98
3.8.1 回顯命令echo98
3.8.2 接收用戶輸入命令read99
3.8.3 顯示並保存文本命令tee102
3.8.4 郵件命令mail103
3.8.5 啟動新Shell命令exec106
3.9 小結107
第4章 Linux命令中的特殊字元和正則表達式(教學視頻:48分鍾)108
4.1 命令中的特殊字元108
4.1.1 字元串引用符雙引號和單引號108
4.1.2 命令引用符反引號110
4.1.3 變數引用和命令轉換符美元符號111
4.1.4 反斜線屏蔽符111
4.2 文件名通配符111
4.2.1 單字元匹配元字元「?」112
4.2.2 多字元匹配元字元「*」112
4.2.3 字元范圍匹配符「[]」113
4.2.4 排除范圍匹配符「[!]」114
4.3 多條命令中的邏輯運算符和括弧115
4.3.1 邏輯或「||」115
4.3.2 邏輯與「&&」116
4.3.3 括弧116
4.4 命令中的正則表達式117
4.4.1 單字元匹配符「.」117
4.4.2 單字元或字元串重復匹配符「*」118
4.4.3 行首匹配符「^」118
4.4.4 行尾匹配符「$」119
4.4.5 反斜杠屏蔽符「」119
4.4.6 范圍匹配符「[]」和排除范圍匹配符「[^]」120
4.4.7 詞首、詞尾匹配符「<」和「>」120
4.4.8 重復次數匹配符「x{}」120
4.4.9 組合並使用正則表達式121
4.5 小結121
第5章 查找和篩選工具(教學視頻:93分鍾)123
5.1 查找文件工具find123
5.1.1 find的基本格式123
5.1.2 按文件名稱查找125
5.1.3 按文件許可權查找125
5.1.4 按文件類型查找126
5.1.5 按文件的時間戳記和大小查找126
5.1.6 按文件屬主或屬組查找127
5.1.7 find工具的其他參數128
5.1.8 使用exec和ok處理查找到的文件128
5.1.9 使用xargs命令處理查找到的文件129
5.1.10 find工具應用實例130
5.2 查找文本工具grep131
5.2.1 grep的基本格式131
5.2.2 使用grep查找文本132
5.2.3 行首、行尾匹配查找134
5.2.4 配合常用的正則表達式查找135
5.2.5 使用或、與多匹配模式查找136
5.2.6 grep工具應用實例137
5.3 流編輯器sed138
5.3.1 sed基本格式138
5.3.2 顯示和刪除行140
5.3.3 插入和修改文本142
5.3.4 替換文本和其他編輯指令145
5.3.5 處理文本中的控制字元148
5.3.6 分支結構149
5.4 格式化文本數據抽取工具awk152
5.4.1 awk命令基本格式152
5.4.2 正則表達、元字元、運算符和關系運算符153
5.4.3 在awk命令中使用變數156
5.4.4 在awk命令中使用流程式控制制159
5.4.5 awk命令中的函數162
5.5 轉換和刪除重復命令tr170
5.5.1 tr命令的基本格式170
5.5.2 字元轉換171
5.5.3 刪除字元172
5.6 合並和分割工具173
5.6.1 排序命令sort174
5.6.2 數據剪切命令cut179
5.6.3 數據粘貼命令paste181
5.6.4 數據連接命令join183
5.6.5 去除重復命令uniq186
5.6.6 分割文件命令split188
5.7 小結190
第6章 用戶和文件許可權管理(教學視頻:73分鍾)191
6.1 用戶管理191
6.1.1 系統用戶文件概述191
6.1.2 添加用戶命令useradd193
6.1.3 設置用戶密碼命令passwd196
6.1.4 刪除用戶命令userdel197
6.1.5 用戶管理命令usermod197
6.2 用戶組管理199
6.2.1 用戶組文件概述199
6.2.2 添加用戶組命令groupadd201
6.2.3 刪除用戶組命令groupdel201
6.2.4 用戶組管理202
6.3 基本許可權及管理命令203
6.3.1 文件的屬主和屬組203
6.3.2 修改文件屬主和屬組命令chown、chgrp203
6.3.3 文件許可權及表示方法205
6.3.4 文件許可權管理命令chmod207
6.3.5 suid、sgid和sticky許可權概述208
6.3.6 許可權掩碼命令umask211
6.4 POSIX ACL許可權系統及其管理命令212
6.4.1 POSIX ACL許可權系統概述213
6.4.2 ACL許可權管理和查看命令setfacl、getfacl213
6.4.3 ACL許可權管理214
6.5 小結217
第7章 磁碟和文件系統管理(教學視頻:70分鍾)218
7.1 磁碟及分區管理218
7.1.1 查看磁碟設備列表命令fdisk218
7.1.2 查看磁碟設備命令hdparm220
7.1.3 磁碟分區工具fdisk221
7.1.4 利用fdisk工具對磁碟分區222
7.2 文件系統管理225
7.2.1 Linux系統支持的文件系統225
7.2.2 創建文件系統命令mkfs226
7.2.3 查看和修改卷標命令e2label227
7.2.4 掛載文件系統228
7.2.5 卸載文件系統命令umount231
7.2.6 利用fstab自動掛載文件系統232
7.3 RAID設備233
7.3.1 磁碟陣列的種類233
7.3.2 磁碟陣列級別234
7.3.3 創建組成陣列的磁碟分區236
7.3.4 創建磁碟陣列237
7.3.5 為陣列添加熱備盤239
7.3.6 使用熱備盤替換損壞磁碟239
7.3.7 擴展陣列240
7.4 LVM邏輯卷管理241
7.4.1 LVM的基本概念241
7.4.2 創建物理卷243
7.4.3 創建卷組244
7.4.4 創建邏輯卷245
7.4.5 添加物理卷247
7.4.6 擴充邏輯卷248
7.4.7 減小邏輯卷249
7.4.8 移動數據並移除物理卷250
7.4.9 邏輯卷快照252
7.5 磁碟配額管理253
7.5.1 為磁碟配額提供支持253
7.5.2 檢查磁碟配額命令quotacheck254
7.5.3 查看磁碟使用情況命令repquota255
7.5.4 建立磁碟配額命令edquota255
7.5.5 開啟磁碟配額命令quotaon257
7.5.6 關閉磁碟配額命令quotaoff258
7.5.7 管理磁碟配額258
7.6 文件系統維護基礎259
7.6.1 查看文件系統使用情況命令df259
7.6.2 追蹤大文件命令260
7.6.3 修復文件系統命令fsck261
7.7 小結264
第8章 Linux系統管理(教學視頻:70分鍾)265
8.1 系統服務管理265
8.1.1 查看系統服務265
8.1.2 設置服務自啟動狀態267
8.1.3 添加刪除系統服務269
8.1.4 啟動和關閉服務命令service270
8.2 進程管理命令271
8.2.1 查看進程命令ps271
8.2.2 進程樹274
8.2.3 實時顯示進程命令top274
8.2.4 將任務放在後台執行277
8.2.5 查看後台任務命令jobs277
8.2.6 後台任務調至前台命令fg278
8.2.7 終止進程命令kill278
8.2.8 查看進程優先順序281
8.2.9 指定進程運行優先順序命令nice282
8.2.10 改變進程優先順序命令renice283
8.3 計劃任務命令crontab、at284
8.3.1 為計劃任務提供支持284
8.3.2 cron計劃任務格式285
8.3.3 添加計劃任務命令crontab286
8.3.4 備份及恢復計劃任務288
8.3.5 用戶計劃任務288
8.3.6 系統計劃任務289
8.3.7 使用at執行一次性計劃任務289
8.4 日誌管理292
8.4.1 syslogd守護進程及其配置文本292
8.4.2 日誌消息的格式295
8.4.3 記錄日誌消息命令logger295
8.4.4 日誌輪循296
8.4.5 監視系統日誌297
8.5 小結299
第9章 數據備份和應用程序管理(教學視頻:74分鍾)301
9.1 數據備份基礎301
9.1.1 數據備份概述301
9.1.2 備份數據存放的介質302
9.1.3 備份類型302
9.1.4 備份時間選擇304
9.2 tar備份工具304
9.2.1 tar命令的基本格式304
9.2.2 tar歸檔和備份文件305
9.2.3 查看歸檔文件中的文件列表306
9.2.4 從歸檔文件中還原文件306
9.3 cpio備份命令307
9.3.1 cpio命令的基本格式308
9.3.2 使用cpio歸檔文件308
9.3.3 查看歸檔文件中的文件列表309
9.3.4 恢復cpio歸檔文件310
9.4 壓縮工具和整盤備份工具dd311
9.4.1 使用gzip壓縮文件311
9.4.2 使用bzip2壓縮文件313
9.4.3 整盤備份命令dd314
9.5 RPM包管理命令rpm317
9.5.1 RPM包管理器簡介317
9.5.2 rpm命令基本格式318
9.5.3 使用rpm命令查詢軟體包319
9.5.4 使用rpm命令安裝軟體包321
9.5.5 使用rpm命令卸載軟體包323
9.5.6 使用rpm命令升級軟體包324
9.6 編譯安裝相關命令和工具324
9.6.1 安裝編譯環境324
9.6.2 獲取軟體工具wget、links325
9.6.3 編譯前的配置327
9.6.4 編譯軟體命令make329
9.6.5 安裝命令make install329
9.6.6 運行及環境配置330
9.6.7 卸載軟體命令make uninstall332
9.7 利用yum工具安裝應用程序332
9.7.1 yum簡介333
9.7.2 配置yum333
9.7.3 查詢源上的軟體包336
9.7.4 利用yum安裝軟體包337
9.7.5 利用yum卸載軟體包339
9.7.6 安裝、卸載軟體包組339
9.8 小結341
第10章 網路管理(教學視頻:81分鍾)343
10.1 網路介面配置命令343
10.1.1 查看網路介面信息343
10.1.2 配置網路介面347
10.1.3 重新啟用網路介面351
10.1.4 配置DNS伺服器地址352
10.2 路由命令route354
10.2.1 查看系統中的路由表355
10.2.2 添加默認路由356
10.2.3 添加路由條目357
10.3 主機名稱命令hostname360
10.3.1 查看主機名稱360
10.3.2 修改主機名稱361
10.4 設置網路冗餘363
10.4.1 bonding簡介364
10.4.2 bonding的模式365
10.4.3 設置網路介面366
10.4.4 載入模塊生成新的網路連接367
10.4.5 驗證設置368
10.5 網路工具370
10.5.1 測試連通命令ping370
10.5.2 網路路徑測試命令traceroute374
10.5.3 查看網路狀態命令netstat374
10.5.4 域名解析工具dig和nslookup377
10.5.5 排除網路故障380
10.6 小結382
第2篇 文本編輯器
第11章 Vi和Vim文本編輯器(教學視頻:37分鍾)386
11.1 文本編輯器概述386
11.1.1 文本編輯器的發展及分類386
11.1.2 Linux系統中的文本編輯器387
11.2 認識Vi和Vim編輯器388
11.2.1 啟動Vim編輯器388
11.2.2 Vim編輯器幫助390
11.2.3 退出Vim編輯器391
11.2.4 Vim編輯器的模式391
11.2.5 Vim編輯器的工作界面392
11.3 向Vim編輯器邁出第1步393
11.3.1 讀取文件393
11.3.2 保存文件394
11.3.3 進入插入模式並插入文本394
11.3.4 移動游標395
11.3.5 刪除文本396
11.3.6 撤銷和恢復396
11.4 快速移動游標396
11.4.1 按單詞移動游標396
11.4.2 快速移動游標至行首和行尾397
11.4.3 移動游標至指定的行397
11.4.4 滾動屏幕398
11.4.5 使用滑鼠移動游標398
11.4.6 其他移動游標的技巧399
11.5 Vim編輯器的查找和替換功能400
11.5.1 簡單的查找功能401
11.5.2 反向查找401
11.5.3 查找時忽略大小寫402
11.5.4 高亮顯示查找結果403
11.5.5 增量查找403
11.5.6 簡單的查找替換功能404
11.5.7 區域性查找替換405
11.5.8 謹慎的查找替換405
11.6 Vim編輯器中的窗口操作406
11.6.1 分割窗口406
11.6.2 關閉窗口409
11.6.3 控制窗口大小409
11.6.4 窗口中的操作410
11.6.5 移動窗口410
11.7 Vim編輯器的高級技巧411
11.7.1 復制和粘貼411
11.7.2 剪切和粘貼411
11.7.3 編輯多個文件411
11.7.4 Visual模式413
11.7.5 在Vim編輯器中執行Shell命令415
11.8 定製Vim編輯器及災難恢復415
11.8.1 定製文件vimrc416
11.8.2 定製Vim編輯器416
11.8.3 災難恢復417
11.9 小結418
第12章 Emacs編輯器(教學視頻:28分鍾)419
12.1 Emacs編輯器概述與入門419
12.1.1 Emacs編輯器概述419
12.1.2 啟動Emacs編輯器420
12.1.3 Emacs編輯器啟動界面421
12.1.4 退出Emacs編輯器423
12.2 Emacs基本操作424
12.2.1 使用Emacs菜單欄424
12.2.2 打開新文件425
12.2.3 保存文件426
12.2.4 簡單編輯操作426
12.3 快速移動游標427
12.3.1 按字元移動游標427
12.3.2 按句子移動游標428
12.3.3 按單詞移動游標428
12.3.4 按段落移動游標428
12.3.5 滾動屏幕428
12.3.6 其他移動游標的技巧429
12.4 Emacs編輯器的常用功能430
12.4.1 撤銷與恢復430
12.4.2 搜索功能431
12.4.3 查找並替換432
12.4.4 復制、剪切和粘貼433
12.5 Emacs編輯器的高級技巧434
12.5.1 刪除環435
12.5.2 編輯文本區域436
12.5.3 書簽功能436
12.5.4 災難恢復440
12.5.5 使用多窗口441
12.6 目錄模式444
12.6.1 查看文件445
12.6.2 刪除、復制、重命名文件446
12.6.3 操作壓縮文件447
12.6.4 其他文件操作447
12.7 Emacs編輯器的其他功能448
12.7.1 在Emacs編輯器中執行Shell命令449
12.7.2 發送電子郵件450
12.7.3 閱讀電子郵件450
12.8 小結453
第13章 Eclipse編輯器(教學視頻:29分鍾)454
13.1 Eclipse開發平台概述與安裝454
13.1.1 Eclipse平台概述454
13.1.2 Eclipse平台安裝前的准備455
13.1.3 安裝Eclipse平台457
13.2 Eclipse界面入門459
13.2.1 第1次啟動459
13.2.2 Eclipse界面介紹460
13.2.3 操作窗口461
13.3 使用Eclipse開發Java程序463
13.3.1 建立編程項目463
13.3.2 建立Java類464
13.3.3 輸入編程內容465
13.3.4 運行Java程序467
13.3.5 調試程序468
13.4 小結470
第14章 常用的文本編輯器(教學視頻:28分鍾)471
14.1 Nano編輯器471
14.1.1 Nano編輯器簡介471
14.1.2 安裝Nano編輯器471
14.1.3 Nano啟動及工作界面472
14.1.4 快速移動游標474
14.1.5 復制粘貼文本474
14.1.6 查找和替換475
14.2 Gedit文本編輯器477
14.2.1 Gedit文本編輯器概述477
14.2.2 Gedit工作界面介紹478
14.2.3 快速移動游標479
14.2.4 顯示行號479
14.2.5 語法高亮480
14.2.6 拼寫檢查480
14.2.7 查找和替換482
14.3 Kate編輯器482
14.3.1 Kate編輯器概述483
14.3.2 Kate基本界面484
14.3.3 快速移動游標485
14.3.4 查找和替換485
14.3.5 拼寫檢查487
14.3.6 語法高亮488
14.3.7 腳本編程環境488
14.4 小結490
第3篇 Shell編程
第15章 Shell腳本編程基礎、變數(教學視頻:56分鍾)492
15.1 Bash腳本編程基礎492
15.1.1 Shell腳本概述492
15.1.2 Shell腳本的基本內容493
15.1.3 腳本的運行方式495
15.1.4 接收用戶輸入496
15.1.5 向腳本傳遞參數497
15.2 Tcsh腳本編程498
15.2.1 輸出字元串Hello的示例腳本498
15.2.2 Tcsh與Bash腳本的區別499
15.3 Shell中的變數499
15.3.1 保存系統運行情況的環境變數500
15.3.2 傳遞參數的位置變數503
15.3.3 系統預先定義的變數504
15.3.4 用戶自定義變數505
15.4 Shell中的數組509
15.4.1 數組的定義509
15.4.2 數組的使用510
15.4.3 清除數組512
15.5 小結512
第16章 系統腳本和登錄環境(教學視頻:32分鍾)513
16.1 系統啟動過程513
16.1.1 Linux系統的啟動步驟513
16.1.2 引導裝載程序GRUB514
16.2 系統初始化過程518
16.2.1 INIT進程的配置文件518
16.2.2 設置系統默認運行級別519
16.2.3 初始化系統腳本520
16.2.4 啟動系統服務520
16.2.5 重啟快捷鍵522
16.2.6 UPS選項522
16.2.7 運行終端523
16.3 系統初始化過程中使用的腳本523
16.3.1 系統初始化腳本524
16.3.2 rc.local腳本525
16.4 用戶環境526
16.4.1 全局用戶配置文件/etc/profile526
16.4.2 個人用戶配置文件.bash_profile527
16.4.3 定製用戶環境529
16.5 小結529
第17章 函數和腳本參數(教學視頻:22分鍾)531
17.1 Shell中的函數531
17.1.1 在腳本中定義函數531
17.1.2 在腳本中使用函數532
17.1.3 向函數傳遞參數和返回值533
17.1.4 返回函數執行狀態535
17.2 在Shell中使用函數文件536
17.2.1 函數文件的編寫536
17.2.2 函數文件的調用537
17.3 兩個示例腳本538
17.3.1 示例1:檢查包的依賴性538
17.3.2 示例2:監控文件系統541
17.4 向腳本傳遞參數545
17.4.1 使用shift命令處理參數545
17.4.2 使用shift命令處理選項參數548
17.5 小結549
第18章 控制Shell腳本執行順序(教學視頻:29分鍾)550
18.1 條件測試和捕獲信號550
18.1.1 退出狀態550
18.1.2 文件測試553
18.1.3 變數測試558
18.1.4 字元串和數值測試559
18.1.5 邏輯操作符561
18.1.6 捕獲系統信號562
18.2 條件判斷語句if564
18.2.1 簡單if語句的使用564
18.2.2 if else語句的使用566
18.2.3 if elif語句的使用569
18.2.4 多if語句嵌套572
18.3 多條件判斷語句case573
18.3.1 多條件判斷語句case的基本格式573
18.3.2 利用case語句處理選項參數574
18.3.3 利用case語句處理用戶輸入577
18.4 步進循環語句for578
18.4.1 for語句的基本格式578
18.4.2 利用for語句處理數組579
18.4.3 一個設置防火牆的例子580
18.5 循環語句until581
18.5.1 until語句的基本格式581
18.5.2 利用until語句監控文件系統狀態582
18.6 while循環語句583
18.6.1 while語句的基本格式583
18.6.2 while語句與until語句的區別584
18.6.3 利用while語句監控系統網路狀態585
18.7 利用break和continue控制循環586
18.7.1 使用break語句控制循環586
18.7.2 使用continue語句控制循環588
18.8 小結589
第19章 Shell編程技巧和應用實例(教學視頻:56分鍾)591
19.1 運行級別腳本591
19.1.1 運行級別腳本的結構591
19.1.2 編寫運行級別腳本593
19.1.3 添加和管理運行級別腳本595
19.2 怎樣寫好Shell腳本596
19.2.1 一般性原則596
19.2.2 良好的編程習慣596
19.2.3 Shell腳本的安全性597
19.3 調試腳本599
19.3.1 排除錯誤599
19.3.2 腳本調試601
19.4 Shell編程實例——自動備份文件腳本603
19.4.1 需求和設計思路603
19.4.2 完全備份模塊604
19.4.3 差異備份模塊605
19.4.4 遠程備份模塊606
19.4.5 主體和日誌功能607
19.4.6 自動運行備份腳本610
19.5 Shell編程實例——防火牆快速配置腳本610
19.5.1 設置防火牆狀態610
19.5.2 添加防火牆規則612
19.5.3 保存防火牆規則616
19.6 快速初始化系統腳本617
19.6.1 初始化系統網路617
19.6.2 更改SSH服務的埠625
19.6.3 設置SELinux狀態626
19.6.4 關閉不必要的系統服務626
19.7 服務監控和主備切換腳本627
19.7.1 測試主伺服器狀態627
19.7.2 切換備用伺服器狀態628
19.8 小結629
B. linux下的 shell到底是什麼啊
在計算機科學中,是指「提供用戶使用界面」的軟體,通常指的是命令行界面的解析器。一般來說,shell是指操作系統中,提供訪問內核所提供之服務的程序。
C. linux下的shell是什麼
什麼是shell
shell是用戶和Linux
操作系統
之間的
介面
。Linux中有多種shell,其中預設使用的是Bash。本章講述了shell的工作原理,shell的種類,shell的一般操作及Bash的
特性
。
什麼是shell
Linux系統的shell作為操作系統的
外殼
,為用戶提供使用操作系統的介面。它是
命令語言
、命令
解釋程序
及
程序設計語言
的統稱。
shell是用戶和
Linux內核
之間的介面
程序
,如果把Linux內核想像成一個
球體
的中心,shell就是圍繞
內核
的外層。當從shell或其他程序向Linux傳遞命令時,內核會做出相應的反應。
shell是一個命令語言
解釋器
,它擁有自己內建的shell命令集,shell也能被系統中其他
應用程序
所調用。用戶在提示符下輸入的命令都由shell先解釋然後傳給Linux核心。
Shell是一種具備
特殊功能
的程序,
它是介於使用者和
UNIX/linux
操作系統之核心
程序(kernel)間的一個介面。為什麼我們說
shell
是一種介於系統核心程序與使用者
間的中介者呢?讀過操作系統概論的讀者們都知道操作系統是一個
系統資源
的管理者與分
配者,當您有需求時,您得向系統提出;從操作系統的角度來看,它也必須防止使用者因
為錯誤的操作而造成系統的傷害?眾所周知,對
計算機
下命令得透過命令(command)
或
是程序(program);程序有編譯器(compiler)將程序轉為
二進制代碼
,可是命令呢?
其實shell
也是一支程序,它由
輸入設備
讀取命令,再將其轉為計算機可以了解的機械碼,
然後執行它。
各種操作系統都有它自己的
shell,以
DOS
為例,它的
shell
就是
command.com文
件。如同
DOS
下有
NDOS,4DOS,DRDOS
等不同的命令解譯程序可以取代標準的
command.com
,UNIX
下除了
Bourne
shell(/bin/sh)
外還有
C
shell(/bin/csh)、
Korn
shell(/bin/ksh)、Bourne
again
shell(/bin/bash)、Tenex
C
shell(tcsh)
等其它的
shell。UNIX/linux將
shell
獨立於核心程序之外,
使得它就如同一般的應用
程序,
可以在不影響操作系統本身的情況下進行修改、更新版本或是添加新的功能。
有一些命令,比如改變工作目錄命令cd,是包含在shell
內部
的。還有一些命令,例如
拷貝
命令cp和移動命令rm,是存在於
文件系統
中某個目錄下的單獨的程序。對用戶而言,不必關心一個命令是建立在shell內部還是一個單獨的程序。
shell首先檢查命令是否是
內部命令
,若不是再檢查是否是一個應用程序(這里的應用程序可以是Linux本身的
實用程序
,如ls和rm,也可以是購買的商業程序,如xv,或者是
自由軟體
,如emacs)。然後shell在搜索
路徑
里尋找這些應用程序(搜索路徑就是一個能找到可執行程序的目錄列表)。如果鍵入的命令不是一個內部命令並且在路徑里沒有找到這個
可執行文件
,將會顯示一條錯誤信息。如果能夠成功找到命令,該內部命令或應用程序將被分解為
系統調用
並傳給Linux內核。
shell的另一個重要特性是它自身就是一個解釋型的程序設計語言,shell程序設計語言支持絕大多數在
高級語言
中能見到的程序
元素
,如
函數
、
變數
、
數組
和程序控制結構。shell
編程語言
簡單易學,任何在提示符中能鍵入的命令都能放到一個可執行的shell程序中。
當普通用戶成功登錄,系統將執行一個稱為shell的程序。正是shell進程提供了命令行提示符。作為默認值(TurboLinux系統默認的shell是BASH),對普通用戶用「$」作提示符,對超級用戶(root)用「#」作提示符。
一旦出現了shell提示符,就可以鍵入
命令名稱
及命令所需要的
參數
。shell將執行這些命令。如果一條命令花費了很長的時間來運行,或者在屏幕上產生了大量的輸出,可以從
鍵盤
上按ctrl+c發出中斷
信號
來中斷它(在正常結束之前,中止它的執行)。
當用戶准備結束登錄對話進程時,可以鍵入logout命令、exit命令或文件結束符(EOF)(按ctrl+d實現),結束登錄。
D. linux中設計一個shell腳本程序可以接受命令行輸入的參數執行相應的菜單命令
之所以用到命令行參數,關鍵在於shell腳本需要與運行腳本的人員進行交互。
bash shell提供了命令行參數添加在命令後面的數據值)、命令行選項修改命令行為的單字元值)和直接讀取鍵盤輸入。
1、命令行參數
向shell腳本傳遞數據的最基本方式是使用命令行參數。
1)讀取參數
讀取輸入的參數的變數為位置參數,位置參數通過標准數字表示,
其中$0為程序名稱,$1為第一個參數,$2為第二個參數,依次類推,直到$9為第九個參數。
shell腳本自動將命令行參數賦值給各個位置變數。
同時輸入多個參數可以是數值也可以是字元串)時,必須使用空格分隔要想在參數值中包含空格,就必須使用單引號或雙引號)
當參數多於9個後,必須在shell腳本內使用大括弧將變數括起來,如${10}。從而可以使用任意個參數。
2)讀取程序名稱
傳遞給變數$0的字元串實際上是程序的路徑根據調用方法決定是相對還是絕對路徑)。
使用basename命令可以去掉路徑前綴,只獲得程序名稱名字中不 可以有空格)。
3)測試腳本
當腳本認為應該包含參數,卻實際上沒有數據時,就會出錯。
好的方法是對參數進行檢查來保證使用參數前確實存在數據,可以使用-n參數來檢查。
例子:if [ –n 「$1」 ] then .. else .. fi
2、特殊的參數變數
用於跟蹤命令行參數
1)參數計數
使用特殊變數$#測試執行腳本時包含的命令行參數個數。腳本中任何位置都可以 使用$#
例子:if [ $# –ne 2 ] 即可測試參數個數
可以使用${!#}來返回最後一個命令行參數當無參數時,$#為0,而${!#}為程序名)
2)獲取所有數據
變數$*將命令行中提供的所有參數作為一個單詞處理,它將多個參數看成 一個參數。
變數$@將命令行中提供的所有參數作為同一個字元串中的多個單詞處理。 允許對其中的值進行迭代一般使用for),分隔開不同參數
3、移位
shift命令能夠改變命令行參數的相對位置。默 認將每個參數變數左移一個位置變數$0不變,把$1丟棄,注意不可以恢復了!)
在不清楚參數數目情況下,這是一個迭代參數的好辦法。
可以為shift提供一個參數,來實現多位移變化。
4、處理選項
選項是由破折號引導的單個字母,用於更改命令的行為。
1,找出選項
1)處理簡單選項
可以使用處理命令行參數相同的方法處理選項,抽取時使用case語句進行判斷是否符合選項格式。
2)從參數中分離選項
同時使用選項和參數時,可以使用--指示選項列表的結束。發現--後,shell就知道後面的是普通參數了,停止使用case處理選項。
3)處理帶值的選項
選項後緊跟參數值,一種方法是在case中對應選項後使用shift和讀後一位參數的方法處理。更好的方法如 下:
2,使用getopt命令
getopt命令在處理選項和參數時非常方便。它對參數進行重新組 織,以便於解析
1)命令格式
getopt可以接受任意形式的選項和參數列表,並自動將它們轉換為適當的格式。
命令格式為: getopt options optstring parameters
選項字元串(opstring)用於定義命令行中的有效選項字母,以及哪些選項字母需要參數值。
2)腳本中使用getopt
需要使用set命令將現有的命令行選項和參數替換為getopt命令生成的 格式化形式。
需要將原始腳本命令行參數送給getopt命令,然後將getopt命令輸出送給set命令,如下:set – `getopts –q ab:cd 「$@」`
但是getopt命令不能很好的處理帶有空格的參數值,它將空格解析為參數分隔符,而不是將雙引號引起來的兩個 值合並成一個參數。解決辦法如下:
3)更高級的getopts命令
getopts命令順序的對現有的shell參數變數進行處理,每調用一次,只處理命令中檢測到的參數中的一個。處理完所有參數後,以大於0的退出 狀態退出。
非常適宜於在循環中解析所有命令行參數
格式為: getopts optstring variable
$optarg包含需要參數值的選項要使用的值,$optind包含getopts停止處理時在參數列表中的位置。
注意:當getopts處理時,會將選項前的-去掉,所以對應的case中不需要破折號。
好的特性:
1)可以在參數值中包含空格
2)選項字母和參數值中間可以沒有空格
3)將在命令行中找到的未定義的選項都綁定為單一的輸出——問號
5、標准化選項
有一些字母選項具有標准含義。最好按照標准含義定義選項意義
-a –c –d –e –f –h –i –l –n –o –q –r –s –v- x –y
6、獲取用戶輸入
當需要在執行過程中獲得執行腳本人員的輸入,使用read命令
1)基本讀取
read命令接受標准輸入或其他文件描述符輸入。讀入後將數據放入 一個標准變數中。
-p 允許在read命令行中直接指定一個提示。
可以指定多個變數,也可以不指定將放置在reply環境變數中)
2)計時
使用-t指定一個計時器,計時數滿還未輸入,read返回一個非0的退出狀態。
使用-n指定輸入的字元個數,輸入達到預定數目時,就自動結束輸入
3)默讀
使用-s使輸入不顯示在終端例如輸入密碼)
4)讀取文件
最常用的方法是使用cat命令,並通過管道傳給包含read的while語句。