天天看點

『忘了再學』Shell基礎 — 2、Shell的作用與分類

目錄

1、Shell的作用

2、Shell的分類

Shell除了能解釋使用者輸入的指令,将它傳遞給核心,還可以:

調用其他程式,給其他程式傳遞資料或參數,并擷取程式的處理結果。

在多個程式之間傳遞資料,把一個程式的輸出作為另一個程式的輸入。

Shell本身也可以被其他程式調用。

由此可見,Shell是将核心、程式和使用者連接配接了起來。

Shell本身支援的指令并不多,但是它可以調用其他的程式,每個程式就是一個指令,這使得Shell指令的數量可以無限擴充,其結果就是Shell的功能非常強大,完全能夠勝任 Linux 的日常管理工作,如文本或字元串檢索、檔案的查找或建立、大規模軟體的自動部署、更改系統設定、監控伺服器性能、發送報警郵件、抓取網頁内容、壓縮檔案等。

Shell并不是簡單的堆砌指令,我們還可以在Shell中程式設計,這和使用 C/C++、Java、Python 等常見的程式設計語言并沒有什麼兩樣。

Shell雖然沒有 C/C++、Java、Python 等強大,但也支援了基本的程式設計元素,例如:

<code>if...else</code> 選擇結構,<code>switch...case</code> 開關語句,<code>for、while、until</code>循環。

變量、數組、字元串、注釋、加減乘除、邏輯運算等概念。

函數,包括使用者自定義的函數和内置函數(例如 printf、export、eval 等)。

Shell也是一種程式設計語言,它的編譯器(解釋器)是Shell這個程式。我們平時所說的Shell,有時候是指連接配接使用者和核心的這個程式,有時候又是指Shell程式設計。

Shell主要用來開發一些實用的、自動化的小工具,而不是用來開發具有複雜業務邏輯的中大型軟體,例如檢測計算機的硬體參數、一鍵搭建Web開發環境、日志分析等,Shell都非常合适。

使用Shell的熟練程度反映了使用者對 Linux 的掌握程度,運維工程師、網絡管理者、程式員都應該學習Shell。

尤其是 Linux 運維工程師,Shell更是必不可少的,是必須掌握的技能,它使得我們能夠自動化地管理伺服器叢集,否則你就得一個一個地登入所有的伺服器,對每一台伺服器都進行相同的設定,而這些伺服器可能有成百上千之多,會浪費大量的時間在重複性的工作上。

目前Shell的版本有很多種,如<code>BourneShell</code>、<code>CShell</code>、<code>Bash</code>、<code>ksh</code>、<code>tcsh</code>等,它們各有特點。

如下圖所示:

『忘了再學』Shell基礎 — 2、Shell的作用與分類

下面簡要介紹幾個重點的Shell版本。

最重要的Shell是<code>BourneShell</code>,這個命名是為了紀念此Shell的發明者<code>Steven Bourne</code>。從 1979 年起,UNIX 就開始使用<code>BourneShell</code>。<code>BourneShell</code>的主檔案名為<code>sh</code>,開發人員便以<code>sh</code>作為<code>BourneShell</code>的主要識别名稱。

雖然 Linux 與 UNIX 一樣,可以支援多種Shell,但<code>BourneShell</code>的重要地位至今仍然沒有改變,許多 UNIX 系統中仍然使用<code>sh</code>作為重要的管理工具。它的工作從開機到關機,幾乎無所不包。在Linux中,使用者Shell主要是 Bash,但在啟動腳本、編輯等很多工作中仍然使用<code>BourneShell</code>。

<code>CShell</code>是廣為流行的Shell變種。<code>CShell</code>主要在 BSD 版的 UNIX系統中使用,發明者是柏克萊大學的<code>Bill Joy</code>。<code>CShell</code>因為其文法和C語言類似而得名,這也使得UNIX的系統工程師在學習<code>CShell</code>時感到相當友善。

<code>BashShell</code>也就是Bourne Again (Bash), 是 GNU 計劃的重要工具之一,也是 GNU 系統中标準的Shell。Bash 與 sh 相容,是以許多早期開發出來的 <code>BourneShell</code>程式都可以繼續在 Bash 中運作。現在使用的 Linux 就使用 Bash 作為使用者的基本Shell。

Bash 于 1988 年釋出,并在 1995-1996年推出Bash 2.0。在這之前,廣為使用的版本是1.14,Bash 2.0增加了許多新的功能,以及具備更好的相容性。

總結: Shell的兩種主要文法類型有<code>Bourne</code>和<code>C</code>,這兩種文法彼此不相容。<code>Bourne</code>家族主要包括<code>sh</code>、<code>ksh</code>、<code>Bash</code>、<code>psh</code>、<code>zsh</code>;C家族主要包括:<code>csh</code>、<code>tcsh</code>(<code>Bash</code>和<code>zsh</code>在不同程度上支援<code>csh</code>的文法)。
參考: http://c.biancheng.net/cpp/view/6994.html http://c.biancheng.net/view/932.html