




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Linux基礎(chǔ)與項(xiàng)目實(shí)踐任務(wù)五LinuxShell管理0204Shell腳本編程管道與重定向01Shell簡(jiǎn)介
03在后臺(tái)運(yùn)行程序05Shell腳本編程示例Shell簡(jiǎn)介PART01Shell基礎(chǔ)3
Linux系統(tǒng)中,Shell是系統(tǒng)的一個(gè)用戶(hù)界面,提供了用戶(hù)與內(nèi)核進(jìn)行交互操作的接口(命令解釋器),Shell接收用戶(hù)輸入的命令并把它送入內(nèi)核執(zhí)行,在用戶(hù)與系統(tǒng)之間進(jìn)行交互。Shell在Linux系統(tǒng)中具有極其重要的地位,其所處位置如圖所示。Shell基礎(chǔ)4命令解釋器是Shell最重要的功能。Linux系統(tǒng)中的所有可執(zhí)行文件都可以作為Shell命令來(lái)執(zhí)行。將Linux的可執(zhí)行文件進(jìn)行分類(lèi),如圖所示。類(lèi)別說(shuō)明Linux命令存放在/bin、/sbin目錄下的命令內(nèi)置命令出于效率的考試,將一些常用命令的解釋程序構(gòu)造在Shell內(nèi)部實(shí)用程序存放在/usr/bin、/usr/sbin、、/usr/local/bin、/usr/local/sbin等目錄下的實(shí)用程序用戶(hù)程序用戶(hù)程序經(jīng)過(guò)編譯生成可執(zhí)行文件后可作為Shell命令運(yùn)行Shell腳本由Shell語(yǔ)言編寫(xiě)的批處理文件Shell基礎(chǔ)5Shell命令解釋過(guò)程Shell基礎(chǔ)6Shell的不同版本版本說(shuō)明BourneAgainShell(bash、bsh的擴(kuò)展)bash是大多數(shù)Linux系統(tǒng)的默認(rèn)Shell。bash與bsh完全向后兼容,并且在bash的基礎(chǔ)上增加和增強(qiáng)了很多特性。bash也包含了很多CShell和KomShell中的優(yōu)點(diǎn)。bash有很靈活和強(qiáng)大的編程接口,同時(shí)又有很友好的用戶(hù)界面KomShell(ksh)KomShell(ksh)是UNIX系統(tǒng)上的標(biāo)準(zhǔn)Shell。在Linux環(huán)境下有一個(gè)專(zhuān)門(mén)為L(zhǎng)inux系統(tǒng)編寫(xiě)的KomShell的擴(kuò)展版本,即PublicDomainKomShell(pdksh)tcsh(csh的擴(kuò)展)tcsh是CShell的擴(kuò)展。tcsh與csh完全向后兼容,但它包含了更多的使用戶(hù)感覺(jué)方便的特性,其最大的提高是在命令行編輯和歷史瀏覽方面Shell基礎(chǔ)7常用的Shell元字符及含義元字符含義*代表任意字符串?代表任意字符/代表根目錄或作為路徑間隔符使用\轉(zhuǎn)義字符。當(dāng)命令的參數(shù)要用到保留字時(shí),要在保留字前面加上轉(zhuǎn)義字符\<Enter>續(xù)行符。可以傅續(xù)行符將一個(gè)命令行分寫(xiě)在多行上$變量值置換,如$PATH表示環(huán)境變量PATH的值‘在’...’中間的字符均被當(dāng)作文字處理,指令、文件名、保留字等都不再具有原來(lái)的意義“在“...”中間的字符會(huì)被當(dāng)作文字處理并允許變量轉(zhuǎn)換`命令替換,轉(zhuǎn)換`...`中命令的執(zhí)行結(jié)果<輸入重定向字符>輸出重定向字符|管理字符&后臺(tái)執(zhí)行字符。在一個(gè)命令之后加上字符“&”,該命令就會(huì)以后臺(tái)方式執(zhí)行;分割順序執(zhí)行的多個(gè)命令()在子Shell中執(zhí)行一組命令{}在當(dāng)前Shell中執(zhí)行一組命令!執(zhí)行命令歷史記錄中的命令~代表登錄用戶(hù)的宿主目錄文件及Linux目錄結(jié)構(gòu)8在Linux系統(tǒng)上,文件被看作是字節(jié)序列。這種概念使得所有的系統(tǒng)資源有了統(tǒng)一的標(biāo)識(shí),這些資源包括普通文件或目錄、磁盤(pán)設(shè)備、控制臺(tái)(鍵盤(pán)、顯示器)、打印機(jī)等。對(duì)這些資源的訪問(wèn)和處理都是通過(guò)字節(jié)序列的方式實(shí)現(xiàn)的。Linux系統(tǒng)下的文件類(lèi)型包括:l普通文件(-)l目錄(d)l符號(hào)鏈接(l)l字符設(shè)備文件(c)l塊設(shè)備文件(b)l套接字(s)l命名管理(p)文件及Linux目錄結(jié)構(gòu)9在Linux系統(tǒng)中,把目錄也看作是一種文件,其類(lèi)型為d。在Linux系統(tǒng)中可以使用長(zhǎng)文件方式給文件(包括目錄)命名。這與Windows系統(tǒng)下文件要有后綴名的方式是不同的。比如在Windows系統(tǒng)下有一個(gè)文件readme.txt,我們通常認(rèn)為文件名是“readme”,“.”是一個(gè)分隔符,“txt”是文件類(lèi)型,表明這是一個(gè)文本文件。但Linux系統(tǒng)中一個(gè)文件為readme.txt,表明文件名就是“readme.txt”,其類(lèi)型通過(guò)查看文件詳細(xì)信息獲取。也就是說(shuō)Linux系統(tǒng)中的文件不需要有文件類(lèi)型后綴,在Linux系統(tǒng)中帶文件后綴的命名方式也僅僅是為了使用者看起來(lái)更容易理解而以。在Linux系統(tǒng)中給文件命名時(shí)必須遵循下列規(guī)則:l除了“/”之外,所有的字符都合法。l有些字符最好不用,如空格符、制表符、退格符和字符:?,@#$&()\|;‘
“
<>等。l避免使用+、-或.來(lái)作為普通文件名的第一個(gè)字符。lLinux文件名是大小寫(xiě)敏感的。l以.開(kāi)頭的文件是隱藏的。文件及Linux目錄結(jié)構(gòu)10普通文件就是字節(jié)序列,Linux并沒(méi)有對(duì)其內(nèi)容規(guī)定任何的結(jié)構(gòu)。普通文件可以是程序源代碼(C、C++、Python、Perl等)、可執(zhí)行文件(文件編輯器、數(shù)據(jù)庫(kù)系統(tǒng)、出版工具、繪圖工具等)、圖片、聲音、圖像等。Linux不會(huì)區(qū)別對(duì)待這些文件,只有處理這些文件的應(yīng)用程序才會(huì)根據(jù)文件的內(nèi)容為它們賦予相應(yīng)的含義。目錄文件是由一組目錄項(xiàng)組成,目錄項(xiàng)可以是對(duì)其他文件的指向也可以是其下的子目錄指向。實(shí)際上,一個(gè)文件的名稱(chēng)是存儲(chǔ)在其父目錄中的,而并非同文件內(nèi)容本身存儲(chǔ)在一起。將兩個(gè)文件名(存儲(chǔ)在其父目錄的目錄項(xiàng)中)指向硬盤(pán)上一個(gè)存儲(chǔ)空間,對(duì)兩個(gè)文件中的任何一個(gè)的內(nèi)容進(jìn)行修改都會(huì)影響到另一個(gè)文件,這種鏈接關(guān)系稱(chēng)為硬鏈接。硬鏈接文件實(shí)際上就是在某目錄中創(chuàng)建目錄項(xiàng),從而使不止一個(gè)目錄可以引用到同一個(gè)文件。它可以由ln命令建立。文件及Linux目錄結(jié)構(gòu)11符號(hào)鏈接又稱(chēng)軟鏈接,是指將一個(gè)文件指向另外一個(gè)文件的文件名。這種符號(hào)鏈接的關(guān)系由ln–s命令行建立。我們使用與剛才類(lèi)似的示例進(jìn)行解釋說(shuō)明,首先查看一下目錄中的文件信息。設(shè)備是指計(jì)算機(jī)中的外圍設(shè)備硬件裝置,即除了CPU和內(nèi)存以外的所有設(shè)備。通常,設(shè)備中含有數(shù)據(jù)寄存器或數(shù)據(jù)緩存器、設(shè)備控制器,用于完成設(shè)備同CPU或內(nèi)存的數(shù)據(jù)交換。在Linux系統(tǒng)中,為了屏蔽用戶(hù)對(duì)設(shè)備訪問(wèn)的復(fù)雜化,采用了設(shè)備文件,即可能通過(guò)像訪問(wèn)普通文件一樣的方式對(duì)設(shè)備進(jìn)行讀寫(xiě)訪問(wèn)。設(shè)備文件用來(lái)訪問(wèn)硬件設(shè)備,包括硬盤(pán)、光驅(qū)、打印機(jī)等。每個(gè)硬件設(shè)備至少與一個(gè)設(shè)備文件相關(guān)聯(lián)。設(shè)備文件分為字符設(shè)備(如鍵盤(pán))和塊設(shè)備(如磁盤(pán))。Linux下設(shè)備以文件系統(tǒng)中的設(shè)備文件的形式存在。所有的設(shè)備文件存放在/dev目錄下。文件及Linux目錄結(jié)構(gòu)12常用設(shè)備文件說(shuō)明設(shè)備文件說(shuō)明/dev/sd*SCSI/SAS、PATA/SATA、USB硬件設(shè)備,如sda1表示第1塊硬盤(pán)的第1個(gè)分區(qū)/dev/sr0光驅(qū)設(shè)備/dev/console系統(tǒng)控制臺(tái)/dev/tty*本地終端設(shè)備/dev/pts/*偽終端設(shè)備/dev/ppp*ppp設(shè)備。PPP協(xié)議設(shè)備,用于傳統(tǒng)的撥號(hào)上網(wǎng)/dev/lp*表示并口設(shè)備,如lp0表示第一個(gè)并口設(shè)備,lp1表示第2個(gè)并口設(shè)備/dev/null空設(shè)備。所有寫(xiě)入它的內(nèi)容都會(huì)丟失,通常用于屏蔽命令行輸出/dev/zero零設(shè)備。可以產(chǎn)生連續(xù)不斷的二進(jìn)制零流,通常用于創(chuàng)建指定長(zhǎng)度的空文件文件及Linux目錄結(jié)構(gòu)13套接字和命名管道是Linux環(huán)境下實(shí)現(xiàn)進(jìn)程間通信(IPC)的機(jī)制。命名管道(FIFO)文件允許運(yùn)行在同一臺(tái)計(jì)算機(jī)上的兩個(gè)進(jìn)程之間進(jìn)行通信。套接字(socket)允許運(yùn)行在不同計(jì)算機(jī)上的進(jìn)程之間相互通信。套接字和命名管道
通常是在進(jìn)程運(yùn)行時(shí)創(chuàng)建或刪除的,一般無(wú)需系統(tǒng)管理員干預(yù)。文件及Linux目錄結(jié)構(gòu)14由FHS所規(guī)定的Linux文件系統(tǒng)布局目錄名內(nèi)容說(shuō)明bin存放二進(jìn)制的可執(zhí)行程序boot存放用于系統(tǒng)引導(dǎo)時(shí)使用的各種文件dev用于存放設(shè)備文件,用戶(hù)可以通過(guò)這些文件訪問(wèn)外部設(shè)備etc存放系統(tǒng)的配置文件home存放所有用戶(hù)文件的根目錄,有一個(gè)用戶(hù)在該目錄下就有一個(gè)與該用戶(hù)名相對(duì)應(yīng)的子目錄,當(dāng)用戶(hù)登錄時(shí)就進(jìn)入其用戶(hù)名對(duì)應(yīng)的子目錄lib/lib64存放根文件系統(tǒng)中的程序運(yùn)行所需要的共享庫(kù)及內(nèi)核模塊lost+found存放一些系統(tǒng)檢查結(jié)果,發(fā)現(xiàn)不合法的文件或數(shù)據(jù)都存放在這里。通常此目錄是空的,除非硬盤(pán)遭受了不明的損壞mnt臨時(shí)文件系統(tǒng)的掛載點(diǎn)目錄media即插即用型存儲(chǔ)設(shè)備的掛載點(diǎn)自動(dòng)在這個(gè)目錄下創(chuàng)那家,如CD/DVD等opt第三方軟件的存放目錄proc是一個(gè)虛擬文件系統(tǒng),存放當(dāng)前內(nèi)存的映射,主要用于在不重啟機(jī)器的情況下管理內(nèi)核root超級(jí)用戶(hù)目錄sbin類(lèi)似/bin目錄,也存放二進(jìn)制可執(zhí)行文件,但只有root才能訪問(wèn)srv系統(tǒng)對(duì)外提供服務(wù)的目錄,如WEB虛擬主機(jī)等tmp用于放置各種臨時(shí)文件usr用于存放系統(tǒng)應(yīng)用程序var用于存放需要隨時(shí)改變的文件,如系統(tǒng)日志、脫機(jī)工作目錄等Shell中命令的執(zhí)行15
在Shell中輸入命令時(shí),Linux的tty設(shè)備驅(qū)動(dòng)程序?qū)z查每個(gè)字符,來(lái)確定是否要立即采取動(dòng)作。Shell中命令的執(zhí)行16查找命令當(dāng)在命令行上輸入絕對(duì)路徑名時(shí)(即輸入至少包含一條斜杠的路徑名),shell將在指定目錄下查找具有執(zhí)行權(quán)限的對(duì)應(yīng)文件。例如,輸入命令/bin/ls,shell將查找/bin目錄下具有執(zhí)行權(quán)限且名為ls的文件。當(dāng)輸入的是一個(gè)簡(jiǎn)單文件名時(shí),shell在一組目錄中查找與該文件名相匹配且具有執(zhí)行權(quán)限的對(duì)應(yīng)文件。shell并不是在所有目錄下搜索,而只在PATH變量設(shè)定的路徑下搜索。執(zhí)行命令行如果shell找到了與命令行上的命令具有相同名字的可執(zhí)行文件,那么shell將啟動(dòng)一個(gè)新的進(jìn)程,并將命令行上的命令名、參數(shù)、選項(xiàng)傳遞給程序(可執(zhí)行文件)。當(dāng)命令執(zhí)行時(shí),shell將等待進(jìn)程的結(jié)束,這時(shí)shell屬于非活躍狀態(tài),稱(chēng)為休眠(sleep)狀態(tài)。當(dāng)程序執(zhí)行完畢,就將它的退出狀態(tài)傳遞給shell,這樣shell就返回到活躍狀態(tài)(被喚醒),顯示提示符,等待下一個(gè)命令的輸入。管道與重定向PART02標(biāo)準(zhǔn)輸入輸出18
shell命令的執(zhí)行會(huì)涉及到輸入和輸出,標(biāo)準(zhǔn)輸入(standardinput)是程序信息的來(lái)源。標(biāo)準(zhǔn)輸出(standardoutput)是指程序輸出信息(如文本)的地方。對(duì)一個(gè)運(yùn)行的程序來(lái)說(shuō),除了具有標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出外,通常還有錯(cuò)誤消息輸出,稱(chēng)為標(biāo)準(zhǔn)錯(cuò)誤輸出(standarderror)。標(biāo)準(zhǔn)輸入STDIN為鍵盤(pán),文件描述符為0,標(biāo)準(zhǔn)輸出STDOUT為屏幕,文件描述符為1,錯(cuò)誤輸出STDERR也為屏幕,文件描述符為2,如圖所示。在Linux系統(tǒng)中,標(biāo)準(zhǔn)輸出設(shè)備為鍵盤(pán),標(biāo)準(zhǔn)輸出設(shè)備是屏幕。輸入輸出重定向19在進(jìn)行應(yīng)用時(shí),有時(shí)我們需要把文件作為輸入,或者把命令執(zhí)行后的結(jié)果輸出到文件而不是屏幕,這就要用到輸入輸出重定向。相對(duì)于輸入的重定向,使用輸出重定向的頻率更高,輸出重定向又分為標(biāo)準(zhǔn)輸出重定向和錯(cuò)誤輸出重定向兩種不同的技術(shù),以及清空寫(xiě)入與追加寫(xiě)入兩種模式。輸入重定向符號(hào)及作用符號(hào)作用命令<文件將文件作為命令的標(biāo)準(zhǔn)輸入命令<<分界符從標(biāo)準(zhǔn)輸入中讀入,直到輸入分界符才停止命令<文件1>文件2將文件1作為命令的輸入并將結(jié)果輸出到文件2輸出重定向符號(hào)及作用符號(hào)作用命令>文件將標(biāo)準(zhǔn)輸出重定向到一個(gè)文件中(清空原有文件的數(shù)據(jù))命令2>文件將錯(cuò)誤輸出重定向到一個(gè)文件中(清空原有文件的數(shù)據(jù))命令>>文件將標(biāo)準(zhǔn)輸出重定向到一個(gè)文件中(追加到原有內(nèi)容的后面)命令2>>文件將錯(cuò)誤輸出重定向到一個(gè)文件中(追加到原有內(nèi)容的后面)命令>>文件2>&1或命令&>>文件將標(biāo)準(zhǔn)輸出與錯(cuò)誤輸出共同寫(xiě)入到文件中(追加到原有內(nèi)容的后面)管道命令20Linux系統(tǒng)中,可以將兩個(gè)或多個(gè)命令連接到一起,把前一個(gè)命令的輸出作為后一個(gè)命令的輸入,以這種方式連接的兩個(gè)或多個(gè)命令形成了管道。管道使用“|”連接多個(gè)命令,稱(chēng)為管理符,語(yǔ)法格式如下:command1|command2command1|command2[|commandN...]使用了管道的命令有如下特點(diǎn):命令的語(yǔ)法緊湊并且使用簡(jiǎn)單。通過(guò)使用管道,可以將多個(gè)命令聯(lián)系在一起完成復(fù)雜任務(wù)。在后臺(tái)運(yùn)行程序PART03在后臺(tái)運(yùn)行程序22
操作系統(tǒng)中的命令可以在前臺(tái)執(zhí)行,也可以在后臺(tái)執(zhí)行。當(dāng)在前臺(tái)執(zhí)行命令時(shí),shell將一直等到命令執(zhí)行完畢,才會(huì)給出提示符讓用戶(hù)可以繼續(xù)輸入下一條命令。當(dāng)使用后臺(tái)命令時(shí),不必等待該命令完成,用戶(hù)可以直接輸入另一個(gè)命令。我們前面舉的例子中,所有命令都是在前臺(tái)完成的。
作業(yè)(job)是指由一個(gè)或者多個(gè)命令組成的序列。前臺(tái)只能有一個(gè)作業(yè)在執(zhí)行,后臺(tái)可以有多個(gè)作業(yè)同時(shí)運(yùn)行。同一時(shí)間執(zhí)行多個(gè)作業(yè)是操作系統(tǒng)的重要特性,對(duì)于運(yùn)行時(shí)間較長(zhǎng)又不需要監(jiān)視的任務(wù)來(lái),在后臺(tái)運(yùn)行是提升系統(tǒng)效率的重要手段。在后臺(tái)運(yùn)行程序23在命令行的末尾輸入符號(hào)“&”后回車(chē),那么shell將在后臺(tái)運(yùn)行這個(gè)作業(yè)。同時(shí),shell會(huì)給這個(gè)作業(yè)分配一個(gè)作業(yè)編號(hào),并將其顯示在方括號(hào)內(nèi)。在作業(yè)編號(hào)之后,shell將顯示進(jìn)程標(biāo)識(shí)號(hào)(processidentification,PID),該號(hào)是由操作系統(tǒng)分配的。然后shell將顯示命令輸入提示符,這時(shí)用戶(hù)可以輸入命令。當(dāng)作業(yè)運(yùn)行結(jié)束后,shell將顯示一個(gè)消息,這個(gè)消息的內(nèi)容為:已完成作業(yè)的作業(yè)編號(hào)和運(yùn)行該作業(yè)的命令行。Shell腳本編程PART04Shell腳本簡(jiǎn)介25Shell除了是命令解釋器之外還是一種編程語(yǔ)言,用Shell編寫(xiě)的程序類(lèi)型于DOS下的批處理程序。用戶(hù)可以在文件中存放一系列的命令,通常將Shell編寫(xiě)的程序稱(chēng)為Shell腳本或Shell程序。
將命令、變量和流程控制有機(jī)地結(jié)合起來(lái)將會(huì)得到一個(gè)功能強(qiáng)大的編程工具。Shell腳本語(yǔ)言非常擅長(zhǎng)處理文本類(lèi)型的數(shù)據(jù),由于Linux系統(tǒng)中的所有配置文件都是純文本的,所以Shell腳本語(yǔ)言在管理Linux系統(tǒng)中發(fā)揮了巨大的作用。Shell腳本簡(jiǎn)介26Shell腳本是以行為單位的,在執(zhí)行腳本的時(shí)候會(huì)將其分解成一行一行依次執(zhí)行。Shell腳本中所包含的成分主要有注釋、命令、Shell變量和結(jié)構(gòu)控制語(yǔ)句。l注釋?zhuān)河糜趯?duì)腳本進(jìn)行解釋和說(shuō)明,在注釋行的前面要加上符號(hào)#,這樣在執(zhí)行腳本的時(shí)候Shell就不會(huì)對(duì)該行進(jìn)行解釋。l命令:在Shell腳本中可以出現(xiàn)任何在交互方式下能使用的命令。l變量:Shell支持字符串變量和整型變量。l結(jié)構(gòu)控制語(yǔ)句:用于編寫(xiě)復(fù)雜腳本的流程控制語(yǔ)句。Shell腳本簡(jiǎn)介27用戶(hù)可以使用任何文本編輯器編輯Shell腳本文件,如nano、vim、gedit等。對(duì)Shell腳本文件的調(diào)用可以采用幾種方式。(1)在子Shell中執(zhí)行。當(dāng)執(zhí)行一個(gè)腳本文件時(shí),Shell就會(huì)產(chǎn)生一個(gè)子Shell(即一個(gè)子進(jìn)程)去執(zhí)行命令文件中的命令。因此,腳本文件中的變量值不能傳遞到當(dāng)前Shell(即父Shell)。(2)在當(dāng)前Shell中執(zhí)行為了使得腳本文件中的變量值傳遞到當(dāng)前Shell,必須在命令文件名前面加source或“./”命令。source和“.”命令的功能是在當(dāng)前Shell中執(zhí)行腳本文件中的命令,而不是產(chǎn)生一個(gè)子Shell來(lái)執(zhí)行腳本文件中的命令。即:$sourcescript-file或$./script-fileShell腳本簡(jiǎn)介28Shell腳本的編碼規(guī)范一個(gè)bash腳本的正確的起始部分應(yīng)該以#!開(kāi)頭,指明使用何種Shell解析本腳本。#!/bin/bash或#!/usr/bin/envbash良好的Shell編碼規(guī)范還要求以注釋形式說(shuō)明如下的內(nèi)容。#腳本名稱(chēng)#腳本功能#作者及聯(lián)系方式#版本更新記錄#版權(quán)說(shuō)明#對(duì)算法做簡(jiǎn)要說(shuō)明(如果是復(fù)雜腳本)Shell變量29變量的類(lèi)型Shell變量大致可以分為以下3類(lèi)。l內(nèi)部變量:由系統(tǒng)提供,用戶(hù)只能使用不能修改。l環(huán)境變量:這些變量決定了用戶(hù)工作的環(huán)境,不需要用戶(hù)定義,可以直接在Shell中使用,其中某些變量用戶(hù)可以修改。l用戶(hù)變量:由用戶(hù)建立和修改,也稱(chēng)用戶(hù)自定義變量。在Shell腳本編寫(xiě)中會(huì)經(jīng)常用到。Shell支持具有字符串值的變量。Shell變量不需要專(zhuān)門(mén)的定義和初始化語(yǔ)句。一個(gè)沒(méi)有初始化的Shell變量被認(rèn)定為是空字符。通常通過(guò)賦值語(yǔ)句完成變量說(shuō)明并予以賦值,并且可以給一個(gè)變量多次賦值以改變其值。在Shell中,變量的賦值使用如下語(yǔ)法格式:
name=stringShell變量30變量的作用域Shell變量有其規(guī)定的作用范圍。Shell變量分為局部變量和全局變量。所有自定義變量默認(rèn)都是局部變量;環(huán)境變量是全局變量。l局部變量的作用范圍僅限制在其命令行所在的Shell或當(dāng)前Shell腳本執(zhí)行過(guò)程中。l全局變量的作用范圍則包括定義該變量的Shell及其所有子Shell。可以使用export內(nèi)置命令將局部變量設(shè)置為全局變量,export的常用格式為://將指定的一個(gè)或多個(gè)局部變量設(shè)置為全局蠻export<變量名1>[<變量名2>…]//將指定的一個(gè)或多個(gè)全局變量設(shè)置為局部變量export–n<變量名1>[<變量名2>…]//直接對(duì)一個(gè)或多個(gè)全局變量賦值export<變量名1=值1>[<變量名2=值2>…]Shell變量31環(huán)境變量定義Shell的運(yùn)行環(huán)境,保證Shell命令的正確執(zhí)行。Shell用環(huán)境變量來(lái)確定查找路徑、注冊(cè)目錄、終端類(lèi)型、終端名稱(chēng)、用戶(hù)名等。所有環(huán)境變量都是全局變量(即可以傳遞給子Shell),并可以由用戶(hù)重新設(shè)置。下表5中列出了一些系統(tǒng)中常用的環(huán)境變量。環(huán)境變量說(shuō)明環(huán)境變量說(shuō)明BASHbash的完整路徑名PATHbash尋找可執(zhí)行文件的搜索路徑EDITOR應(yīng)用程序中默認(rèn)使用的編輯器ENVLinux查找配置文件的路徑HISTFILE用于儲(chǔ)存歷史命令的文件PS1命令行的一級(jí)提示符HISTSIZE歷史命令列表的大小PS2命令行的二級(jí)提示符HOME當(dāng)前用戶(hù)的宿主目錄PWD當(dāng)前工作目錄OLDPWD前一個(gè)工作目錄IFS用于分割命令行參數(shù)的分隔符USER當(dāng)前用戶(hù)名SECONDS當(dāng)前Shell開(kāi)始后所流逝的秒數(shù)UID當(dāng)前用戶(hù)的UIDLANG當(dāng)前用戶(hù)的主語(yǔ)言環(huán)境TERM當(dāng)前用戶(hù)的終端類(lèi)型
Shell變量32用戶(hù)并不需要每次登錄后都對(duì)各種環(huán)境變量進(jìn)行手工設(shè)置,通過(guò)環(huán)境設(shè)置文件,用戶(hù)的工作環(huán)境的設(shè)置可以在登錄的時(shí)候自動(dòng)由系統(tǒng)來(lái)完成。環(huán)境設(shè)置文件有兩種,一種是系統(tǒng)環(huán)境設(shè)置文件,另一種是個(gè)人環(huán)境設(shè)置文件。(1)系統(tǒng)中的用戶(hù)工作環(huán)境設(shè)置文件(對(duì)所有用戶(hù)均生效)l登錄環(huán)境設(shè)置文件:/etc/profilel非登錄環(huán)境設(shè)置文件:/etc/bashrc(2)用戶(hù)設(shè)置的環(huán)境設(shè)置文件(只對(duì)用戶(hù)自身生效)l登錄環(huán)境設(shè)置文件:$HOME/.bash_profilel非登錄環(huán)境設(shè)置文件:$HOME/.bashrcShell腳本跟蹤與調(diào)試33使用bash參數(shù)調(diào)試腳本在bash命令行中使用參數(shù),可以在腳本運(yùn)行之前檢查其語(yǔ)法是否正確,也可以在腳本運(yùn)行時(shí)跟蹤其運(yùn)行過(guò)程。下表中列出了使用bash參數(shù)調(diào)試腳本的命令。命令說(shuō)明bash–n<script_name>對(duì)腳本進(jìn)行語(yǔ)法檢查,通常在執(zhí)行腳本之前先檢查其語(yǔ)法是否正確bash–v<script_name>顯示腳本中每個(gè)原始命令行及其執(zhí)行結(jié)果bash–x<script_name>以調(diào)試模式執(zhí)行腳本。對(duì)腳本中每條命令的處理過(guò)程為:先執(zhí)行替換,然后顯示,再執(zhí)行命令文件測(cè)試34在bash的各種流程控制結(jié)構(gòu)中通常要進(jìn)行各種測(cè)試,然后再根據(jù)測(cè)試結(jié)果執(zhí)行不同的操作。測(cè)試語(yǔ)句語(yǔ)法如下:格式1:test<測(cè)試表達(dá)式>格式2:[<測(cè)試表達(dá)式>]格式3:[[<測(cè)試表達(dá)式>]]文件測(cè)試操作符操作符說(shuō)明操作符說(shuō)明-efile文件是否存在-xfile是否為可執(zhí)行文件-ffile是否為普通文件-Ofile測(cè)試者是否為文件的屬主-dfile是否
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 白水泥行業(yè)的產(chǎn)品設(shè)計(jì)國(guó)際化趨勢(shì)
- 科技企業(yè)如何應(yīng)對(duì)復(fù)雜的知識(shí)產(chǎn)權(quán)環(huán)境
- 科技引領(lǐng)未來(lái)移動(dòng)支付在商業(yè)地產(chǎn)的應(yīng)用研究
- 科技助力下的綠色餐飲創(chuàng)新實(shí)踐案例分享
- 現(xiàn)代保安公司經(jīng)營(yíng)模式創(chuàng)新與教育領(lǐng)域融合研究
- 電競(jìng)產(chǎn)業(yè)未來(lái)創(chuàng)新發(fā)展方向研究報(bào)告
- 2025至2030年中國(guó)泥炭粉末數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2024年企業(yè)招聘呼和浩特旭陽(yáng)中燃能源有限公司招聘筆試真題
- 2024年空港數(shù)字城市開(kāi)發(fā)建設(shè)有限公司社會(huì)招聘筆試真題
- 2025至2030年中國(guó)氧化鐵黃顏料數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 感應(yīng)加熱操作規(guī)程
- 最新小學(xué)二年級(jí)口算及豎式計(jì)算練習(xí)題
- 腦病科中醫(yī)疾病護(hù)理常規(guī)(精)
- 生產(chǎn)與運(yùn)作管理-陳榮秋
- 病理生理學(xué)教學(xué)病生6休克課件
- 金雞冠的公雞繪本課件
- 日影朝向及長(zhǎng)短
- 沙盤(pán)游戲治療(課堂PPT)
- (完整版)學(xué)生的自我評(píng)價(jià)的表格
- 樸素貝葉斯分類(lèi)器完整
- 教育系統(tǒng)績(jī)效工資分配方案(共6頁(yè))
評(píng)論
0/150
提交評(píng)論