Linux下的Shell簡介

52code發表於2008-05-04

目前,大多數的公司會將Progress資料庫安裝在Linux/Unix平臺上,以期獲得更好的效能。Shell是Linux平臺上重要的組成部分,對於progress和mfgpro系統都有很大的影響。

下面簡單介紹一下Linux裡面的Shell。

shell是使用者和Linux作業系統之間的介面。Linux中有多種shell,其中預設使用的是Bash。Linux系統的shell作為作業系統的外殼,為使用者提供使用作業系統的介面。它是命令語言、命令解釋程式及程式設計語言的統稱。

[@more@]

shell是使用者和Linux核心之間的介面程式,如果把Linux核心想象成一個球體的中心,shell就是圍繞核心的外層。當從shell或其他程式向Linux傳遞命令時,核心會做出相應的反應。

shell是一個命令語言直譯器,它擁有自己內建的shell命令集,shell也能被系統中其他應用程式所呼叫。使用者在提示符下輸入的命令都由shell先解釋然後傳給Linux核心。

有一些命令,比如改變工作目錄命令cd,是包含在shell內部的。還有一些命令,例如複製命令cp和移動命令rm,是存在於檔案系統中某個目錄下的單獨的程式。對使用者而言,不必關心一個命令是建立在shell內部還是一個單獨的程式。

shell首先檢查命令是否是內部命令,若不是再檢查是否是一個應用程式(這裡的應用程式可以是Linux本身的實用程式,如ls和rm,也可以是購買的商業程式,如xv,或者是自由軟體,如emacs)。然後shell在搜尋路徑裡尋找這些應用程式(搜尋路徑就是一個能找到可執行程式的目錄列表)。如果鍵入的命令不是一個內部命令並且在路徑裡沒有找到這個可執行檔案,將會顯示一條錯誤資訊。如果能夠成功找到命令,該內部命令或應用程式將被分解為系統呼叫並傳給Linux核心。
 
shell的另一個重要特性是它自身就是一個解釋型的程式設計語言,shell程式設計語言支援絕大多數在高階語言中能見到的程式元素,如函式、變數、陣列和程式控制結構。shell程式語言簡單易學,任何在提示符中能鍵入的命令都能放到一個可執行的shell程式中。

當普通使用者成功登入,系統將執行一個稱為shell的程式。正是shell程式提供了命令列提示符。作為預設值(TurboLinux系統預設的shell是BASH),對普通使用者用“$”作提示符,對超級使用者(root)用“#”作提示符。

一旦出現了shell提示符,就可以鍵入命令名稱及命令所需要的引數。shell將執行這些命令。如果一條命令花費了很長的時間來執行,或者在螢幕上產生了大量的輸出,可以從鍵盤上按ctrl+c發出中斷訊號來中斷它(在正常結束之前,中止它的執行)。

當使用者準備結束登入對話程式時,可以鍵入logout命令、exit命令或檔案結束符(EOF)(按ctrl+d實現),結束登入。

shell的種類

Linux中的shell有多種型別,其中最常用的幾種是Bourne shell(sh)、C shell(csh)和Korn shell(ksh)。三種shell各有優缺點。Bourne shell是UNIX最初使用的shell,並且在每種UNIX上都可以使用。Bourne shell在shell程式設計方面相當優秀,但在處理與使用者的互動方面做得不如其他幾種shell。Linux作業系統預設的shell是Bourne Again shell,它是Bourne shell的擴充套件,簡稱Bash,與Bourne shell完全向後相容,並且在Bourne shell的基礎上增加、增強了很多特性。Bash放在/bin/bash中,它有許多特色,可以提供如命令補全、命令編輯和命令歷史表等功能,它還包含了很多C shell和Korn shell中的優點,有靈活和強大的程式設計介面,同時又有很友好的使用者介面。

Bash命令列具有命令和檔名擴充套件特性。當輸入一個還沒完成的命令或檔名時,只需鍵入Tab鍵就能啟用命令和檔名擴充套件特性,從而完成該命令的剩餘輸入。如果有多個命令或檔案的字首相同,Bash將響鈴並等待使用者輸入足夠的字元,以便選擇唯一的命令或檔名,如果找到,系統將自動補齊搜尋到的命令或檔名,使用者按Enter鍵後,系統將執行這條指令。

C shell是一種比Bourne shell更適於程式設計的shell,它的語法與C語言很相似。 Linux為喜歡使用C shell的人提供了Tcsh。Tcsh是C shell的一個擴充套件版本。Tcsh包括命令列編輯、可程式設計單詞補全、拼寫校正、歷史命令替換、作業控制和類似C語言的語法,它不僅和Bash shell是提示符相容,而且還提供比Bash shell更多的提示符引數。

Korn shell集合了C shell和Bourne shell的優點並且和Bourne shell完全相容。Linux系統提供了pdksh(ksh的擴充套件),它支援任務控制,可以在命令列上掛起、後臺執行、喚醒或終止程式。

使用者登入到Linux系統後,系統將啟動一個使用者shell。在這個shell中,可以使用shell命令或宣告變數,也可以建立並執行shell 指令碼程式。執行shell指令碼程式時,系統將建立一個子shell。此時,系統中將有兩個shell,一個是登入時系統啟動的shell,另一個是系統為執行指令碼程式建立的shell。當一個指令碼程式執行完畢,它的指令碼shell將終止,可以返回到執行該指令碼之前的shell。從這種意義上來說,使用者可以有許多 shell,每個shell都是由某個shell(稱為父shell)派生的。

在子shell中定義的變數只在該子shell內有效。如果在一個shell指令碼程式中定義了一個變數,當該指令碼程式執行時,這個定義的變數只是該指令碼程式內的一個區域性變數,其他的shell不能引用它,要使某個變數的值可以在其他shell中被改變,可以使用export命令對已定義的變數進行輸出。 export命令將使系統在建立每一個新的shell時定義這個變數的一個複製。這個過程稱之為變數輸出。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/182208/viewspace-1003322/,如需轉載,請註明出處,否則將追究法律責任。

相關文章