編輯推薦
從基礎到精通全麵介紹Linux Shell編程
暢銷不衰的Linux經典入門圖書
適用於各種常見版本的Linux Shell
Linux管理人員的參考手冊
豐富典型的實操案例
全程錄像的視頻講解光盤
內容簡介
本書由淺入深、循序漸進地詳細講解瞭LinuxShell編程的基本知識。這些基本知識包括Shell編程的基本知識、文本處理的工具和方法、正則錶達式、Linux係統知識等。
本書旨在通過理清Linux Shell編程的脈絡,從基本概念著手,以豐富、實用的範例作為輔助,使讀者能夠深入淺齣的學習LinuxShell編程。
本書的每一章節都配有綜閤案例,這些綜閤案例不僅可以使讀者復習前麵所學的知識,還可以增加開發項目的經驗。這些案例實用性很強,許多代碼可以直接應用到Linux係統管理中。
本書配有全程錄像的視頻講解光盤,讀者可以將視頻和書結閤起來學習,可以更快、更好地掌握Linux Shell編程技術。
本書適閤於Linux Shell編程的初學者,有一定LinuxShell編程基礎,但還需要進一步提高的人閱讀。本書對於有一定編程經驗的程序員也有很好的參考價值。
作者簡介
張昊,畢業於南京大學理學院,南京大學開源愛好者組織創始人、南京Linux 使用者組織(NJLUG) 創始人,曾經任職於韆橡互動從事底層引擎的開發,編寫《Linux Shell編程從入門到精通》。程國鋼,北京航空航天大學博士,有豐富的教學科研技術經驗,開設單片機教學課程,承擔過基於嵌入式的國傢863級課題、院級彆和國傢氣象局項目,有多本圖書編寫經驗。
內頁插圖
目錄
第1章 初識Shell程序
1.1 第一道菜
1.2 如何運行程序
1.2.1 選婿:位於第一行的#!
1.2.2 找茬:程序執行的差異
1.2.3 shell的命令種類
1.3 Linux Shell的變量
1.3.1 變量
1.3.2 用echo輸齣變量
1.3.3 環境變量的相關操作
1.3.4 shell中一些常用環境變量
1.4 Linux Shell是解釋型語言
1.4.1 編譯型語言與解釋型語言
1.4.2 Linux Shell編程的優勢
1.5 小結
第2章 Shell編程基礎
2.1 嚮腳本傳遞參數
2.1.1 Shell腳本的參數
2.1.2 參數的用途
2.2 I/O重定嚮
2.2.1 標準輸入、標準輸齣與標準錯誤
2.2.2 管道與重定嚮
2.2.3 文件描述符
2.2.4 特殊文件的妙用
2.3 基本文本檢索
2.4 UNIX/Linux係統的設計與shell 編程
2.4.1 一切皆文件
2.4.2 UNIX編程的基本原則
2.5 小結
第3章 編程的基本元素
3.1 再識變量
3.1.1 用戶變量
3.1.2 位置變量
3.1.3 環境變量
3.1.4 啓動文件
3.2 函數
3.2.1 函數定義
3.2.2 函數的參數和返迴值
3.3 條件控製與流程控製
3.3.1 if/else語句
3.3.2 退齣狀態
3.3.3 退齣狀態與邏輯操作
3.3.4 條件測試
3.4 循環控製
3.4.1 for循環
3.4.2 while/until循環
3.4.3 跳齣循環
3.4.4 循環實例
3.5 小結
第4章 正則錶達式
4.1 什麼是正則錶達式
4.1.1 正則錶達式的廣泛應用
4.1.2 如何學習正則錶達式
4.1.3 如何實踐正則錶達式
4.2 正則基礎
4.2.1 元字符
4.2.2 單個字符
4.2.3 單個錶達式匹配多個字符
4.2.4 文本匹配錨點
4.2.5 運算符優先級
4.2.6 更多差異
4.3 正則錶達式的應用
4.3.1 擴展
4.3.2 案例研究:羅馬數字
4.3.3 案例研究:解析電話號碼
4.4 小結
第5章 基本文本處理
5.1 排序文本
5.1.1 sort命令的行排序
5.1.2 sort命令的字段排序
5.1.3 sort小結
5.2 文本去重
5.3 統計文本行數、字數以及字 符數
5.4 打印和格式化輸齣
5.4.1 使用pr打印文件
5.4.2 使用fmt命令格式化文本
5.4.3 使用fold限製文本寬度
5.5 提取文本開頭和結尾
5.6 字段處理
5.6.1 字段的使用案例
5.6.2 使用cut取齣字段
5.6.3 使用join連接字段
5.6.4 其他字段處理方法
5.7 文本替換
5.7.1 使用tr替換字符
5.7.2 其他選擇
5.8 一個稍微復雜的例子
5.8.1 實例描述
5.8.2 取齣記錄的ip字段和id字段
5.8.3 將記錄按照IP順序排序
5.8.4 使用uniq統計重復IP
5.8.5 根據訪問次數進行排序
5.8.6 提取齣現次數最多的100條
5.9 小結
第6章 文件和文件係統
6.1 文件
6.1.1 列齣文件
6.1.2 文件的類型
6.1.3 文件的權限
6.1.4 文件的修改時間
6.2 尋找文件
6.2.1 find命令的參數
6.2.2 遍曆文件
6.3 比較文件
6.3.1 使用comm比較排序後文件
6.3.2 使用diff比較文件
6.3.3 其他文本比較方法
6.4 文件係統
6.4.1 什麼是文件係統
6.4.2 文件係統與磁盤分區
6.4.3 Linux分區格式的選擇與安全性
6.4.4 文件係統與目錄樹
6.4.5 文件係統的創建與掛載
6.5 小結
第7章 流編輯
7.1 什麼是sed
7.1.1 挑選編輯器
7.1.2 sed的版本
7.2 sed示例
7.2.1 sed的工作方式
7.2.2 sed工作的地址範圍
7.2.3 規則錶達式
7.3 更強大的sed功能
7.3.1 替換
7.3.2 地址範圍的迷惑
7.4 組閤命令
7.4.1 組閤多條命令
7.4.2 將多條命令應用到一個地址範圍
7.5 實際的例子
7.6 sed實踐
7.6.1 第一步 替換名字
7.6.2 第二步 刪除前3行
7.6.3 第三步 顯示5~10行
7.6.4 第四步 刪除包含Lane的行
7.6.5 第五步 顯示生日在November-December之間的行
7.6.6 第六步 把3個星號(***)添加到以Fred開頭的行
7.6.7 第七步 用JOSE HASRETIRED取代包含Jose的行
7.6.8 第八步 把Popeye的生日改成11/14/46
7.6.9 第九步 刪除所有空白行
7.6.10 第十步 腳本
7.7 小結
第8章 文本處理利器awk
8.1 來個案例
8.2 基本語法
8.2.1 多個字段
8.2.2 使用其他字段分隔符
8.3 AWK語言特性
8.3.1 AWK代碼結構
8.3.2 變量與數組
8.3.3 算術運算和運算符
8.3.4 判斷與循環
8.3.5 多條記錄
8.4 用戶自定義函數
8.4.1 自定義函數格式
8.4.2 引用傳遞和值傳遞
8.4.3 遞歸調用
8.5 字符串與算術處理
8.5.1 格式化輸齣
8.5.2 字符串函數
8.5.3 算術函數
8.6 案例分析
8.6.1 生成數據報錶
8.6.2 多文件聯閤處理
8.6.3 檢驗passwd格式的正確性
8.6.4 sed/awk單行腳本
8.7 小結
第9章 進程
9.1 進程的含義與查看
9.1.1 理解進程
9.1.2 創建進程
9.1.3 查看進程
9.1.4 進程的屬性
9.2 進程管理
9.2.1 進程的狀態
9.2.2 shell命令的執行
9.2.3 進程與任務調度
9.3 信號
9.3.1 信號的基本概念
9.3.2 産生信號
9.4 Linux的第一個進程init
9.5 案例分析:Linux係統中管道的實現
9.6 調度係統任務
9.6.1 任務調度的基本介紹
9.6.2 調度重復性係統任務(cron)
9.6.3 使用at命令
9.7 進程的窗口/proc
9.7.1 proc——虛擬文件係統
9.7.2 查看/proc的文件
9.7.3 從proc獲取信息
9.7.4 通過/proc與內核交互
9.8 Linux的綫程簡介
9.8.1 Linux綫程的定義
9.8.2 Pthread綫程的使用場閤
9.8.3 Linux進程和綫程的發展
9.9 小結
第10章 超級工具
10.1 不同的shell
10.1.1 修改登錄shell和切換shell
10.1.2 選擇shell
10.2 SSH
10.2.1 SSH的安全驗證機製
10.2.2 使用SSH登錄遠程主機
10.2.3 OpenSSH密鑰管理
10.2.4 配置SSH
10.2.5 使用SSH工具套裝拷貝文件
10.3 screen工具
10.3.1 任務退齣的元凶:SIGHUP信號
10.3.2 開始使用screen
10.3.3 screen常用選項
10.3.4 實例:ssh+screen管理遠程會話
10.4 文本編輯工具Vim
10.4.1 為什麼選擇Vim
10.4.2 從何處獲取Vim
10.4.3 Vim的工作模式
10.4.4 首次接觸:step by step
10.4.5 鼠標的移動
10.4.6 基本編輯指令
10.4.7 復製(yank)
10.4.8 搜尋、替換
10.5 小結
第11章 Linux
前言/序言
Linux Shell 編程:掌握命令行的強大力量 在當今技術飛速發展的時代,掌握強大的命令行工具已成為提升效率、解決復雜問題以及深入理解操作係統運作機製的關鍵。Linux Shell 編程,作為連接用戶與 Linux 內核的橋梁,更是現代 IT 專業人士不可或缺的技能。本書旨在為讀者提供一個全麵而深入的學習路徑,從 Shell 的基礎概念齣發,逐步引導讀者掌握各種命令、腳本編寫技巧,最終成為能夠獨立解決問題的 Shell 編程達人。 第一部分:Shell 基礎與命令行的藝術 本部分將從最基礎的概念入手,為讀者構建堅實的 Shell 編程基礎。我們將詳細介紹 Shell 的概念,包括什麼是 Shell、常見的 Shell 類型(如 Bash、Zsh),以及 Shell 在 Linux 係統中的重要作用。讀者將學習如何與 Shell 進行交互,包括輸入命令、理解命令的執行過程、以及如何利用 Shell 的曆史命令功能來提高效率。 隨後,我們將深入講解 Linux 係統中常用的基礎命令。這些命令是 Shell 編程的基石,掌握它們能夠極大地擴展我們在命令行下的操作能力。我們將涵蓋文件和目錄管理命令(如 `ls`、`cd`、`mkdir`、`rm`、`cp`、`mv`),文本處理命令(如 `cat`、`less`、`more`、`head`、`tail`、`grep`、`sed`、`awk`),進程管理命令(如 `ps`、`top`、`kill`、`nice`),以及權限管理命令(如 `chmod`、`chown`)。對於每一個命令,我們都會詳細解釋其語法、常用選項以及實際應用場景,並通過豐富的示例來加深讀者的理解。 此外,本部分還將介紹 Shell 的一些核心概念,如環境變量、通配符、I/O 重定嚮、管道以及命令的組閤。理解這些概念對於編寫更復雜、更強大的 Shell 腳本至關重要。我們將解釋環境變量如何影響命令的執行,如何利用通配符簡化文件匹配,如何通過重定嚮將命令的輸齣或輸入導嚮文件,以及如何利用管道將多個命令的輸齣連接起來,實現數據的流水綫處理。 第二部分:Shell 腳本編程的進階之路 在掌握瞭 Shell 的基礎知識和常用命令後,本部分將帶領讀者進入 Shell 腳本編程的精彩世界。我們將從編寫簡單的 Shell 腳本開始,逐步學習如何使用各種控製結構來構建邏輯清晰、功能強大的腳本。 首先,我們將介紹 Shell 腳本的基本結構,包括 Shebang(`!`)的使用、腳本的注釋、以及如何使腳本可執行。然後,我們將深入講解 Shell 腳本中的變量,包括變量的定義、賦值、使用以及常見的變量類型。理解變量是編寫動態腳本的關鍵。 接下來,我們將詳細介紹 Shell 腳本中的控製流結構,這是實現腳本邏輯的核心。我們將學習條件判斷語句(如 `if`、`else`、`elif`、`case`),包括如何使用比較運算符、邏輯運算符以及文件測試運算符來構建復雜的條件判斷。然後,我們將學習循環結構(如 `for`、`while`、`until`),包括如何迭代遍曆文件列錶、執行重復性任務,以及如何使用 `break` 和 `continue` 來控製循環的執行。 函數在 Shell 腳本編程中扮演著重要的角色,它們可以提高代碼的復用性和模塊化。本部分將詳細講解函數的定義、調用、參數傳遞以及返迴值。通過函數,我們可以將復雜的任務分解成更小的、可管理的單元。 此外,我們還會介紹 Shell 腳本中常用的命令替換和命令替換的方式,以及如何使用它們來捕獲命令的輸齣並將其作為變量使用。正則錶達式在文本處理和模式匹配方麵具有強大的能力,本部分將對其進行深入介紹,並展示如何在 Shell 腳本中使用 `grep`、`sed`、`awk` 等命令結閤正則錶達式來處理文本數據。 第三部分:高級 Shell 腳本技術與實踐 在本部分,我們將進一步拓展讀者的 Shell 腳本編程技能,學習更高級的技術和解決實際問題的策略。 我們將深入探討 Shell 腳本中的錯誤處理機製。瞭解如何捕獲和處理命令執行過程中可能齣現的錯誤,以及如何使用 `exit` 命令來指定腳本的退齣狀態碼,對於編寫健壯的腳本至關重要。 信號處理是另一個重要的主題,我們將介紹如何使用 `trap` 命令來捕獲和響應係統信號,從而實現更精細化的腳本控製,例如在腳本退齣前執行清理操作。 數組在 Shell 腳本中提供瞭存儲和操作多個數據項的能力。我們將詳細介紹數組的聲明、訪問、以及常用的數組操作,例如數組元素的添加、刪除和遍曆。 我們將介紹如何使用 `read` 命令從用戶輸入或文件中讀取數據,以及如何將這些數據用於腳本的邏輯判斷和處理。 函數庫的創建和使用也是本部分的重要內容。學習如何將常用的函數封裝成庫,然後在不同的腳本中引用和調用,可以極大地提高開發效率。 此外,我們還將介紹一些實用的 Shell 腳本編寫技巧,例如如何調試 Shell 腳本、如何提高腳本的性能、以及如何編寫可移植的 Shell 腳本。 第四部分:Shell 腳本在實際應用中的案例分析 理論結閤實踐是掌握任何技能的關鍵。本部分將通過一係列精心設計的實際應用案例,幫助讀者鞏固所學知識,並將 Shell 腳本的威力應用到實際工作中。 我們將從文件備份和歸檔的腳本開始,展示如何利用 `tar`、`gzip` 等命令結閤 Shell 腳本實現自動化備份。 接著,我們將學習如何編寫係統監控腳本,例如監控 CPU 使用率、內存占用、磁盤空間等,並實現異常情況的報警。 網絡管理也是 Shell 腳本的常用領域,我們將展示如何編寫腳本來自動化配置網絡接口、檢查網絡連通性、以及進行端口掃描。 日誌分析是係統管理中的重要環節,我們將學習如何利用 `grep`、`awk`、`sed` 等命令編寫腳本來提取和分析日誌文件中的關鍵信息。 此外,我們還將探討如何利用 Shell 腳本與 `cron` 任務調度器結閤,實現定時執行任務,以及如何編寫腳本來管理用戶和權限。 第五部分:Shell 編程的未來與擴展 在掌握瞭 Shell 編程的基礎和進階技能後,本部分將展望 Shell 編程的未來發展方嚮,並為讀者提供進一步學習的建議。 我們將簡要介紹一些更高級的 Shell 功能,例如 Shell 的一些內建命令和特殊的 Shell 變量。 我們將探討 Shell 腳本與其它編程語言(如 Python、Perl)的集成,以及如何利用它們各自的優勢來構建更復雜的係統。 最後,我們將提供一些學習資源和社區支持的建議,幫助讀者在 Shell 編程的道路上不斷成長,充分發揮 Linux Shell 編程的強大力量。 本書的編寫力求通俗易懂,輔以大量生動形象的示例,旨在讓每一位讀者都能在掌握 Shell 編程的精髓後,自信地應對各種技術挑戰,提升工作效率,並更深入地理解 Linux 操作係統的強大之處。無論您是初次接觸 Linux 的新手,還是希望提升自身技術水平的 IT 專業人士,本書都將是您不可或缺的學習夥伴。