當前位置:成語大全網 - 書法字典 - LINUX快速入門第8章:Shell基礎知識

LINUX快速入門第8章:Shell基礎知識

我們通常所說的Shell可以理解為Linux系統提供的用戶界面。Shell為用戶提供了壹個輸入命令和參數並獲得命令執行結果的環境。當用戶登錄到Linux時,系統初始化程序init根據/etc/passwd文件中的設置為每個用戶運行壹個名為Shell的程序。

具體來說,Shell是壹個命令行解釋器,它為用戶提供了壹個接口系統級程序,該程序向Linux內核發送請求以運行程序。用戶可以使用Shell來啟動、暫停、停止甚至編寫壹些程序。

Shell位於內核和外部應用程序之間,起到協調用戶和系統之間的壹致性以及用戶和系統之間交互的作用。圖1是Linux系統的層次結構圖。Shell接收用戶輸入的命令,將命令從類似於abed的ASCII代碼解釋為類似於0101的機器語言,然後提交給系統內核進行處理。內核被處理後,處理結果通過外殼返回給用戶。

換句話說:

Shell是用C語言編寫的程序,是用戶使用Linux的橋梁。Shell既是壹種命令語言,也是壹種編程語言。

外殼是指提供接口的應用程序,用戶可以通過該接口訪問操作系統內核的服務。

Ken Thompson的sh是第壹個Unix Shell,Windows資源管理器是典型的圖形界面Shell。

與其他Linux命令壹樣,Shell也是壹個實用程序,但它們之間仍然存在差異。壹旦用戶在系統中註冊,Shell就會被系統加載到內存中並運行,直到用戶退出系統。通用命令由系統加載到內存中,只有在被調用時才執行。

與通用命令相比,Shell不僅是命令行解釋器,而且是壹種功能強大的編程語言,易於編寫、調試並具有很強的靈活性。作為命令級語言,Shell是解釋性的,具有很強的組合功能,與操作系統密切相關,系統命令可以直接在Shell腳本中使用。Linux系統的大多數啟動相關文件(通常在/etc/rc.d目錄中)都是使用Shell腳本編寫的。

與傳統編程語言壹樣,Shell提供了許多功能,這些功能可以使Shell腳本更有用,例如數據變量、參數傳遞、判斷、過程控制、數據輸入和輸出、子程序和中斷處理。

話雖如此,我們在Linux中操作的命令行界面實際上是Linux的外殼,也就是Bash,但我們的圖形界面是外殼嗎?事實上,從廣義上講,圖形界面當然是壹個外殼,因為它還用於接收用戶操作並將其傳遞給內核進行處理。但是,這裏的Shell主要指Bash。

命令過程

Shell腳本是為shell編寫的腳本程序。

業內的Shell通常是指shell腳本,但讀者應該知道shell和shell腳本是兩個不同的概念。

由於習慣,為了簡潔起見,本文中的“shell編程”指的是shell腳本編程,而不是開發shell本身。

貝殼的分類

目前,Shell有很多版本,如Bourne Shell、C Shell、Bash、ksh、tcsh等。它們各有特點,下面簡單介紹壹下。

最重要的貝殼是伯恩貝殼,它是為了紀念這種貝殼的發明者史蒂文·伯恩而命名的。UNIX從1979開始使用Boume Shell。Bourne Shell的主文件名是sh,因此開發人員使用sh作為Bourne Shell的主標識名。

盡管Linux和UNIX壹樣可以支持多種Shell,但Boume Shell的重要地位至今沒有改變,sh仍然被用作許多UNIX系統中的重要管理工具。它的工作幾乎涵蓋了從啟動到關閉的所有內容。在Linux中,用戶Shell主要是Bash,但Bourne Shell仍然用於啟動腳本和編輯等許多工作。

C Shell是壹種廣泛流行的Shell變體。C Shell主要用於BSD UNIX系統,發明者是伯克利大學的Bill Joy。C Shell之所以得名,是因為它的語法與C語言相似,這也方便了UNIX系統工程師學習C Shell。

伯恩Shell和C Shell形成了Shell的兩個主流流派,後來的變體大多吸收了這兩種Shell的特點,如科恩、tcsh和巴什。

Bash Shell是GNU計劃的重要工具之壹,也是GNU系統中的標準Shell。Bash與sh兼容,因此早期開發的許多Bourne Shell程序可以繼續在Bash中運行。現在使用的Linux使用Bash作為用戶的基本外殼。

Bash發布於1988,Bash 2.0發布於1995-1996。在此之前,廣泛使用的版本是1.14,Bash 2.0增加了許多新功能,兼容性更好。表2列出了每個版本的詳細信息。

請註意,Shell的兩種主要語法類型是Bourne和C,它們互不兼容。Boume家族主要包括sh、ksh、Bash、psh和zsh;C家族主要包括csh和tcsh(Bash和zsh支持不同程序中csh的語法)。

本章描述的腳本編程是在Bash環境中進行的。然而,除了Bash之外,Linux還支持許多其他Shell。我們可以通過/etc/shell文件查詢Linux支持的shell。該命令如下所示:

在Linux中,這些Shell可以隨意切換,命令如下:

用戶信息文件/etc/passwd的最後壹列是該用戶的登錄Shell。該命令如下所示:

可以看到,root用戶和其他可以登錄系統的普通用戶的登錄Shell是/bin/bash,這是Linux的標準Shell,因此這些用戶登錄後可以執行權限內的所有命令。但是,所有系統用戶(偽用戶)都無法登錄系統,因為登錄Shell是/sbin/ndogin。

註意事項:

sh/bash/csh/Tcsh/ksh/pdksh與其他shell的區別。