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

繁華似錦Fighting發表於2021-12-18

1、Shell的作用

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

  • 呼叫其他程式,給其他程式傳遞資料或引數,並獲取程式的處理結果。
  • 在多個程式之間傳遞資料,把一個程式的輸出作為另一個程式的輸入。
  • Shell本身也可以被其他程式呼叫。

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

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

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

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

  • if...else 選擇結構,switch...case 開關語句,for、while、until 迴圈。
  • 變數、陣列、字串、註釋、加減乘除、邏輯運算等概念。
  • 函式,包括使用者自定義的函式和內建函式(例如 printf、export、eval 等)。

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

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

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

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

2、Shell的分類

目前Shell的版本有很多種,如BourneShellCShellBashkshtcsh等,它們各有特點。

如下圖所示:

image

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

  • 最重要的Shell是BourneShell,這個命名是為了紀念此Shell的發明者Steven Bourne。從 1979 年起,UNIX 就開始使用BourneShellBourneShell的主檔名為sh,開發人員便以sh作為BourneShell的主要識別名稱。
    雖然 Linux 與 UNIX 一樣,可以支援多種Shell,但BourneShell的重要地位至今仍然沒有改變,許多 UNIX 系統中仍然使用sh作為重要的管理工具。它的工作從開機到關機,幾乎無所不包。在Linux中,使用者Shell主要是 Bash,但在啟動指令碼、編輯等很多工作中仍然使用BourneShell
  • CShell是廣為流行的Shell變種。CShell主要在 BSD 版的 UNIX系統中使用,發明者是柏克萊大學的Bill JoyCShell因為其語法和C語言類似而得名,這也使得UNIX的系統工程師在學習CShell時感到相當方便。
  • BashShell也就是Bourne Again (Bash), 是 GNU 計劃的重要工具之一,也是 GNU 系統中標準的Shell。Bash 與 sh 相容,所以許多早期開發出來的 BourneShell程式都可以繼續在 Bash 中執行。現在使用的 Linux 就使用 Bash 作為使用者的基本Shell
    Bash 於 1988 年釋出,並在 1995-1996年推出Bash 2.0。在這之前,廣為使用的版本是1.14,Bash 2.0增加了許多新的功能,以及具備更好的相容性。

總結:

Shell的兩種主要語法型別有BourneC,這兩種語法彼此不相容。Bourne家族主要包括shkshBashpshzsh;C家族主要包括:cshtcshBashzsh在不同程度上支援csh的語法)。

參考:

相關文章