時(shí)間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)
Shell本身是一個(gè)用C語言編寫的程序,它是用戶使用Linux的橋梁。Shell既是一種命令語言,又是一種程序設(shè)計(jì)語言。作為命令語言,它交互式地解釋和執(zhí)行用戶輸入的命令;作為程序設(shè)計(jì)語言,它定義了各種變量和參數(shù),并提供了許多在高級(jí)語言中才具有的控制結(jié)構(gòu),包括循環(huán)和分支。它雖然不是Linux系統(tǒng)核心的一部分,但它調(diào)用了系統(tǒng)核心的大部分功能來執(zhí)行程序、建立文件并以并行的方式協(xié)調(diào)各個(gè)程序的運(yùn)行。因此,對(duì)于用戶來說,shell是最重要的實(shí)用程序,深入了解和熟練掌握shell的特性極其使用方法,是用好Linux系統(tǒng)的關(guān)鍵??梢哉f,shell使用的熟練程度反映了用戶對(duì)Linux使用的熟練程度。
一、什么是shell
當(dāng)一個(gè)用戶登錄Linux系統(tǒng)之后,系統(tǒng)初始化程序init就為每一個(gè)用戶運(yùn)行一個(gè)稱為shell(外殼)的程序。那么,shell是什么呢?確切一點(diǎn)說,shell就是一個(gè)命令行解釋器,它為用戶提供了一個(gè)向Linux內(nèi)核發(fā)送請(qǐng)求以便運(yùn)行程序的界面系統(tǒng)級(jí)程序,用戶可以用shell來啟動(dòng)、掛起、停止甚至是編寫一些程序。
當(dāng)用戶使用Linux時(shí)是通過命令來完成所需工作的。一個(gè)命令就是用戶和shell之間對(duì)話的一個(gè)基本單位,它是由多個(gè)字符組成并以換行結(jié)束的字符串。shell解釋用戶輸入的命令,就象DOS里的command.com所做的一樣,所不同的是,在DOS中,command.com只有一個(gè),而在Linux下比較流行的shell有好幾個(gè),每個(gè)shell都各有千秋。一般的Linux系統(tǒng)都將bash作為默認(rèn)的shell。
二、幾種流行的shell
目前流行的shell有ash、bash、ksh、csh、zsh等,你可以用下面的命令來查看你自己的shell類型:
#echo $SHELL
$SHELL是一個(gè)環(huán)境變量,它記錄用戶所使用的shell類型。你可以用命令:
#shell-name
來轉(zhuǎn)換到別的shell,這里shell-name是你想要嘗試使用的shell的名稱,如ash等。這個(gè)命令為用戶又啟動(dòng)了一個(gè)shell,這個(gè)shell在最初登錄的那個(gè)shell之后,稱為下級(jí)的shell或子shell。使用命令:
$exit
可以退出這個(gè)子shell。
使用不同的shell的原因在于它們各自都有自己的特點(diǎn),下面作一個(gè)簡(jiǎn)單的介紹:
1.ash
ash shell是由Kenneth Almquist編寫的,Linux中占用系統(tǒng)資源最少的一個(gè)小shell,它只包含24個(gè)內(nèi)部命令,因而使用起來很不方便。
2.bash
bash是Linux系統(tǒng)默認(rèn)使用的shell,它由Brian Fox和Chet Ramey共同完成,是Bourne Again Shell的縮寫,內(nèi)部命令一共有40個(gè)。Linux使用它作為默認(rèn)的shell是因?yàn)樗兄T如以下的特色:
(1)可以使用類似DOS下面的doskey的功能,用方向鍵查閱和快速輸入并修改命令。
(2)自動(dòng)通過查找匹配的方式給出以某字符串開頭的命令。
(3)包含了自身的幫助功能,你只要在提示符下面鍵入help就可以得到相關(guān)的幫助。
3.ksh
ksh是Korn shell的縮寫,由Eric Gisin編寫,共有42條內(nèi)部命令。該shell最大的優(yōu)點(diǎn)是幾乎和商業(yè)發(fā)行版的ksh完全兼容,這樣就可以在不用花錢購買商業(yè)版本的情況下嘗試商業(yè)版本的性能了。
4.csh
csh是Linux比較大的內(nèi)核,它由以William Joy為代表的共計(jì)47位作者編成,共有52個(gè)內(nèi)部命令。該shell其實(shí)是指向/bin/tcsh這樣的一個(gè)shell,也就是說,csh其實(shí)就是tcsh。
5.zch
zch是Linux最大的shell之一,由Paul Falstad完成,共有84個(gè)內(nèi)部命令。如果只是一般的用途,是沒有必要安裝這樣的shell的。
3. shell程序設(shè)計(jì)(基礎(chǔ)部分)
其實(shí)作為命令語言交互式地解釋和執(zhí)行用戶輸入的命令只是shell功能的一個(gè)方面,shell還可以用來進(jìn)行程序設(shè)計(jì),它提供了定義變量和參數(shù)的手段以及豐富的程序控制結(jié)構(gòu)。使用shell編程類似于DOS中的批處理文件,稱為shell script,又叫shell程序或shell命令文件。
1.shell基本語法
shell的基本語法主要就是如何輸入命令運(yùn)行程序以及如何在程序之間通過shell的一些參數(shù)提供便利手段來進(jìn)行通訊。
(1)輸入輸出重定向
在Linux中,每一個(gè)進(jìn)程都有三個(gè)特殊的文件描述指針:標(biāo)準(zhǔn)輸入(standard input,文件描述指針為0)、標(biāo)準(zhǔn)輸出(standard output,文件描述指針為1)、標(biāo)準(zhǔn)錯(cuò)誤輸出(standard error,文件描述指針為2)。這三個(gè)特殊的文件描述指針使進(jìn)程在一般情況下接收標(biāo)準(zhǔn)輸入終端的輸入,同時(shí)由標(biāo)準(zhǔn)終端來顯示輸出,Linux同時(shí)也向使用者提供可以使用普通的文件或管道來取代這些標(biāo)準(zhǔn)輸入輸出設(shè)備。在shell中,使用者可以利用">"和"<"來進(jìn)行輸入輸出重定向。如:
command>file:將命令的輸出結(jié)果重定向到一個(gè)文件。
command>&file:將命令的標(biāo)準(zhǔn)錯(cuò)誤輸出一起重定向到一個(gè)文件。
command>>file:將標(biāo)準(zhǔn)輸出的結(jié)果追加到文件中。
command>>&file:將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出的結(jié)構(gòu)都追加到文件中。
command
(2)管道pipe
pipe同樣可以在標(biāo)準(zhǔn)輸入輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出間做代替工作,這樣一來,可以將某一個(gè)程序的輸出送到另一個(gè)程序的輸入,其語法如下:
command1| command2[| command3...]
也可以連同標(biāo)準(zhǔn)錯(cuò)誤輸出一起送入管道:
command1| &command2[|& command3...]
(3)前臺(tái)和后臺(tái)
在shell下面,一個(gè)新產(chǎn)生的進(jìn)程可以通過用命令后面的符號(hào)";"和"&"來分別以前臺(tái)和后臺(tái)的方式來執(zhí)行,語法如下:
command
產(chǎn)生一個(gè)前臺(tái)的進(jìn)程,下一個(gè)命令須等該命令運(yùn)行結(jié)束后才能輸入。
command &
產(chǎn)生一個(gè)后臺(tái)的進(jìn)程,此進(jìn)程在后臺(tái)運(yùn)行的同時(shí),可以輸入其他的命令。
2。shell程序的變量和參數(shù)
像高級(jí)程序設(shè)計(jì)語言一樣,shell也提供說明和使用變量的功能。對(duì)shell來講,所有變量的取值都是一個(gè)字符串,shell程序采用$var的形式來引用名為var的變量的值。
Shell有以下幾種基本類型的變量:
(1)shell定義的環(huán)境變量
shell在開始執(zhí)行時(shí)就已經(jīng)定義了一些和系統(tǒng)的工作環(huán)境有關(guān)的變量,這些變量用戶還可以重新定義,常用的shell環(huán)境變量有:
HOME:用于保存注冊(cè)目錄的完全路徑名。
PATH:用于保存用冒號(hào)分隔的目錄路徑名,shell將按PATH變量中給出的順序搜索這些目錄,找到的第一個(gè)與命令名稱一致的可執(zhí)行文件將被執(zhí)行。
TERM:終端的類型。
UID:當(dāng)前用戶的標(biāo)識(shí)符,取值是由數(shù)字構(gòu)成的字符串。
PWD:當(dāng)前工作目錄的絕對(duì)路徑名,該變量的取值隨cd命令的使用而變化。
PS1:主提示符,在特權(quán)用戶下,缺省的主提示符是"#",在普通用戶下,缺省的主提示符是"$"。
PS2:在shell接收用戶輸入命令的過程中,如果用戶在輸入行的末尾輸入"\"然后回車,或者當(dāng)用戶按回車鍵時(shí)shell判斷出用戶輸入的命令沒有結(jié)束時(shí),顯示這個(gè)輔助提示符,提示用戶繼續(xù)輸入命令的其余部分,缺省的輔助提示符是">"。
#p#副標(biāo)題#e#
(2)用戶定義的變量
用戶可以按照下面的語法規(guī)則定義自己的變量:
變量名=變量值
要注意的一點(diǎn)是,在定義變量時(shí),變量名前不應(yīng)加符號(hào)"$",在引用變量的內(nèi)容時(shí)則應(yīng)在變量名前加"$";在給變量賦值時(shí),等號(hào)兩邊一定不能留空格,若變量中本身就包含了空格,則整個(gè)字符串都要用雙引號(hào)括起來。
在編寫shell程序時(shí),為了使變量名和命令名相區(qū)別,建議所有的變量名都用大寫字母來表示。
有時(shí)我們想要在說明一個(gè)變量并對(duì)它設(shè)定為一個(gè)特定值后就不在改變它的值,這可以用下面的命令來保證一個(gè)變量的只讀性:
readly 變量名
在任何時(shí)候,建立的變量都只是當(dāng)前shell的局部變量,所以不能被shell運(yùn)行的其他命令或shell程序所利用,export命令可以將一局部變量提供給shell執(zhí)行的其他命令使用,其格式為:
export 變量名
也可以在給變量賦值的同時(shí)使用export命令:
export 變量名=變量值
使用export說明的變量,在shell以后運(yùn)行的所有命令或程序中都可以訪問到。
(3)位置參數(shù)
位置參數(shù)是一種在調(diào)用shell程序的命令行中按照各自的位置決定的變量,是在程序名之后輸入的參數(shù)。位置參數(shù)之間用空格分隔,shell取第一個(gè)位置參數(shù)替換程序文件中的,第二個(gè)替換,依次類推。是一個(gè)特殊的變量,它的內(nèi)容是當(dāng)前這個(gè)shell程序的文件名,所以,不是一個(gè)位置參數(shù),在顯示當(dāng)前所有的位置參數(shù)時(shí)是不包括的。
(4)預(yù)定義變量
預(yù)定義變量和環(huán)境變量相類似,也是在shell一開始時(shí)就定義了的變量,所不同的是,用戶只能根據(jù)shell的定義來使用這些變量,而不能重定義它。所有預(yù)定義變量都是由$符和另一個(gè)符號(hào)組成的,常用的shell預(yù)定義變量有:
$#:位置參數(shù)的數(shù)量
$*:所有位置參數(shù)的內(nèi)容
$?:命令執(zhí)行后返回的狀態(tài)
$$:當(dāng)前進(jìn)程的進(jìn)程號(hào)
$!:后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程號(hào)
:當(dāng)前執(zhí)行的進(jìn)程名
其中,"$?"用于檢查上一個(gè)命令執(zhí)行是否正確(在Linux中,命令退出狀態(tài)為0表示該命令正確執(zhí)行,任何非0值表示命令出錯(cuò))。
"$$"變量最常見的用途是用作臨時(shí)文件的名字以保證臨時(shí)文件不會(huì)重復(fù)。
(5)參數(shù)置換的變量
shell提供了參數(shù)置換能力以便用戶可以根據(jù)不同的條件來給變量
關(guān)鍵詞標(biāo)簽:linux,shell教程,shel
相關(guān)閱讀
熱門文章
安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程
Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法
多種操作系統(tǒng)NTP客戶端配置
Linux操作系統(tǒng)修改IP
人氣排行 Linux下獲取CPUID、硬盤序列號(hào)與MAC地址 dmidecode命令查看內(nèi)存型號(hào) linux tc實(shí)現(xiàn)ip流量限制 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 linux下解壓rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 關(guān)機(jī)、重啟、注銷 命令 查看linux服務(wù)器硬盤IO讀寫負(fù)載