在文本環(huán)境下,shell作為命令解釋器,建立了用戶和操作系統(tǒng)之間的接口。當(dāng)用戶鍵入一個(gè)命令后,shell將對(duì)該命令進(jìn)行解釋,并調(diào)用相應(yīng)的程序。Linux中有許多shell,其中最常用的為如下3個(gè)。
bash(Bourne Again Shell)--Bourne Shell(最初UNIX shell之一)的增強(qiáng)版本。
tcsh(TC Shell)--作為BSD UNIX系統(tǒng)一部分開(kāi)發(fā)的C Shell的增強(qiáng)版本。
zsh(Z Shell)--該shell結(jié)合了來(lái)自許多shell(包括Korn Shell)的特性。
由于用戶常常喜歡選用各種不同的shell,因此多用戶操作系統(tǒng)在任何時(shí)候都有多個(gè)不同的shell在使用。多種shell充分體現(xiàn)了Linux操作系統(tǒng)的一項(xiàng)重要功能--為每個(gè)用戶提供一個(gè)定制界面。
shell腳本shell除了具有解釋鍵盤(pán)命令并將其發(fā)送到操作系統(tǒng)的功能外,它還是一種高級(jí)編程語(yǔ)言。shell命令可安排在一個(gè)文件中供以后執(zhí)行,這些文件在Linux系統(tǒng)中稱為shell腳本,在DOS和Windows稱為批處理文件。這種靈活性使用戶利用相對(duì)短而簡(jiǎn)單的命令就可進(jìn)行復(fù)雜操作,并且使用戶輕而易舉就可創(chuàng)建執(zhí)行復(fù)雜操作的精巧程序。
1. 文件名的生成
通配符和模糊文件引用在鍵入讓shell處理的命令時(shí),可使用對(duì)shell具有特殊意義的字符來(lái)構(gòu)造模式。這些特殊意義的字符稱為通配符(wildcard)。模式為用戶提供了一種簡(jiǎn)便方式,使得用戶不必鍵入完整的文件名,而只鍵入模式,然后由shell將模式展開(kāi)為匹配的文件名。這些模式稱為模糊文件引用(ambiguousfilereference),該引用可節(jié)省因輸入長(zhǎng)文件名或者一長(zhǎng)串相近的文件名而花費(fèi)的精力。比如,shell可以將模式mak*展開(kāi)為make-3.80.tar.gz。對(duì)于只知道文件名字的一部分或不記得文件名精確拼寫(xiě)的情況,模式便非常有用。
2. 設(shè)備無(wú)關(guān)的輸入/輸出
重定向設(shè)備(如打印機(jī)、終端)和磁盤(pán)文件在Linux程序中都以文件的形式呈現(xiàn)。當(dāng)向Linux操作系統(tǒng)發(fā)出命令時(shí),可指示操作系統(tǒng)將輸出送到任何一個(gè)設(shè)備或文件,這稱為輸出重定向(redirection)。
設(shè)備無(wú)關(guān)性類似地,通常來(lái)自鍵盤(pán)的程序輸入可重定向?yàn)閬?lái)自某個(gè)磁盤(pán)文件。輸入和輸出都是與設(shè)備無(wú)關(guān)的,輸出可被重定向到任何合適的設(shè)備,來(lái)自任何設(shè)備的輸入也可被重定向。
例如,cat實(shí)用工具通常在屏幕上顯示文件內(nèi)容。在運(yùn)行cat命令的時(shí)候,可以很容易地將其輸出重定向到某個(gè)磁盤(pán)文件而不是屏幕上。
3. shell函數(shù)
shell一個(gè)非常重要的特性是它可作為一種編程語(yǔ)言來(lái)使用。因?yàn)閟hell是一個(gè)解釋器,所以它不能對(duì)為它編寫(xiě)的程序進(jìn)行編譯,而是在每次從磁盤(pán)加載這些程序時(shí)對(duì)它們進(jìn)行解釋。而程序的加載和解釋都是非常耗時(shí)的。
針對(duì)此問(wèn)題,許多shell(如BourneAgainShell)都包含shell函數(shù),shell把這些函數(shù)放在內(nèi)存中,這樣每次需要執(zhí)行它們時(shí)就不必再?gòu)拇疟P(pán)讀入。shell還以一種內(nèi)部格式來(lái)存放這些函數(shù),這樣就不必耗費(fèi)大量的時(shí)間來(lái)解釋它們。
4. 作業(yè)控制
作業(yè)控制(jobcontrol)是shell的另一個(gè)特性,它允許用戶同時(shí)運(yùn)行多個(gè)作業(yè),并且根據(jù)需求可將前后臺(tái)的作業(yè)進(jìn)行切換。當(dāng)啟動(dòng)某個(gè)作業(yè)時(shí),它通常是運(yùn)行在前臺(tái),因此該作業(yè)是與終端相連接的。利用作業(yè)控制這一功能,可將正處于前臺(tái)工作的作業(yè)切換到后臺(tái)去,在后臺(tái)該作業(yè)可繼續(xù)運(yùn)行,并且在前臺(tái)可以監(jiān)視另一個(gè)作業(yè)。如果想關(guān)注一下某個(gè)正在后臺(tái)運(yùn)行的作業(yè),那么可將其切換到前臺(tái)工作,以使其又一次與終端相連接。作業(yè)控制的這一概念起源于BSDUNIX,后來(lái)又出現(xiàn)在CShell中。
聯(lián)系客服