




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第四章Shell的使用在前面的章節(jié)中已經(jīng)學(xué)習(xí)了Linux操作系統(tǒng)的安裝和基本使用,包括系統(tǒng)中常用的命令和文本編輯器等內(nèi)容,這些都是在Linux系統(tǒng)中工作所必須掌握的基本技能。從本章開(kāi)始我們學(xué)習(xí)Linux系統(tǒng)管理員需要具備的管理技能,本章的重點(diǎn)是Shell環(huán)境的使用。Shell環(huán)境是Linux用戶與Linux系統(tǒng)之間的交互界面,在Shell環(huán)境中不僅可以輸入執(zhí)行單個(gè)的命令,還可以把需要執(zhí)行的多個(gè)命令保存在文本文件中作為Shell腳本執(zhí)行,使管理任務(wù)簡(jiǎn)單化。通過(guò)本章的學(xué)習(xí),可以了解Shell的發(fā)展歷史,熟悉Bash環(huán)境的基本操作,理解并掌握輸入輸出重定向和管道的使用,編寫(xiě)簡(jiǎn)單的Shell腳本程序?qū)?/p>
2、行管理任務(wù)的自動(dòng)執(zhí)行。4.1 Shell環(huán)境在Linux系統(tǒng)的使用過(guò)程中,可能并沒(méi)有意識(shí)到Shell對(duì)于Linux系統(tǒng)的重要性,其實(shí)Shell程序從用戶登錄開(kāi)始就伴隨著我們使用Linux系統(tǒng)。在本節(jié)中我們就來(lái)了解下Linux系統(tǒng)中的Shell環(huán)境。 4.1.1 Shell的發(fā)生與發(fā)展1、Shell的基本概念Shell是操作系統(tǒng)中運(yùn)行的程序,于系統(tǒng)中的其他程序不同,Shell程序位于操作系統(tǒng)內(nèi)核和用戶之間,負(fù)責(zé)接受用戶輸入的命令,在對(duì)已輸入的命令進(jìn)行解釋后,將需要執(zhí)行的命令程序傳遞給操作系統(tǒng)內(nèi)核執(zhí)行,因此Shell程序充當(dāng)了一個(gè)“命令解釋器”的角色,如右圖所示。在微軟的系統(tǒng)中,DOS中的comm
3、and.exe程序和Windows中的cmd.exe都屬于Shell程序。在UNIX操作系統(tǒng)中存在多種類型的Shell程序,下面就來(lái)簡(jiǎn)單了解一下這些Shell的功能。2、Shell的發(fā)展和分類UNIX操作系統(tǒng)從誕生之日起就工作在命令行方式下,因此UNIX操作系統(tǒng)中的Shell程序是與UNIX操作系統(tǒng)一起出現(xiàn)的,在UNIX操作系統(tǒng)的發(fā)展過(guò)程中,逐步出現(xiàn)了不同類型的Shell,其中最常用的包括Bsh、Csh、Ksh、Zsh和Bash等。(1)BshBsh是Bourne Shell的簡(jiǎn)稱,最初是由Stephen R. Bourne于20世紀(jì)70年代中期在新澤西的AT&T貝爾實(shí)驗(yàn)室編寫(xiě)的,因此以Bou
4、rne的名字進(jìn)行命名。Bsh是產(chǎn)生較早的UNIX Shell程序,實(shí)現(xiàn)了基本的Shell程序功能,除了承擔(dān)命令解釋器的功能外,Bsh還是編程語(yǔ)言,可以使用Bsh命令編寫(xiě)具有特定功能的Shell腳本程序。(2)CshCsh是C Shell的縮寫(xiě),是Bill Joy于20世紀(jì)80年代早期,在Berkeley的加利福尼亞大學(xué)開(kāi)發(fā)完成的,C Shell使用C語(yǔ)言的語(yǔ)法風(fēng)格,并因此得名。Csh在用戶的命令行交互界面上進(jìn)行了很多改進(jìn),并增加了命令歷史、別名、文件名替換、作業(yè)控制能功能。因此Csh與Bsh相比,更加適合用戶命令交互。(3)KshKsh是Korn Shell的縮寫(xiě),是由AT&T貝爾實(shí)驗(yàn)室的Da
5、vid Korn開(kāi)發(fā)的,因此以Korn命令。 Ksh是在Bsh和Csh之后出現(xiàn)的,它結(jié)合了Bsh和Csh兩者的功能優(yōu)勢(shì),Ksh兼有Bsh的語(yǔ)法和Csh的交互特性,因此受到了用戶的廣泛歡迎。(4)BashBash是Bourne Again Shell的縮寫(xiě),從Bash的全名就可以看出,Bash是Bsh的升級(jí)替代品。Bash是GNU項(xiàng)目的成員,也是著名的開(kāi)源軟件項(xiàng)目。目前大多數(shù)Linux發(fā)行版本都是用Bash作為默認(rèn)的Shell,當(dāng)運(yùn)行Shell程序時(shí)系統(tǒng)實(shí)際運(yùn)行的是Bash程序。(5)ZshZsh兼具Ksh和Bash的優(yōu)點(diǎn),交互式操作效率更高,編程方便也有很好的操作性。Bash作為大多數(shù)Linu
6、x系統(tǒng)的默認(rèn)Shell,已經(jīng)可以滿足大部分系統(tǒng)關(guān)系需求了。Zsh目前來(lái)說(shuō)沒(méi)有Bash使用的普遍。3、RHEL5.4中Shell的使用為了提高系統(tǒng)的兼容性,RHEL5.4系統(tǒng)對(duì)常用類型的Shell都提供了支持,下面學(xué)習(xí)在RHEL5.4中幾種Shell的使用。(1)RHEL5.4中提供的shell在“/etc/”目錄中的“shells”文件中記錄了當(dāng)前Linux系統(tǒng)中能夠使用的Shell程序列表,列表中顯示了Shell程序的全路徑名。Shell程序列表中的相當(dāng)一部分Shell是其他Shell程序的符號(hào)鏈接文件,Linux系統(tǒng)中的這種做法是為了提高Shell程序之間的兼容性,例如tcsh是csh的兼
7、容升級(jí)版本,因此在系統(tǒng)運(yùn)行csh時(shí)將運(yùn)行tcsh。(2)Shell程序的轉(zhuǎn)換當(dāng)Linux系統(tǒng)中的登錄用戶需要臨時(shí)使用其他Shell程序時(shí),可以直接輸入相應(yīng)的Shell命令運(yùn)行Shell程序,新運(yùn)行的Shell程序叫做原有Shell程序的子Shell。例如,當(dāng)前的Shell程序是Bash,輸入ksh命令將運(yùn)行Ksh,則Ksh是Bash的子Shell。盡管Bash兼容了Ksh的很多特性,但在使用方法上還是有很大區(qū)別,例如Ksh中不支持help命令獲取Shell命令的幫助信息。幾乎所有的shell程序都支持使用exit命令退出當(dāng)前的Shell程序,退出當(dāng)前shell程序后將返回上一級(jí)Shell程序(
8、執(zhí)行當(dāng)前Shell程序前用戶所在的Shell),如果沒(méi)有上一級(jí)Shell升序,即當(dāng)前Shell已經(jīng)是用戶的登錄Shell,則用戶退出系統(tǒng)登錄。除了可以使用exit命令退出Shell程序之外,大多數(shù)Shell都支持Ctrl+D組合鍵退出當(dāng)前shell,Ctrl+D組合鍵是系統(tǒng)的功能鍵,不是命令,但是退出Shell的效果是相同的。(3)用戶默認(rèn)Shell的設(shè)定與Shell修改用戶每次登錄Linux系統(tǒng)時(shí)運(yùn)行的Shell程序叫做用戶的登錄Shell。用戶的登錄Shell信息是記錄在“/etc/passwd”文件中的,在該文件保存的用戶記錄中,最后一個(gè)字段表示用戶登錄的Shell。Linux系統(tǒng)中有相
9、當(dāng)多的系統(tǒng)用戶賬號(hào)的登錄Shell設(shè)置為“/sbin/nologin”,nologin程序并不為用戶提供正常的登錄界面,因此這些用戶賬號(hào)將無(wú)法正常登錄系統(tǒng)。系統(tǒng)用戶賬號(hào)是一類特殊的用戶賬號(hào),Linux系統(tǒng)需要這些賬號(hào)的存在,但是又不希望這些賬號(hào)能夠進(jìn)行正常的用戶登錄,因此將他們的登錄Shell設(shè)置為“nologin”可以在一定程度上保證系統(tǒng)的安全性。Linux系統(tǒng)中的普通用戶可以使用chsh命令更改用戶自己的登錄Shell例如用戶lch的登錄Shell是bash,使用chsh命令將自己的登錄Shell更改為ksh。用戶可以通過(guò)查看環(huán)境變量SHELL的值來(lái)查看用戶當(dāng)前登錄所使用的Shell程序。
10、chsh命令在執(zhí)行后先提示用戶輸入登錄口令,當(dāng)驗(yàn)證用戶輸入口令正確后才提示用戶輸入新的Shell程序路徑,這樣可以提高系統(tǒng)的安全性。chsh命令是通過(guò)更改“passwd”文件中用戶記錄的登錄Shell字段倆實(shí)現(xiàn)用戶登錄Shell更改的,因此chsh命令成功執(zhí)行后,新的Shell將在用戶下一次登錄系統(tǒng)時(shí)生效,即用戶在退出當(dāng)前的登錄并再次登錄系統(tǒng)時(shí)才會(huì)以新設(shè)置的Shell登錄。在上面的例子中,lch用戶退出當(dāng)前登錄并重新登錄系統(tǒng)后,當(dāng)前的登錄Shell已經(jīng)變味ksh。 4.1.2 Bash的主要功能Bash是在Bsh和其他Shell的基礎(chǔ)上發(fā)展而來(lái)的,Bash對(duì)Bsh兼容,并且充分吸收了其他She
11、ll中的優(yōu)秀特性,因此Bash在Linux操作系統(tǒng)中得到了廣泛的應(yīng)用,也是RHEL5.4中用戶默認(rèn)使用的Shell。Bash主要具有以下優(yōu)秀特點(diǎn): Bash的命令行編輯功能為用戶提供了方便的命令編輯環(huán)境 Bash的命令和文件名補(bǔ)全功能為用戶提供了快速輸入命令和文件名的方式 Bash的命令歷史功能使用戶可以重復(fù)執(zhí)行已使用過(guò)的命令 Bash的命令別名功能為用戶提供了快速輸入復(fù)雜命令的方法 Bash支持對(duì)用戶提交的作業(yè)進(jìn)行控制,提供查看作業(yè)信息、調(diào)整作業(yè)的運(yùn)行方式等功能 Bash允許用戶將常用的命令序列定義為功能鍵,實(shí)現(xiàn)一鍵操作的效果 Bash提供了豐富的變量類命令與控制結(jié)構(gòu),增強(qiáng)了Shell腳本程
12、序的靈活性Bash功能的具體使用將在4.2節(jié)中講解。 4.1.3 Shell變量在Shell的使用中,不可避免的要遇到“Shell變量”的概念,Shell變量用于在Shell程序中保存系統(tǒng)和用戶需要使用的值,Shell變量可分為如下4種類型: 環(huán)境變量 預(yù)定義變量 位置變量 用戶自定義變量(本地變量)下面將學(xué)習(xí)以上4種Shell變量的使用。1、環(huán)境變量環(huán)境變量是用戶登錄時(shí)Linux系統(tǒng)為用戶預(yù)先設(shè)定好的一類Shell變量。環(huán)境變量的功能是設(shè)置用戶在當(dāng)前Shell中的工作環(huán)境,包括用戶宿主目錄、命令查找路徑、用戶當(dāng)前目錄等。環(huán)境變量具有如下特點(diǎn): 環(huán)境變量的名稱通常由大寫(xiě)字母、數(shù)字和其他字符組成
13、,而不使用小寫(xiě)字母 環(huán)境變量在Linux系統(tǒng)中擁有固定的含義,因此環(huán)境變量名稱是固定的 環(huán)境變量的初始值在用戶登陸后就已經(jīng)存在,并可以被其他命令讀取和調(diào)用 環(huán)境變量的值通常由Linux系統(tǒng)自動(dòng)維護(hù),無(wú)需用戶人工設(shè)置 環(huán)境變量中的值會(huì)隨著用戶狀態(tài)的改變而改變,用戶可以通過(guò)讀取環(huán)境變量了解自己的當(dāng)前狀態(tài)(1)查看環(huán)境變量set命令用于查看系統(tǒng)中的所有本地定義的Shell變量在set命令的顯示結(jié)果中,每行顯示一個(gè)變量的信息,變量名稱和變量值的中間使用“=”進(jìn)行分隔。Linux系統(tǒng)中的環(huán)境變量較多,在使用set命令顯示環(huán)境變量列表時(shí),最好使用more命令進(jìn)行分頁(yè)顯示。當(dāng)需要讀取某個(gè)shell變量的值時(shí)
14、,可以在變量名前加“$”符引用變量的值,例如可以使用“$PATH”來(lái)引用環(huán)境變量“PATH”的值。echo命令用戶顯示字符串或Shell變量的值,使用“$變量名”作為echo命令的參數(shù)就可以顯示指定環(huán)境變量的值。當(dāng)沒(méi)有在環(huán)境變量前使用“$”時(shí),變量名會(huì)被echo命令作為字符串進(jìn)行顯示,而不是顯示變量的值。env命令顯示所有的環(huán)境變量由于Linux系統(tǒng)中的環(huán)境變量很多,建議分頁(yè)查看。(2)常用的環(huán)境變量介紹Linux中有如下的常用環(huán)境變量 USER UID SHELL HOME PWD PATH PS1 PS2 HISTSIZE LOGNAME LANG MAIL$USER變量表示當(dāng)前用戶的登錄
15、名稱,該變量的值與whoami命令和變量$LOGNAME的值一致。$UID變量表示當(dāng)前用戶的用戶號(hào)(UID),該變量的值與“id u”命令結(jié)果一致。$SHELL變量表示當(dāng)前用戶的登錄Shell,該變量的值與“passwd”文件中的Shell字段一致。$HOME變量表示當(dāng)前用戶的登錄目錄(宿主目錄),該變量的值與“passwd”文件中的home字段一致。$PWD變量表示用戶當(dāng)前所在的目錄,該變量的值與pwd命令的結(jié)果一致。$PATH變量表示當(dāng)前用戶的命令搜索路徑,即用戶不指定全路徑名執(zhí)行命令時(shí),Shell程序?qū)⒃谀男┠夸浺约鞍凑蘸畏N順序進(jìn)行命令的搜索。如果我們編寫(xiě)的腳本放置在root宿主目錄“/
16、root”中,為了能夠不使用絕對(duì)路徑來(lái)執(zhí)行,可以在PATH變量中添加命令搜索路徑“/root”,這樣直接運(yùn)行腳本的名字即可。$PS1和$PS2分別代表了當(dāng)前用戶的主提示符和輔助提示符。主提示符是用戶在命令行狀態(tài)中看到的提示符字符串;輔助提示符是當(dāng)前用戶輸入的命令內(nèi)容在兩行以上時(shí)(命令中有換行),在命令的第二行中出現(xiàn)的提示符,輔助提示符默認(rèn)是“”。變量$PS1的值中,u表示當(dāng)前登錄的用戶,h表示當(dāng)前的主機(jī)名,W表示當(dāng)前的工作目錄。用戶在輸入較長(zhǎng)的命令時(shí),為了使命令的選項(xiàng)和參數(shù)的顯示格式清晰,可以進(jìn)入人為的命令換行,只要在命令的行尾輸入“”并回車后,Shell程序會(huì)認(rèn)為命令沒(méi)有完成輸入,并顯示輔助
17、提示符提示用戶繼續(xù)輸入命令。掌握了常用的環(huán)境變量及其含義就可以較好地了解用戶當(dāng)前的狀態(tài)信息,并且對(duì)理解Linux系統(tǒng)中的命令的實(shí)現(xiàn)大有益處。(3)環(huán)境變量配置文件Linux系統(tǒng)中用戶的環(huán)境變量是在用戶登錄時(shí)設(shè)置完成的,環(huán)境變量的配置是通過(guò)配置文件實(shí)現(xiàn)的,環(huán)境變量配置文件可分為全局配置文件和用戶配置文件兩種。環(huán)境變量全局配置文件包括“profile”和“bashrc”兩個(gè)文件,Linux系統(tǒng)中所有的用戶在登錄時(shí)都會(huì)按照全局配置文件的內(nèi)容設(shè)置工作環(huán)境?!皃rofile”和“bashrc”兩個(gè)文件在功能上均有各自的分工?!皃rofile”文件負(fù)責(zé)設(shè)置全局的環(huán)境,并應(yīng)用于所有的用戶登錄Shell?!癰
18、ashrc”文件用戶定義全局的函數(shù)和別名,文件的內(nèi)容除了為系統(tǒng)中所有登陸用戶提供涉之外,也適用于非交互Shell和非登錄Shell。全局環(huán)境變量配置文件只有管理員root有權(quán)限進(jìn)行修改和設(shè)置,文件中的配置內(nèi)容是很嚴(yán)謹(jǐn)?shù)?,因此如果沒(méi)有特殊要求,Linux系統(tǒng)管理員無(wú)需對(duì)全局環(huán)境變量進(jìn)行修改。對(duì)全局環(huán)境變量文件的錯(cuò)誤修改有可能造成系統(tǒng)中所有用戶登陸后都無(wú)法正常工作。用戶環(huán)境變量配置文件位于用戶的宿主目錄中,文件名是“.bash_profile”和“.bashrc”。兩個(gè)文件的名稱都以“.”開(kāi)始,在Linux系統(tǒng)中作為隱藏文件。用戶可以通過(guò)修改“.bash_profile”和“.bashrc”文件來(lái)
19、更改自己的環(huán)境變量?!?bash_profile”文件的作用類似于全局的“/etc/profile”文件,但是只對(duì)用戶自身有效。“.bash_profile”文件會(huì)在用戶進(jìn)行Shell登錄時(shí)運(yùn)行,并且會(huì)調(diào)用執(zhí)行“.bashrc”文件中的內(nèi)容。用戶自己定義的變量可以添加到“.bash_profile”文件的末尾。“.bashrc”文件的作用類似于全局的“/etc/bashrc”,用于定義函數(shù)的別名,作用范圍是當(dāng)前用戶的Shell。在“.bashrc”文件中對(duì)“/etc/bashrc”文件進(jìn)行了調(diào)用執(zhí)行,用戶自定義的內(nèi)容需要添加在文件末尾?!?etc/skel”目錄中保存了初始的用戶配置文件模板,
20、當(dāng)用戶對(duì)自己的配置文件進(jìn)行了錯(cuò)誤的設(shè)置后,可以直接將“/etc/skel”目錄中的模板文件復(fù)制到用戶目錄,從而恢復(fù)正確的初始配置。掌握了全局配置文件“profile”和“bashrc”,以及用戶配置文件“.bash_profile”和“.bashrc”的作用后,Linux系統(tǒng)管理員就可以將需要的環(huán)境變量配置添加到適當(dāng)?shù)奈恢?。?duì)配置文件的修改不會(huì)影響Linux系統(tǒng)中的登錄用戶,用戶重新進(jìn)行Shell登陸后才會(huì)按照新的配置文件內(nèi)容進(jìn)行配置。2、位置變量位置變量(位置參數(shù))與Shell腳本程序執(zhí)行時(shí)所使用的命令參數(shù)相對(duì)應(yīng),命令行中的參數(shù)按照從左到右的順序賦值給位置變量。位置變量名稱的格式是“$n”,
21、其中“n”是參數(shù)的位置序號(hào),位置變量的“n”是從“1”開(kāi)始的,例如$1、$2、$3分別代表了命令的第1、2、3個(gè)參數(shù),位置變量最多使用到$9。$0代表所執(zhí)行命令的名稱,即命令本身。雖然$0與位置變量的格式相同,但是$0屬于預(yù)定義變量而不是位置變量。下面我們使用exam01腳本文件說(shuō)明位置變量的功能,exam01腳本文件的內(nèi)容如下:exam01腳本程序的功能是現(xiàn)實(shí)$0至$9的值,$0代表執(zhí)行腳本的名稱,$1至$9是位置變量,表示腳本程序執(zhí)行時(shí)的命令參數(shù)。通過(guò)以上實(shí)例,我們可以大致了解位置變量的作用。通常,在編寫(xiě)Shell腳本時(shí)會(huì)使用位置變量接收用戶指定的命令參數(shù)。3、預(yù)定義變量預(yù)定義變量是Lin
22、ux系統(tǒng)中已定義好的變量,用戶只能使用預(yù)定義變量,而不能創(chuàng)建或賦值預(yù)定義變量。所有的預(yù)定義變量都是由“$”符合另一個(gè)符號(hào)組成的,常用的Shell預(yù)定義變量有: $#表示位置參數(shù)的數(shù)量 $*表示所有位置參數(shù)的內(nèi)容 $?表示命令執(zhí)行后返回的狀態(tài),用戶檢查上一個(gè)命令的執(zhí)行是否正確;在Linux系統(tǒng)中,命令退出狀態(tài)為0表示命令正確執(zhí)行,任何非0值表示命令執(zhí)行錯(cuò)誤 $表示當(dāng)前進(jìn)程的進(jìn)程號(hào) $!表示后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程號(hào) #0表示當(dāng)前執(zhí)行的進(jìn)程名預(yù)定義變量通常使用在Shell腳本中,在Shell交互命令中使用并不常見(jiàn),但是仍然可以使用“echo”命令查看預(yù)定義變量的值。4、用戶自定義變量用戶自定義變量是
23、Shell用戶自己定義的變量,只有用戶自己的Shell中有效,因此又成為本地變量。與環(huán)境變量、位置變量和預(yù)定義變量3類變量相比較,自定義變量能夠?qū)崿F(xiàn)更加靈活的功能,因此自定義變量也是用戶常用的一類變量。(1)自定義變量的設(shè)置Shell用戶可以在命令行界面或Shell腳本中進(jìn)行變量的自定義,用戶變量不需要提前創(chuàng)建,在對(duì)變量第一次賦值時(shí)將被自動(dòng)創(chuàng)建,用戶自定義變量賦值的格式如下:格式:變量名=變量值在變量賦值的命令語(yǔ)句中,“=”(等號(hào))左邊是被賦值的變量名,右邊是為變量所賦的值,等號(hào)左右沒(méi)有空格。(2)自定義變量的查看與引用自定義變量的引用方式與其他類型的變量相同,在變量名前加入“$”符。變量被創(chuàng)
24、建(賦值)后,使用echo命令可以查看變量的值。set命令可以顯示出系統(tǒng)中的所有變量,也包括用戶自定義的變量。變量被用戶定以后會(huì)出現(xiàn)在set命令顯示的變量列表中。(3)自定義變量的輸出用戶在當(dāng)前Shell中定義了某個(gè)變量后,只能在當(dāng)前的Shell中使用,而在當(dāng)前Shell的子Shell中是無(wú)效的(無(wú)法引用定義的變量)。為了在用戶的子Shell或腳本程序中使用自定義變量,需要將用戶自定義的變量“輸出”為全局變量。export命令用于輸出變量為全局變量,命令的基本格式為:格式:export -nf name=valueexport命令使用變量名作為參數(shù),輸出指定名稱的變量為全局變量。被export
25、輸出后的變量可以在用戶所有的子Shell中使用。export命令可以在輸出變量的同時(shí)對(duì)指定名稱的變量進(jìn)行賦值(創(chuàng)建),這樣在export命令之前就不需要單獨(dú)為變量進(jìn)行賦值了。同一條export命令中可以指定多個(gè)變量名作為命令的參數(shù)。(4)自定義變量的清除當(dāng)用戶不再使用自定義變量時(shí),可以使用“unset”命令對(duì)已定義的用戶變量進(jìn)行清除,unset命令的基本格式:格式:unset -f -v nameunset命令使用變量名作為命令的參數(shù),清除指定名稱的變量名。(5)使用readonly命令設(shè)置只讀變量如果使用readonly命令,變量就不能被修改或清除了??梢钥吹皆O(shè)置readonly后,變量ab
26、c不能被清除。對(duì)于環(huán)境變量的修改立即生效,卻不會(huì)被保留下來(lái)。為了永久的修改一些環(huán)境變量,可以修改一些相關(guān)的環(huán)境定義文件來(lái)實(shí)現(xiàn),例如HISTSIZE、HOSTNAME等變量在“/etc/profile”文件中定義。直接修改配置文件所作的環(huán)境變量設(shè)置,需要用戶重新登錄后才會(huì)生效。 4.1.4 Shell中的特殊字符Shell中除了普通字符外,還可以使用一些具有特殊含義和功能的字符。在使用它們時(shí)應(yīng)注意其特殊的含義和作用范圍。這些字符可以幫助用戶實(shí)現(xiàn)模式的匹配、I/O重定向、組織命令等操作,接下來(lái)分別對(duì)這些特殊字符加以介紹。1、通配符與DOS系統(tǒng)類似,通配符常用于模式匹配,如文件名匹配、路徑名搜索、字
27、符串查找等。用戶可以在作為命令參數(shù)的文件名中包含通配符,構(gòu)成一個(gè)所謂的“模式串”,在執(zhí)行過(guò)程中進(jìn)行模式匹配。常用的通配符有“*”、“?”和括在方括號(hào)“ ”中的字符序列?!?”代表任意字符串,例如“s*”匹配以s開(kāi)頭的任意字符串。注:文件名前的原電“.”和路徑名中的斜線“/”必須顯示匹配,如“*”不能匹配”.file”,而“.*”才可以匹配”.file”?!埃俊贝砣魏螁蝹€(gè)字符。例如執(zhí)行“l(fā)s a?”就可以列出當(dāng)前目錄中以a字母開(kāi)頭且只有兩個(gè)字符的文件名。“ ”代表一個(gè)字符范圍,只要文件名中 位置處的字符在 通配符中指定的范圍之內(nèi),那么這個(gè)文件名就與這個(gè)模式串匹配。方括號(hào)中的字符范圍可以由直接給
28、出的字符組成,也可以由表示限定范圍的起始字符、終止字符及中間的連字符“-”組成。例如fa-d與fabcd的作用相同。Shell程序?qū)雅c命令行中指定的模式串匹配的所有文件名都作為命令的參數(shù),形成最終的命令,然后再執(zhí)行這個(gè)命令。注:“!字符”與前面“ ”的用法相反,它表示排除“ ”中的任意字符,如執(zhí)行“l(fā)s !abc*”命令就是列出不以字符abc中任意一個(gè)字符開(kāi)頭的所有文件。舉例:“* ”表示所有文件“*log*”表示目錄中所有文件名中包含log的文件“ab-dm*”表示目錄中所有文件名以a、b、c、d、m開(kāi)頭的文件“ab-dm?”表示目錄中所有文件名以a、b、c、d、m開(kāi)頭且后面只跟有一個(gè)字符
29、的文件“/root/?”表示root目錄下所有名稱為三個(gè)字符的文件注:連字符“-”僅在方括號(hào)內(nèi)有效,表示字符范圍,如在方括號(hào)外面就變成普通字符了。而“*”和“?”只有在方括號(hào)外面作為通配符,若出現(xiàn)在方括號(hào)之內(nèi),它們也失去通配符的意義,成為普通字符了。如模式“-a*?abc”中只有一對(duì)方括號(hào)是通配符,“*”和“?”均為普通字符,因此,它匹配的模式的字符串只能是“-a*abc”和“-a?abc”。由于“*”、“?”和“ ”對(duì)于Shell來(lái)說(shuō)具有比較特殊的含義,因此在正常的文件名中不應(yīng)出現(xiàn)這些字符。特別是在文件名中不要出現(xiàn)它們,否則Shell匹配起來(lái)可能會(huì)無(wú)窮遞歸下去。如果目錄中沒(méi)有與指定的模式串相
30、匹配的文件名,那么Shell將使用此模式串本身作為參數(shù)傳給有關(guān)命令。2、引號(hào)在Shell中引號(hào)分為三種:?jiǎn)我?hào)、雙引號(hào)和反引號(hào)。由單引號(hào)括起來(lái)的字符都作為普通字符出現(xiàn)。特殊字符用單引號(hào)括起來(lái)以后,也會(huì)失去原有意義,而只作為普通字符解釋。由雙引號(hào)括起來(lái)的字符,除“$”、“”、“”和“”這幾個(gè)字符仍是特殊字符并保留其特殊功能外,其余字符仍作為普通字符對(duì)待,對(duì)于“$”來(lái)說(shuō),就是用其后指定的變量的值來(lái)代替這個(gè)變量和$;對(duì)于“”來(lái)說(shuō),是轉(zhuǎn)義字符,它告訴Shell不要對(duì)其后面的那個(gè)字符進(jìn)行特殊處理,而當(dāng)做普通字符即可。在雙引號(hào)中,需要在前面加上轉(zhuǎn)義字符()的只有4個(gè)字符:“$”、“”、“”和“”。反引號(hào)這
31、個(gè)字符所對(duì)應(yīng)的鍵一般位于鍵盤(pán)左上角,Tab上面的那個(gè)鍵。反引號(hào)括起來(lái)的字符串被Shell解釋為命令行,在執(zhí)行時(shí),Shell首先執(zhí)行該命令行,并以它的標(biāo)準(zhǔn)輸出結(jié)果取代整個(gè)反引號(hào)部分。在第一次定義變量test時(shí),使用了雙引號(hào)“$HOME”,這時(shí)$HOME保持原有的特殊含義。所以輸出變量$test時(shí)實(shí)際輸出的是$HOME的值;第二次定義變量test時(shí),使用了單引號(hào)$HOME,這時(shí)$HOME不再擁有特殊含義,所有輸出變量$test時(shí)輸出的就是$HOME這個(gè)字符串本身。最后一個(gè)命令使用echo返回一個(gè)字符串,但是字符串包含一個(gè)反引號(hào),反引號(hào)中的命令會(huì)先執(zhí)行,并把執(zhí)行后的結(jié)果再放到字符串中。3、其他符號(hào)在
32、其它符號(hào)中,最常見(jiàn)的是注釋符“#”,“#”表示注釋,其后的內(nèi)容不會(huì)被當(dāng)做命令或程序執(zhí)行。在Shell腳本中經(jīng)常要對(duì)某些正文行進(jìn)行注釋,以增加程序的可讀性。在Shell腳本中以字符“#”開(kāi)頭的正文行表示注釋行。常見(jiàn)的符號(hào)有:“&”:表示該符號(hào)前的命令放到后臺(tái)執(zhí)行“;”可以用來(lái)分隔多個(gè)命令,讓多個(gè)命令在同一行輸入;在文件中通常表示為示例行“”:命令換行,對(duì)于較長(zhǎng)的命令可以進(jìn)行自定義換行“”:輸出重定向符,會(huì)覆蓋原有文件內(nèi)容“”:將命令的輸入改為來(lái)自文件“”:輸出重定向符,追加內(nèi)容到一個(gè)已有的文件后面“|”:建立管道,將前面的一個(gè)命令的結(jié)果輸入給后面的命令使用“|”:OR運(yùn)算,一般多用于if、whi
33、le等條件語(yǔ)句的判斷式中“”:用戶登錄后所在的目錄,即用戶的宿主目錄4.2 Bash的常用功能Bash是RHEL5.4中為用戶設(shè)置的默認(rèn)Shell,在本節(jié)中我們將學(xué)習(xí)Bash的強(qiáng)大功能。 4.2.1 命令行編輯功能Bash中為用戶提供了功能強(qiáng)大的命令行編輯功能,在輸入命令時(shí)用戶可以使用以下的編輯功能。1、光標(biāo)的移動(dòng)使用左右方向鍵可以使光標(biāo)在當(dāng)前命令行中的已有字符鍵進(jìn)行任意的移動(dòng)。2、退格鍵和刪除鍵使用退格鍵(BackSpace)可以刪除命令行中光標(biāo)左邊的字符,使用刪除鍵(Delete)可以刪除當(dāng)前光標(biāo)處的字符。3、定位命令行首尾使用Home和End鍵可以將光標(biāo)快速移動(dòng)到命令行的行首和行尾。4、
34、行內(nèi)快速快速刪除命令Bash的命令行中提供了豐富的組合鍵用于命令行內(nèi)容的編輯。如Ctrl+U組合鍵用于刪除當(dāng)前光標(biāo)到行首的內(nèi)容;Ctrl+K組合鍵用于刪除當(dāng)前光標(biāo)到行尾的內(nèi)容。 4.2.2 命令行補(bǔ)全功能命令補(bǔ)全功能是Bash的一個(gè)重要特性,靈活掌握命令補(bǔ)全功能可以使用戶大大提高命令輸入的速度。Bash中的命令補(bǔ)全功能是命令補(bǔ)全和文件名不全的總稱,用戶在命令行中輸入命令和文件名時(shí),可以只輸入部分的內(nèi)容,然后通過(guò)Tab鍵的操作由Shell程序自動(dòng)對(duì)命令或文件名補(bǔ)充完整。1、命令補(bǔ)全功能當(dāng)用戶輸入某條命令時(shí),可以只輸入命令名中開(kāi)始部分的字符,然后使用Tab鍵進(jìn)行命令的補(bǔ)全,Bash會(huì)根據(jù)已輸入的命
35、令名部分字符在用戶的命令路徑中搜尋與已輸入的字符串相匹配的命令,如果查找的結(jié)果唯一,Bash會(huì)自動(dòng)將命令的剩余字符補(bǔ)全;如果查找的結(jié)果又多個(gè),Bash將不對(duì)命令進(jìn)行補(bǔ)全,此時(shí)用戶連續(xù)按兩次Tab鍵,Bash將在當(dāng)前命令行屏幕中顯示所有匹配的查找結(jié)果(命令名),用戶瀏覽現(xiàn)有的查找結(jié)果后可以 更多的字符作為查找條件,使查找結(jié)果唯一,然后再按Tab鍵進(jìn)行補(bǔ)全命令。下面我們通過(guò)一個(gè)實(shí)例來(lái)說(shuō)明命令補(bǔ)全的操作過(guò)程,假設(shè)用戶需要使用“passwd”命令,并已經(jīng)輸入了“pas”3個(gè)字符。此時(shí)用戶連續(xù)兩次按“Tab”鍵,Bash會(huì)查找并在當(dāng)前命令行的下方顯示“passwd”和“paste”這兩個(gè)與“pas”匹配
36、的命令。原有命令行輸入的命令將在下一行重新顯示。此時(shí)用戶再輸入一個(gè)字母“s”,并按Tab鍵,Bash查找與“pass”匹配的命令只有“passwd”一個(gè)(唯一),因此Bash將自動(dòng)在“pass”后面補(bǔ)全“wd”兩個(gè)字符,當(dāng)前命令行出現(xiàn)完整的“passwd”命令。對(duì)于命令字很長(zhǎng)的命令,一般輸入前4個(gè)字符就可以補(bǔ)全整個(gè)命令,因此熟練使用命令補(bǔ)全功能可以快速的提高命令的輸入效率。2、文件補(bǔ)全功能文件名的補(bǔ)全功能與命令補(bǔ)全的原理類似,區(qū)別在于文件補(bǔ)全不會(huì)在命令的搜索路徑中進(jìn)行匹配查找,而只在已經(jīng)輸入的路徑中對(duì)文件和目錄名進(jìn)行匹配查找。例如,我們需要使用“cat /etc/passwd”命令查看“pas
37、swd”文件的內(nèi)容,可以先輸入cat命令和不完整的路徑名,如下所示:此時(shí)按Tab鍵可以將“/etc/”的目錄名稱補(bǔ)全。在輸入局部的文件名“pas”后按Tab鍵可以將“passwd”的文件名補(bǔ)全。文件名的補(bǔ)全對(duì)于較長(zhǎng)的路徑名尤其有效,用戶可以把整個(gè)路徑中的每一個(gè)目錄或文件名作為一個(gè)單元進(jìn)行補(bǔ)齊。 4.2.3 命令歷史與命令重復(fù)1、命令歷史的使用命令歷史是Bash中又一項(xiàng)提高命令輸入效率的功能,該功能可以讓用戶快速的重復(fù)執(zhí)行已經(jīng)輸入過(guò)的命令。在Bash中用戶輸入過(guò)的命令都將作為歷史記錄被保存下來(lái),當(dāng)用戶需要重復(fù)執(zhí)行已輸入過(guò)的命令時(shí),使用向上的方向鍵可以從最近一次執(zhí)行的命令開(kāi)始追溯保存的歷史命令。例
38、如,用戶剛剛執(zhí)行完“pwd”和“cd .”兩條命令,當(dāng)用戶按向上的方向鍵時(shí),會(huì)在當(dāng)前命令行出現(xiàn)上一條執(zhí)行過(guò)的命令“cd .”。如果此條命令不是用戶想要執(zhí)行的命令,可以再次按向上的方向鍵,當(dāng)前命令行上的命令變?yōu)椤皃wd”,此時(shí)回車后將執(zhí)行該命令,并顯示命令結(jié)果。當(dāng)用戶在命令行查詢歷史命令時(shí),還可以使用向下的方向鍵與向上的方向鍵配合反復(fù)查詢命令的歷史記錄。當(dāng)查詢到與需要執(zhí)行的命令類似的歷史命令記錄時(shí),可以在當(dāng)前命令行中對(duì)命令進(jìn)行編輯,然后回車執(zhí)行。2、歷史命令的查看用戶如果感覺(jué)使用上下方向鍵進(jìn)行歷史命令的追溯不方便,例如需要查找很久以前執(zhí)行的命令,可以使用history命令顯示歷史命令的列表。hi
39、story命令的默認(rèn)格式將顯示Bash中保存的所有歷史命令,命令執(zhí)行結(jié)果中每個(gè)命令記錄占用一行,行中除了顯示命令的內(nèi)容外,在命令的前面還顯示了命令的序號(hào)(藝術(shù)字表示)。在命令行中輸入“!”再輸入從history命令顯示結(jié)果中獲得的命令序號(hào),然后回車,可以再次執(zhí)行指定命令序號(hào)的命令。例如,繼續(xù)上面的實(shí)例,“!191”將再次執(zhí)行pwd命令。另外,在命令行中輸入“!”再輸入已經(jīng)執(zhí)行過(guò)命令的部分字符,然后回車,Bash將在歷史命令的列表中查找匹配的命令并執(zhí)行。3、用戶命令歷史文件Bash中的命令歷史功能是通過(guò)將用戶輸入的命令保存在相應(yīng)的文件中實(shí)現(xiàn)的,保存歷史命令的文件名保存在環(huán)境變量“HISTFILE
40、”中。通過(guò)查詢環(huán)境變量“HISTFILE”的值可以發(fā)現(xiàn)用戶用戶保存歷史命令的文件通常是用戶宿主目錄中的“.bash_history”文件。環(huán)境變量“HISTSIZE”的值代表了命令歷史記錄的最大數(shù)目,例如“HISTSIZE”的值為1000時(shí)表示用戶最多有1000個(gè)歷史命令可以被記錄。4、命令歷史的清除Bash的命令歷史功能在為用戶提供輸入命令方便的同時(shí),也存在著一定的安全隱患,因此在輸入一些重要的命令后需要將命令歷史進(jìn)行清除。命令歷史的清除同樣需要使用history命令,命令的格式如下:history命令使用“-c”選項(xiàng)可以將用戶當(dāng)前的命令歷史進(jìn)行清空。命令歷史進(jìn)行清空后將重新開(kāi)始記錄,命令序
41、號(hào)從“1”開(kāi)始。用戶宿主目錄中的“.bash_logout”文件是在用戶注銷Shell登錄時(shí)執(zhí)行的腳本,為了提高系統(tǒng)的安全性,可以將“history c”命令添加到“.bash_logout”文件中,這樣每次用戶退出Shell時(shí)都會(huì)自動(dòng)將用戶的歷史命令列表清空。 4.2.4 命令別名Bash中的命令別名功能主要有兩個(gè)作用: 提高命令的輸入效率,把頻繁使用的復(fù)雜命令定義為別名命令,簡(jiǎn)化了命令的輸入。 提高當(dāng)前系統(tǒng)對(duì)于其他系統(tǒng)命令的兼容性,如將vi定義為vim的別名,可以提供用戶對(duì)vi編輯器使用習(xí)慣的兼容下面我們來(lái)學(xué)習(xí)命令別名的使用。1、命令別名的顯示alias命令用于顯示用戶當(dāng)前Bash中已經(jīng)定
42、義的所有命令別名。從alias命令的顯示結(jié)果可以看出,命令別名是將一個(gè)具有特定功能的復(fù)雜命令(包括各種命令選項(xiàng))另外命名一個(gè)命令名稱,這樣當(dāng)用戶需要執(zhí)行已定義別名的復(fù)雜命令時(shí),只需要輸入定義的別名即可實(shí)現(xiàn)命令功能,從而省去了每次輸入一長(zhǎng)串的命令和命令選項(xiàng)的過(guò)程??梢钥吹綀?zhí)行命令別名與執(zhí)行普通命令沒(méi)有太大區(qū)別,先輸入命令名,然后輸入必要的命令選項(xiàng)和參數(shù),最后回車執(zhí)行命令。RHEL5.4中定義了好幾個(gè)別名,例如“l(fā)l”是“l(fā)s l”命令的別名,這樣用戶在需要以長(zhǎng)格式顯示文件信息時(shí),就不需要每次都輸入“l(fā)s l”命令,直接輸入“l(fā)l”命令即可。如果定義的命令別名與原命令重名,Bash在執(zhí)行命令時(shí)將優(yōu)
43、先執(zhí)行別名命令,而用戶執(zhí)行原命令時(shí)需要輸入該命令的完整路徑名。例如,在執(zhí)行別名命令“l(fā)s”和原命令“/bin/ls”兩條命令時(shí)會(huì)在顯示內(nèi)容的顏色上有所區(qū)別。2、命令別名的定義用戶可以根據(jù)自己的命令使用習(xí)慣使用alias命令自己定義命令別名,定義別名的命令格式:格式:alias name=value 例如:在Windows的命令行界面中,清空屏幕的命令是“cls”,而Linux中清空屏幕的命令是“clear”。如果想在Linux中延續(xù)Windows的清屏命令,可以使用命令別名,給命令“clear”定義一個(gè)別名,為“cls”。這樣當(dāng)我們執(zhí)行“cls”命令時(shí),實(shí)際上執(zhí)行的就是“clear”命令。3、
44、命令別名的取消unalias命令用于取消系統(tǒng)中定義的命令別名,命令格式:格式:unalias -a name name unalias命令使用“-a”選項(xiàng)時(shí)將取消用戶當(dāng)前Bash中所有的命令別名定義,因此請(qǐng)慎重使用該命令選項(xiàng)。使用alias命令定義的別名和使用unalias命令取消定義的別名都只在當(dāng)前用戶Shell環(huán)境中有效,下次啟動(dòng)時(shí)將恢復(fù)初始的別名設(shè)置。因此用戶固定使用的自定義別名命令應(yīng)保存在用戶宿主目錄的“.bashrc”中。4、系統(tǒng)別名定義文件RHEL5.4中為用戶預(yù)定義的命令別名保存在“/etc/profile.d/”目錄的配置文件中。例如,“l(fā)l”和“l(fā).”命令別名的定義就在“co
45、lors.sh”文件中。4.3 管道和重定向在前面各章節(jié)的內(nèi)容中我們已經(jīng)學(xué)習(xí)了Linux常用的命令,這些命令都能獨(dú)立完成某些功能,并且使用鍵盤(pán)作為內(nèi)容的輸入,使用屏幕作為內(nèi)容的輸出。在本節(jié)中將學(xué)習(xí)如何保存命令的輸入結(jié)果,以及如何將多個(gè)命令組合起來(lái)完成更加復(fù)雜的功能。 4.3.1 標(biāo)準(zhǔn)輸入輸出在Linux系統(tǒng)中,通常使用文件來(lái)表述系統(tǒng)資源,例如已經(jīng)學(xué)習(xí)過(guò)的使用設(shè)備文件名來(lái)引導(dǎo)系統(tǒng)中的硬盤(pán)、光盤(pán)驅(qū)動(dòng)器等設(shè)備。Linux系統(tǒng)中的輸入輸出可分為如下3類,它們也使用文件進(jìn)行描述。: 標(biāo)準(zhǔn)輸入(STDIN)的文件編號(hào)是0,默認(rèn)的設(shè)備是鍵盤(pán),命令在執(zhí)行時(shí)需要的輸入數(shù)據(jù)從標(biāo)準(zhǔn)輸入文件中讀取 標(biāo)準(zhǔn)輸出(STDO
46、UT)的文件編號(hào)是1,默認(rèn)的設(shè)備是顯示器,命令執(zhí)行后的輸出結(jié)果發(fā)送到標(biāo)準(zhǔn)輸出文件 標(biāo)準(zhǔn)錯(cuò)誤(STDERR)的文件編號(hào)是2,默認(rèn)的設(shè)備是顯示器,命令執(zhí)行時(shí)的錯(cuò)誤信息發(fā)送到標(biāo)準(zhǔn)錯(cuò)誤文件標(biāo)準(zhǔn)輸入、輸入和標(biāo)準(zhǔn)錯(cuò)誤默認(rèn)使用了鍵盤(pán)和顯示器作為關(guān)聯(lián)的設(shè)備,因此當(dāng)我們執(zhí)行命令時(shí)會(huì)從鍵盤(pán)接收用戶的輸入字符,并將命令結(jié)果顯示在屏幕上,如果命令執(zhí)行錯(cuò)誤也將顯示在屏幕上反饋給用戶。這樣通過(guò)最普通的終端設(shè)備(由鍵盤(pán)和顯示器等設(shè)備組成),用戶就可以執(zhí)行Linux命令,完成最基本的輸入輸出。 4.3.2 重定向重定向操作的概念是將標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出不使用默認(rèn)的資源(鍵盤(pán)和顯示器),而是用指定的文件。1、輸入重
47、定向輸入重定向就是將命令中接收輸入的途徑由默認(rèn)的鍵盤(pán)更改(重定向)為指定的文件。輸入重定向需要使用“”和“”。下面以ls命令的實(shí)例來(lái)說(shuō)明輸出重定向的操作和功能。“”重定向操作符將命令的執(zhí)行結(jié)果重定向輸出到指定的文件中,命令進(jìn)行輸出重定向后執(zhí)行結(jié)果將不顯示在屏幕上。“”重定向符后面指定的文件名如果不存在,在命令執(zhí)行過(guò)程中將建立該文件,并保存命令執(zhí)行結(jié)果到文件中;“”重定向符后面指定的文件如果存在,命令執(zhí)行時(shí)將清空文件的內(nèi)容并保存命令執(zhí)行結(jié)果到文件中。如果用戶想將多個(gè)命令的輸出結(jié)果都保存在同一個(gè)文件中,而新的命令輸出不覆蓋文件中原有的內(nèi)容,需要使用“”重定向符實(shí)現(xiàn)這一操作?!啊敝囟ㄏ虿僮鞣梢詫⒚?/p>
48、令執(zhí)行的結(jié)果重定向并追加到指定文件大的末尾保存,因此指定文件中的內(nèi)容會(huì)越來(lái)越多。從上面的實(shí)例可以看出,兩次ls命令的執(zhí)行結(jié)果都是用“”重定向操作符輸出到了“l(fā)ichuanhui.txt”文件中,兩次命令執(zhí)行后的文件首部?jī)?nèi)容沒(méi)有變化,而文件尾部的內(nèi)容發(fā)生了變化,說(shuō)明命令的執(zhí)行結(jié)果是追加到文件中的。3、錯(cuò)誤重定向在我們執(zhí)行Linux命令時(shí),經(jīng)常會(huì)因?yàn)槊蠲?、命令選項(xiàng)和命令參數(shù)使用錯(cuò)誤而收到顯示在計(jì)算機(jī)屏幕上的錯(cuò)誤信息,我們可以將這些命令執(zhí)行的錯(cuò)誤信息重定向到指定的文件,而不顯示在屏幕上,這樣的操作叫做錯(cuò)誤(輸出)重定向。錯(cuò)誤重定向需要使用“2”操作符,其中“2”是錯(cuò)誤文件的編號(hào),“”符號(hào)用于重定向
49、到文件。例如執(zhí)行一個(gè)系統(tǒng)中不存在的命令,將在屏幕上顯示錯(cuò)誤信息;可以使用“2”錯(cuò)誤重定向操作符將該錯(cuò)誤信息重定向保存到指定的文件中?!?”操作符會(huì)像“”操作符一樣閑清空指定文件的內(nèi)容,再保存重定向的內(nèi)容到文件中,如果要保存多個(gè)命令的錯(cuò)誤輸出到同一個(gè)文件,需要使用“2”重定向操作符?!?”重定向操作符向指定文件中追加命令的錯(cuò)誤輸出,而不覆蓋文件中的原有內(nèi)容。使用錯(cuò)誤重定向功能通常有以下兩個(gè)作用: 在程序調(diào)試時(shí),搜集程序的錯(cuò)誤信息,為程序排錯(cuò)提供依據(jù) 在編寫(xiě)Shell腳本時(shí),將錯(cuò)誤重定向到指定文件,以便保持用戶顯示界面的整潔4、輸出重定向和錯(cuò)誤重定向的組合使用在執(zhí)行一條命令時(shí),可以同時(shí)存在標(biāo)準(zhǔn)輸出
50、內(nèi)容和錯(cuò)誤輸出內(nèi)容。因此,命令的輸出重定向和錯(cuò)誤重定向可以分別使用,也可以組合使用,下面通過(guò)實(shí)例進(jìn)行說(shuō)明。假設(shè)當(dāng)前目錄下有一個(gè)名為“afile”的文件,而不存在名為“bfile”的文件,執(zhí)行l(wèi)s命令的結(jié)果如下:在上面ls命令的執(zhí)行結(jié)果中,第一行是錯(cuò)誤輸出,第二行是標(biāo)準(zhǔn)輸出,我們可以將標(biāo)準(zhǔn)輸出重定向到“outfile”文件中。也可以將錯(cuò)誤輸出重定向到“errfile”文件中。如果需要將標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出重定向到一個(gè)文件中,需要使用“&”重定向操作符?!?”重定向操作符用于將命令執(zhí)行的輸出和錯(cuò)誤輸出重定向到指定的同一個(gè)文件中。命令的標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出的內(nèi)容也可以分別重定向到不同的文件中。 4.3.
51、3 管道Bash中的管道是一個(gè)令使用者驚訝的功能,通過(guò)管道符“|”的使用,可以把多個(gè)簡(jiǎn)單的命令連接起來(lái)實(shí)現(xiàn)更加復(fù)雜的功能。管道符“|”連接命令使用的格式如下:格式:cmd1|cmd2|cmdn“|”符用于連接左右兩個(gè)命令,將“|”左邊的命令執(zhí)行結(jié)果(輸出)作為“|”右邊命令的輸入,這樣“|”就像一根管道一樣連接著左右兩條命令,并在管道中實(shí)現(xiàn)數(shù)據(jù)從左到右的傳輸。在同一個(gè)命令中可以使用多個(gè)管道符連接多個(gè)命令,就像由多條小的管道左右相連組成一條長(zhǎng)的管線,數(shù)據(jù)從管線的最左邊經(jīng)過(guò)每一個(gè)管道節(jié)點(diǎn)(命令)的處理,最終輸送到管線的最右端。在同一個(gè)命令中使用管道符組合多條基本命令的使用,可以完成單個(gè)命令無(wú)法完成
52、的任務(wù)。例如,ls命令和more命令使用管道符組合使用可以實(shí)現(xiàn)目錄列表分屏顯示的功能。ls命令和grep命令使用管道符組合使用可以只顯示列表中包含特定關(guān)鍵字的列表項(xiàng)。管道符的使用非常靈活,在實(shí)際的使用中,我們可以嘗試使用管道符組合不同的命令實(shí)現(xiàn)各種功能。4.4 Shell腳本本節(jié)將學(xué)習(xí)Shell腳本的概念和功能,以及應(yīng)該如何運(yùn)行Shell腳本。 4.4.1 Shell腳本概念在4.1節(jié)中已經(jīng)學(xué)習(xí)了Shell的產(chǎn)生和發(fā)展,介紹了Shell不僅是和用戶交互的界面,還是一種編程語(yǔ)言;使用Shell編程語(yǔ)言編寫(xiě)的程序就是Shell腳本。下面介紹Shell腳本的基本知識(shí)。1、Shell腳本的概念Shel
53、l腳本是使用Shell命令編寫(xiě)的可執(zhí)行程序,具有以下特點(diǎn): Shell腳本程序類似于DOS中的批處理文件,是Shell命令語(yǔ)句的集合,用于實(shí)現(xiàn)特定的功能 Shell腳本程序保存在文本文件中,可以使用文本處理程序進(jìn)行閱讀和編輯 Shell腳本程序是由Shell環(huán)境解釋執(zhí)行的,不需要在執(zhí)行前進(jìn)行編譯 執(zhí)行Shell程序時(shí),Shell腳本文件需要具有可執(zhí)行(x)的屬性正是由于Shell腳本具有以上特點(diǎn),才使得長(zhǎng)期以來(lái)Shell腳本在Linux(UNIX)系統(tǒng)中得到了廣泛的使用,并承擔(dān)著重要的角色。2、Linux系統(tǒng)中的Shell腳本Linux系統(tǒng)中存在著大量的Shell腳本,很多腳本時(shí)Linux系統(tǒng)
54、不可缺少的組成部分,功能非常重要。例如,“/etc/init.d/”目錄中存在相當(dāng)多的系統(tǒng)服務(wù)啟動(dòng)程序,這些程序全部上都是Shell腳本文件,可以使用file命令查詢這些文件的類型。“/etc/init.d/”目錄中的每個(gè)腳本都是一個(gè)系統(tǒng)服務(wù)的啟動(dòng)腳本,因此可以說(shuō)每個(gè)腳本都實(shí)現(xiàn)了一定的系統(tǒng)功能。Linux中的系統(tǒng)腳本文件的屬主都是管理員root,所有的腳本文件都具有可執(zhí)行的文件屬性,因此可以由Shell環(huán)境解釋執(zhí)行。Shell腳本文件以文本文件的形式保存,可以使用cat命令進(jìn)行內(nèi)容的查看,也可以使用vi命令進(jìn)行文件內(nèi)容的修改。Linux中的系統(tǒng)腳本文件只有管理員root才具有修改的權(quán)限,并且修改系統(tǒng)腳本存在相當(dāng)大的危險(xiǎn),有可能造成系統(tǒng)的癱瘓,因此不建議對(duì)系統(tǒng)腳本進(jìn)行修改。 4.4.2 基本腳本編程編寫(xiě)一個(gè)完整可運(yùn)行的Shell腳本需要經(jīng)過(guò)以下的一些步驟。1、建立Shell文件使用文本編輯器程序(如vi)創(chuàng)建腳本程序,腳本文件可以有文件擴(kuò)展名(如“.sh”),也可以不使用擴(kuò)展名,并沒(méi)有強(qiáng)制的要求。2、腳本中應(yīng)包括的內(nèi)容下面以編寫(xiě)hello.sh腳本為例來(lái)說(shuō)明腳本中應(yīng)包括的基本組成部分。(1)腳本運(yùn)行環(huán)境設(shè)置Shell腳本文件的首行內(nèi)容是指定當(dāng)前腳本運(yùn)行需要的Shell環(huán)境,即當(dāng)前腳本需要使用哪個(gè)Shell程序進(jìn)行解釋執(zhí)行。Sh
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 探索化學(xué)奧秘:初中化學(xué)實(shí)驗(yàn)設(shè)計(jì)與探究教學(xué)大綱
- 在線教育平臺(tái)課程研發(fā)手冊(cè)
- 農(nóng)業(yè)項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告怎么寫(xiě)
- 部門(mén)間往來(lái)文書(shū)范例與指南
- 農(nóng)業(yè)現(xiàn)代化智能種植大數(shù)據(jù)分析平臺(tái)
- 三農(nóng)產(chǎn)品冷鏈物流運(yùn)作手冊(cè)
- 基坑支護(hù)工程安全施工方案
- 三農(nóng)產(chǎn)業(yè)發(fā)展規(guī)劃作業(yè)指導(dǎo)書(shū)
- 新能源汽車充電樁前景
- 酒店財(cái)務(wù)管理的技巧和要點(diǎn)作業(yè)指導(dǎo)書(shū)
- 第十八屆“地球小博士”全國(guó)地理知識(shí)科普競(jìng)賽題庫(kù)(附答案)
- 四年級(jí)數(shù)學(xué)下冊(cè)三角形及四邊形的角度計(jì)算培優(yōu)專項(xiàng)練習(xí)(含答案)
- 2023版北京協(xié)和醫(yī)院重癥醫(yī)學(xué)科診療常規(guī)
- 千里江山圖解析課件
- 《現(xiàn)代漢語(yǔ)常用字表》3500個(gè)漢字
- 道路通行能力計(jì)算題
- 經(jīng)濟(jì)學(xué)基礎(chǔ)完整版ppt-全體教學(xué)教程課件最新
- JJF(湘) 09-2018 純水-超純水系統(tǒng)監(jiān)測(cè)儀表(電導(dǎo)率)計(jì)量校準(zhǔn)規(guī)范-(高清現(xiàn)行)
- SJG 82-2020 政府投資學(xué)校建筑室內(nèi)裝修材料空氣污染控制標(biāo)準(zhǔn)-高清現(xiàn)行
- 智慧園區(qū)平臺(tái)用戶操作手冊(cè)
- 精品市政道路施工測(cè)量方法及測(cè)量方案
評(píng)論
0/150
提交評(píng)論