什麼是Shell,Shell教程

現在我們使用的操作系統(Windows、Mac OS、Android、iOS 等)都是帶圖形界面的,簡單直觀,容易上手,對專業用戶(程序員、網管等)和普通用戶(家庭主婦、老年人等)都非常適用;計算機的普及離不開圖形界面。

然而在計算機的早期並沒有圖形界面,我們只能通過一個一個地命令來控制計算機,這些命令有成百上千之多,且不說記住這些命令非常困難,每天面對沒有任何色彩的“黑屏”本身就是一件枯燥的事情;這個時候的計算機還遠遠談不上炫酷和普及,只有專業人員才能使用。

這裏寫圖片描述

如上圖:早起的電腦,都是「黑紙白字」

猛擊 《帶你逛西雅圖活電腦博物館》 可以欣賞更多早期的計算機。

對於圖形界面,用戶點擊某個圖標就能啓動某個程序;對於命令行,用戶輸入某個程序的名字(可以看做一個命令)就能啓動某個程序。這兩者的基本過程都是類似的,都需要查找程序在硬盤上的安裝位置,然後將它們加載到內存運行。

關於程序的運行原理,請猛擊《載入內存,讓程序運行起來》

換句話說,圖形界面和命令行要達到的目的是一樣的,都是讓用戶控制計算機。

然而,真正能夠控制計算機硬件(CPU、內存、顯示器等)的只有操作系統內核(Kernel),圖形界面和命令行只是架設在用戶和內核之間的一座橋樑。

由於安全、複雜、繁瑣等原因,用戶不能直接接觸內核(也沒有必要),需要另外再開發一個程序,讓用戶直接使用這個程序;該程序的作用就是接收用戶的操作(點擊圖標、輸入命令),並進行簡單的處理,然後再傳遞給內核。如此一來,用戶和內核之間就多了一層“代理”,這層“代理”既簡化了用戶的操作,也保護了內核。

用戶界面和命令行就是這個另外開發的程序,就是這層“代理”。在Linux下,這個命令行程序叫做 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 主要用來開發一些實用的、自動化的小工具,而不是用來開發具有複雜業務邏輯的中大型軟件,例如檢測計算機的硬件參數、一鍵搭建Web開發環境、日誌分析等,Shell 都非常合適。

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

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

Shell 是一種腳本語言

任何代碼最終都要被“翻譯”成二進制的形式才能在計算機中執行。

有的編程語言,如 C/C++、Pascal、Go語言、彙編等,必須在程序運行之前將所有代碼都翻譯成二進制形式,也就是生成可執行文件,用戶拿到的是最終生成的可執行文件,看不到源碼。

這個過程叫做編譯(Compile),這樣的編程語言叫做編譯型語言,完成編譯過程的軟件叫做編譯器(Compiler)。

而有的編程語言,如 Shell、JavaScript、Python、PHP等,需要一邊執行一邊翻譯,不會生成任何可執行文件,用戶必須拿到源碼才能運行程序。程序運行後會即時翻譯,翻譯完一部分執行一部分,不用等到所有代碼都翻譯完。

這個過程叫做解釋,這樣的編程語言叫做解釋型語言或者腳本語言(Script),完成解釋過程的軟件叫做解釋器。

編譯型語言的優點是執行速度快、對硬件要求低、保密性好,適合開發操作系統、大型應用程序、數據庫等。

腳本語言的優點是使用靈活、部署容易、跨平臺性好,非常適合Web開發以及小工具的製作。

Shell 就是一種腳本語言,我們編寫完源碼後不用編譯,直接運行源碼即可。


文章來源:http://c.biancheng.net/cpp/view/6994.html

Shell 的學習: http://c.biancheng.net/cpp/view/3403.html

發佈了147 篇原創文章 · 獲贊 241 · 訪問量 83萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章