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 就是一種腳本語言,我們編寫完源碼后不用編譯,直接運行源碼即可。
拓展:對Shell的一些認知
- Shell腳本是給自己或者團隊內部用的,主要是實現功能,效率可以次之(甚至不考慮)。
- Shell腳本思路越簡單,腳本就有可能很長、很難看。
- Shell語言不是很難,但是要求對Linux系統的熟悉程度比較高。