Mendel Cooper:advanced Bash Scripting Guide——an In Depth Exploration Of The Art Of Shell Scripting@2012 (文档版本 6.6)
這份資料提供了一份深入探索 Bash 指令稿編寫藝術的指南《Advanced Bash-Scripting Guide》的引言、目錄及前兩個章節內容。其主要論點和核心概念可以歸納如下:
-
文件的宗旨與目標受眾: 本指南旨在對 Shell 指令稿編寫藝術進行深入探索。它假定讀者沒有指令稿編寫或程式設計的先備知識,但進程迅速,旨在將讀者提升到中級/進階的程度。指南穿插介紹 UNIX 的智慧與知識,並強調透過大量註解的範例和練習,鼓勵讀者積極參與,因為學習指令稿編寫的最佳方式是親自動手寫指令稿。它可作為教科書、自學手冊,以及 Shell 指令稿編寫技巧的參考資料和知識來源。
-
Shell 指令稿的重要性: 指南強調,即使不打算編寫指令稿,掌握 Shell 指令稿的實用知識對於任何想在系統管理方面達到相當熟練程度的人來說至關重要。例如,Linux 系統啟動時會執行
/etc/rc.d中的 Shell 指令稿來恢復系統配置和設定服務,深入理解這些啟動指令稿對於分析系統行為和進行修改至關重要。 -
Shell 指令稿的學習曲線與特性: 指南認為,掌握指令稿編寫的技巧並不困難。指令稿可以分塊構建,且需要學習的 Shell 特定操作符和選項相對較少。語法簡單、樸實,類似於在命令列執行和串接工具的方式,規則也不多。大多數簡短的指令稿都能一次成功,即使較長的指令稿偵錯也相對直接。
-
Shell 指令稿的用途與限制:
- 優點: Shell 指令稿是快速原型化複雜應用程式的一種方式。在指令稿中實現部分功能通常是專案開發的第一階段,可以測試和調整應用程式結構,並在轉換到 C、C++、Java、Perl 或 Python 等最終程式碼之前發現主要陷阱。它遵循經典的 UNIX 哲學,將複雜專案分解為更簡單的子任務,並將組件和工具串接起來。
- 限制與不適用場景: 指南明確列出了不適合使用 Shell 指令稿的場景,包括:資源密集型任務(如排序、雜湊、遞歸,尤其對速度有要求時)、涉及大量數學運算(浮點數、任意精度、複數)的程序、需要跨平台移植的應用程式、複雜應用程式需要嚴格的結構化程式設計(變數類型檢查、函數原型等)、任務關鍵型應用程式、安全性至關重要的場景、涉及組件間相互依賴的專案、需要大量檔案操作(Bash 的檔案存取受限且效率不高)、需要原生支援多維陣列或資料結構(如鏈結串列、樹)、需要生成/操縱圖形或 GUI、需要直接存取系統硬體或外部週邊、需要埠或 Socket I/O、需要使用函式庫或與舊程式碼介面、以及專有的閉源應用程式(指令稿會暴露原始碼)。對於這些情況,建議考慮更強大的指令稿語言(如 Perl, Tcl, Python, Ruby)或編譯語言(如 C, C++, Java),儘管如此,使用 Shell 指令稿進行原型設計仍可能是一個有用的開發步驟。
-
Bash Shell 的地位與可攜性考量: 本指南主要使用 Bash (Bourne-Again shell),它已成為大多數 UNIX 版本上 Shell 指令稿的事實標準。指南也指出,書中的許多原則同樣適用於 Korn Shell 或 C Shell 等其他 Shell。但特別提到 C Shell 因固有問題不建議用於程式設計。使用
#!/bin/sh(大多數商業 UNIX 版本的預設 Bourne Shell)可以提高指令稿的可攜性到非 Linux 機器,儘管這會犧牲 Bash 特定的功能,但指令稿將符合 POSIX sh 標準。 -
指令稿的基礎結構與執行:
-
Sha-Bang (
#!) 行: 這是指令稿開頭的特殊行,告訴系統應該使用哪個命令解釋器來執行該文件。#!實際上是一個兩位元組的神奇數字,用於標識可執行的 Shell 指令稿。緊隨其後的是解釋器的路徑(例如/bin/bash),該路徑必須正確,否則指令稿將無法執行並報告「Command not found」。 -
可攜性標頭:
#!/bin/sh可以使指令稿更具可攜性,但會限制使用 Bash 特有的語法和功能。 -
執行指令稿: 寫好指令稿後,可以使用解釋器直接執行(如
sh scriptname或bash scriptname),但更方便的方式是賦予指令稿執行權限(如chmod +rx scriptname或chmod 755 scriptname),然後直接執行(如./scriptname)。為了系統範圍使用,通常會將指令稿移動到/usr/local/bin。
-
Sha-Bang (
-
初步的指令稿範例: 指南從最簡單的指令稿範例(僅包含命令列表)開始,逐步展示如何加入變數、註解、
#!行以及基本的條件測試(雖然詳細介紹在後續章節),說明指令稿如何從簡單的自動化命令序列演變為更具程式設計特性的工具。第二章的清理指令稿範例就展示了這種逐步增強的過程。
總而言之,這份資料的核心論點是 Shell 指令稿是 UNIX/Linux 系統管理員和開發者的一項重要技能,雖然有其限制,但在許多領域都非常實用。指南採取實踐教學的方法,透過逐步深入的範例和解釋,引導讀者掌握 Bash 指令稿的基礎和進階技巧,並特別強調了 #! 行的意義、指令稿的執行方式以及可攜性方面的考量。
comments
comments for this post are closed