Linux教程-Turbo Linux Shell(轉)

ba發表於2007-08-11
Linux教程-Turbo Linux Shell(轉)[@more@]  shell是使用者和Linux作業系統之間的介面。Linux中有多種shell,其中預設使用的是Bash。本章講述了shell的工作原理,shell的種類,shell的一般操作及Bash的特性。
  
   什麼是shell
  
  Linux系統的shell作為作業系統的外殼,為使用者提供使用作業系統的介面。它是命令語言、命令解釋程式及程式設計語言的統稱。
  
  shell是使用者和Linux核心之間的介面程式,如果把Linux核心想象成一個球體的中心,shell就是圍繞核心的外層。當從shell或其他程式向Linux傳遞命令時,核心會做出相應的反應。
  
  shell是一個命令語言直譯器,它擁有自己內建的shell命令集,shell也能被系統中其他應用程式所呼叫。使用者在提示符下輸入的命令都由shell先解釋然後傳給Linux核心。
  
  有一些命令,比如改變工作目錄命令cd,是包含在shell內部的。還有一些命令,例如複製命令cp和移動命令rm,是存在於檔案系統中某個目錄下的單獨的程式。對使用者而言,不必關心一個命令是建立在shell內部還是一個單獨的程式。
  
  shell首先檢查命令是否是內部命令,若不是再檢查是否是一個應用程式(這裡的應用程式可以是Linux本身的實用程式,如ls和rm,也可以是購買的商業程式,如xv,或者是自由軟體,如emacs)。然後shell在搜尋路徑裡尋找這些應用程式(搜尋路徑就是一個能找到可執行程式的目錄列表)。如果鍵入的命令不是一個內部命令並且在路徑裡沒有找到這個可執行檔案,將會顯示一條錯誤資訊。如果能夠成功找到命令,該內部命令或應用程式將被分解為系統呼叫並傳給Linux核心。圖10-1展示了shell是如何執行命令的。
  
  使用者命令 
  
  外部命令 
  
  UNIX核心 
  
  圖10-1 shell的工作原理
  
  shell的另一個重要特性是它自身就是一個解釋型的程式設計語言,shell程式設計語言支援絕大多數在高階語言中能見到的程式元素,如函式、變數、陣列和程式控制結構。shell程式語言簡單易學,任何在提示符中能鍵入的命令都能放到一個可執行的shell程式中。
  
  當普通使用者成功登入,系統將執行一個稱為shell的程式。正是shell程式提供了命令列提示符。作為預設值(TurboLinux系統預設的shell是BASH),對普通使用者用“$”作提示符,對超級使用者(root)用“#”作提示符。
  
  一旦出現了shell提示符,就可以鍵入命令名稱及命令所需要的引數。shell將執行這些命令。如果一條命令花費了很長的時間來執行,或者在螢幕上產生了大量的輸出,可以從鍵盤上按ctrl+c發出中斷訊號來中斷它(在正常結束之前,中止它的執行)。
  
  當使用者準備結束登入對話程式時,可以鍵入logout命令、exit命令或檔案結束符(EOF)(按ctrl+d實現),結束登入。
  
  我們來實習一下shell是如何工作的。
  
  $ make work
  
  make:***No rule to make target ‘work’. Stop.
  
  $
  
  註釋:make是系統中一個命令的名字,後面跟著命令引數。在接收到這個命令後,shell便執行它。本例中,由於輸入的命令引數不正確,系統返回資訊後停止該命令的執行。
  
  在例子中,shell會尋找名為make的程式,並以work為引數執行它。make是一個經常被用來編譯大程式的程式,它以引數作為目標來進行編譯。在“make work”中,make編譯的目標是work。因為make找不到以work為名字的目標,它便給出錯誤資訊表示執行失敗,使用者又回到系統提示符下。
  
  另外,使用者鍵入有關命令列後,如果shell找不到以其中的命令名為名字的程式,就會給出錯誤資訊。例如,如果使用者鍵入:
  
  $ myprog
  
  bash:myprog:command not found
  
  $
  
  可以看到,使用者得到了一個沒有找到該命令的錯誤資訊。使用者敲錯命令後,系統一般會給出這樣的錯誤資訊。
  
  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中的優點,有靈活和強大的程式設計介面,同時又有很友好的使用者介面。
  
  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如ash、zsh等。每個shell都有它的用途,有些shell是有專利的,有些能從Internet網上或其他來源獲得。要決定使用哪個shell,只需讀一下各種shell的聯機幫助,並試用一下。
  
  使用者在登入到Linux時由/etc/passwd檔案來決定要使用哪個shell。例如:
  
  # fgrep lisa /etc/passwd
  
  lisa:x:500:500:TurboLinux User:/home/lisa:/bin/bash
  
  shell被列每行的末尾(/bin/bash)。
  
  由於Bash是Linux上預設的shell,本章主要介紹Bash及其相關知識。

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

相關文章