本節書摘來自異步社群《linux c程式設計從入門到精通》一書中的第1章,第1.2節,作者 宋磊 , 程鋼,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
linux c程式設計從入門到精通
shell,俗稱殼(用來差別于核),是指“提供給使用者使用的界面”的軟體(指令解析器),類似于dos下的command.com。它接收使用者指令,然後調用相應的應用程式。同時它又是一種程式設計語言。作為指令語言,它互動式解釋和執行使用者輸入的指令,或者自動地解釋和執行預先設定好的一連串的指令;作為程式設計語言,它定義了各種變量和參數,并提供了許多在進階語言中才具有的控制結構,包括循環和分支。
shell并不是linux獨有的東西,windows下也同樣有。shell也不僅僅是以指令行形式出現的,其實x windows也是shell的一種,不過在本小節中所特指的shell是linux下以指令行形式提供的。
shell基本上是一個指令解釋器,接收使用者指令,然後調用相應的應用程式來執行這些指令。
常見的shell包括ash、bash、ksh、csh和zsh,共5種,簡要介紹如下。
ash:ash是由kenneth almquist編寫的,是linux中占用系統資源最少的一個小shell,它隻包含24個内部指令,因而使用起來很不友善。
bash:bash是linux系統預設使用的shell,它由brian fox和chet ramey共同完成,是bourne again shell的縮寫,一共有40個内部指令。linux之是以使用它作為預設的shell,是因為它有以下的特色:可以使用類似dos中doskey的功能,用上下方向鍵查閱和快速輸入并修改指令;自動通過查找比對的方式,給出以某字元串開頭的指令;包含了自身的幫助功能,隻要在提示符下面鍵入help就可以得到相關的幫助。
ksh:是korn shell的縮寫,由eric gisin編寫,共有42條内部指令。該shell最大的優點是幾乎和商業發行版的ksh完全相容,這樣就可以在不用花錢購買商業版本的情況下嘗試商業版本的性能了。
csh:它是在linux作業系統中應用比較多的shell,由以william joy為代表的共計47位作者編成,共有52個内部指令,該shell其實是指向/bin/tcsh的shell。也就是說,csh其實就是tcsh。
zch:這是linux最大的shell之一,由paul falstad完成,共有84個内部指令。如果隻是一般的用途,是沒有必要安裝這樣的shell。
可以在終端下使用相應的指令來檢視目前linux作業系統中使用的shell,ubuntu中預設使用的shell是bash。
和linux核心類似,shell僅僅提供了一個計算機和使用者進行互動的核心,而其具體的指令行輸入輸出交流要通過終端來完成,在linux作業系統中,使用者也可以自定義終端來完成相應的工作,ubuntu1 2.04發行版自帶的終端是terminal,其運作界面如圖1.5所示。

shell既可以作為指令行提供給使用者控制核心完成相應的任務,也可以作為一種程式設計語言供開發者使用。
1.指令行工作方式
在指令行工作方式下,shell識别并且對使用者輸入的字元串進行響應,以完成相應的工作,這種工作方式通常也被稱為“互動式”的工作方式。當使用者有輸入的時候,shell才對其做出相應的響應。
2.程式設計語言工作方式
shell同樣可以用作程式設計語言,在linux中存在一種特殊的可執行檔案,其内容是一系列由各種指令組成的純文字檔案(腳本檔案),通常用于完成某些步驟比較多的複雜工作,或者是重複性比較強的工作。shell可以對這些檔案進行識别,并且按照設定自動執行相應的動作,這種工作方式通常也被稱為“非互動式”的工作方式,不需要使用者輸入,shell會自動做出相應的動作。
注意:shell還可以用于配置使用者的環境,這通常會在shell的初始化檔案中完成,這些配置包括設定視窗屬性、快捷鍵等。
shell在啟動的時候,先讀取/etc/bash.bashrc檔案對整個linux作業系統進行配置,然後讀取$home/.bashrc檔案對目前使用者進行配置。如果這兩個檔案有沖突,則以後者為準。和shell相關的檔案如下所示。
.bash_profile檔案:該檔案隻能被登入使用者對應的shell所讀取,而作業系統内未登入的shell隻讀取.bashrc檔案。
.bashrc檔案:該檔案被啟動的所有shell所讀取。
.bash_logout檔案:bash退出時執行該檔案。
如果使用者安裝了多個shell,則可以在使用者管理的相關目錄檔案中進行設定。
1.2.2小節中介紹的終端實際上是一個虛拟終端,是在x window中運作的。如果想要進入完整的“真實終端”,可以使用“ctrl+alt+fn”(fn 為f1~f6快捷鍵)。
在啟動ubuntu作業系統的時候,會自動啟動7個終端,其中1~6号終端均是直接運作的一個“真實終端”,而第7号終端會給x window使用,如果想要從1~6号終端切換到x window下,按下快捷鍵“alt + f7”即可。