Linux教程-TurboLinux Shell

  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及其相關知識。