1、Shell的由來
我們比較熟悉Windows系統的圖形化界面,對于圖形界面來說,使用者點選某個圖示就能啟動某個程式。
在此之前我們一直在使用Linux系統的指令行模式學習,對于指令行來說,使用者輸入一個指令就能啟動某個程式。
這兩者的基本過程都是類似的,都需要查找程式在硬碟上的安裝位置,然後将它們加載到記憶體運作。
然而,真正能夠控制計算機硬體(CPU、記憶體、顯示器等)的隻有作業系統核心(Kernel),圖形界面和指令行隻是架設在使用者和核心之間的一座橋梁。
由于安全、複雜、繁瑣等原因,使用者不能直接接觸核心(也沒有必要),是以就需要另外再開發一個程式,使該程式的作用就是接收使用者的操作(點選圖示、輸入指令),并進行簡單的處理,然後再傳遞給核心。同時核心執行完成的結果,也經過該程式的處理,傳回給使用者。
如此一來,使用者和核心之間就多了一層“代理”,這層“代理”既簡化了使用者的操作,也保護了核心。
使用者界面和指令行就是我們所說的這個另外開發的程式,就是這層“代理”,在Linux下的這個指令行程式就叫做Shell。
Shell所處的位置如下圖所示:
總結:
Shell的英文含義是“殼”。
Shell是一個指令解釋器,它在作業系統的最外層,負責直接與使用者對話,把使用者的輸入解釋給作業系統,并處理各種各樣的作業系統的輸出結果,傳回給使用者。換句話說,Shell是為使用者與機器之間搭建成的一個橋梁,讓我們能夠通過Shell來對計算機進行操作和互動,進而達到讓計算機為我們服務的目的。
Shell獨立于核心,核心是Linux系統的心髒,從開機自檢就駐紮在計算機記憶體中,直到計算機關閉為止。使用者的應用程式存儲在計算機硬碟上,僅當需要時才被調入記憶體。
Shell是一種應用程式,當使用者登陸Linux系統時,Shell就會被調用到記憶體執行。
2、Shell的兩種執行指令方式
(1)第一種方式:互動式(Interactive)
是使用者直接在Shell界面(終端界面)上執行Shell指令,由于Shell界面的關系,大家都習慣一行行的書寫,很少寫出成套的程式來一起執行,是以也稱指令行。(換句話說我們操作的終端就是一個Shell)
(2)第二種方式:批處理(Batch)
是使用者事先編寫一個Shell腳本檔案,内含Shell腳本,而後使用Shell程式執行該腳本,這種方式我們習慣稱為Shell程式設計。(簡單的了解腳本就是一堆指令的集合。)
3、什麼是Shell腳本
Shell腳本就是把指令、變量和流程控制語句等有機的結合起來。
Shell腳本擅長處理純文字類型的資料,而Linux系統中,幾乎所有的配置檔案,日志檔案,都是純文字類型檔案。
4、Shell 是一種腳本語言
任何代碼最終都要被“翻譯”成二進制的形式才能在計算機中執行。
有的程式設計語言,如Java、Go語言等,必須在程式運作之前将所有代碼都翻譯成二進制形式,也就是生成可執行檔案,使用者拿到的是最終生成的可執行檔案,是看不到源碼的。這個過程叫做編譯(Compile),這樣的程式設計語言叫做編譯型語言,完成編譯過程的軟體叫做編譯器(Compiler)。
而有的程式設計語言,如Shell、JavaScript、Python等,需要一邊執行一邊翻譯,不會生成任何可執行檔案,使用者必須拿到源碼才能運作程式。程式運作後會即時翻譯,翻譯完一部分執行一部分,不用等到所有代碼都翻譯完。這個過程叫做解釋,這樣的程式設計語言叫做解釋型語言或者腳本語言(Script),完成解釋過程的軟體叫做解釋器。
編譯型語言的優點是執行速度快、對硬體要求低、保密性好,适合開發作業系統、大型應用程式、資料庫等。
腳本語言的優點是使用靈活、部署容易、跨平台性好,非常适合Web開發以及小工具的制作。
Shell 就是一種腳本語言,我們編寫完源碼後不用編譯,直接運作源碼即可。
本文位址:https://www.linuxprobe.com/shell-of-introduction.html