什麼是shell?
簡單來說,shell是一個執行命令的宏處理(macro processor)器。
術語宏處理器(macro processor)是指將文本和符號擴展到創建更大的表達式的功能。
在linux系統中shell介於Linux內核與終端用戶之間,讓用戶通過可以shell來操作內核。
Shell是系統的用戶界面,提供了用戶與內核進行交互操作的一種接口。它接收用戶輸入的命令並把它送入內核去執行。
Unix shell可以作爲解釋器(interpreter)和編程語言使用。
當作爲命令解釋器使用時。shell爲用戶接口提供了豐富的GNU命令集,如 cd dir ls find ...等實用的命令。
當作爲編程語言時。shell特性允許將多個命令組合在一起,可以創建包含命令的文件,併成爲命令本身。
這些新命令在諸如“/bin”的目錄中具有與系統命令相同的狀態,允許用戶或組建立自定義環境來自動化它們的常見任務。
Shell可以在交互式模式或非交互式模式下使用。
- 交互式: 執行命令從鍵盤鍵入
- 非交互試:執行從文件讀取到命令
shell允許以同步和異步方式執行GNU命令。在接受更多輸入之前,shell將等待同步命令完成;異步命令在讀取和執行其他命令時,繼續與shell並行執行。“重定向”構造允許對這些命令的輸入和輸出進行細粒度控制。此外,shell允許對命令環境的內容進行控制。
shell還提供了一組內置命令(“builtins”),實現功能不可能或不方便通過單獨的實用程序獲得。例如,“cd”、“break”、“continue”和“exec”都不能在shell之外實現,因爲它們直接操縱shell本身。“history”、“getopts”、“kill”或“pwd”的內置程序可以在不同的實用程序中實現,但它們更便於作爲構建命令使用。後面的部分將描述所有的shell構建。
與其他編程語言相同,shell也提供了變量,流程控制,引用,函數。
shell中的常見名詞
定義 | 解釋 |
---|---|
POSIX | 一個基於Unix的開放系統標準系列。Bash主要關注POSIX 1003.1標準的外殼和實用程序部分。 |
blank | 一個空格或者製表符 |
builtin | 由shell本身在內部實現的命令,而不是文件系統中的某個可執行程序。 |
control operator | 流程控制語句,執行控制功能的“令牌”。 |
exit status | 命令返回給它的調用者的值。該值限制爲8位,因此最大值爲255。 |
field | 一個文本單元,它是一個shell擴展的結果。擴展後,當執行一個命令時,結果字段被用作命令名和參數。 |
filename | 用於標識文件的字符串 |
job | 由管道組成的一組過程,以及由它派生的任何進程,它們都在同一個進程組中。 |
job control | 用戶可以有選擇地停止(暫停)並重啓(恢復)進程的機制。 |
metacharacter | 當未被引用時,一個字符將單詞分開。元字符是一個“空白”或下列字符之一。'\', '&', ';','(', ')', '<', or '>'. |
name | 由字母、數字和下劃線組成的“單詞”,以字母或下劃線開頭。名稱被用作shell變量和函數名。也稱爲“標識符”。 |
operator | “控制操作符”或“重定向操作符”。對於重定向操作符的列表。運算符包含至少一個未被引用的“元字符”。 |
process group | 每個具有相同進程組ID的相關進程的集合。 |
process group ID | 在其生命週期中表示“進程組”的唯一標識符。 |
reserved word | 一個對shell有特殊意義的詞。大多數保留字引入了shell流控制結構,例如“for”和“while”。 |
return status | “退出狀態”的同義詞。 |
signal | 一種機制,通過該機制可以通過系統中發生的事件的內核來通知進程。 |
special builtin | 一個被POSIX標準分類爲特殊的shell內置命令。 |
token | 由shell層考慮單個單元的一系列字符。它要麼是一個“單詞”,要麼是一個“運算符”。 |
word | 由shell作爲單元處理的一系列字符。詞彙可能不包括未引用的“元字符”。 |