




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Shell本身是一個(gè)用C語(yǔ)言編寫(xiě)的程序,它是用戶(hù)使用語(yǔ)言,又是一種程序設(shè)計(jì)語(yǔ)言。作為命令語(yǔ)言,Linux的橋梁。Shell既是一種命令它交互式地解釋和執(zhí)行用戶(hù)輸入的命令;作為程序設(shè)計(jì)語(yǔ)言,它定義了各種變量和參數(shù),并提供了許多在高級(jí)語(yǔ)言中才具有的控制結(jié)構(gòu),包括循環(huán)和分支。它雖然不是Linux系統(tǒng)核心的一部分,但它調(diào)用了系統(tǒng)核心的大部分功能來(lái)執(zhí)行程序、建立文件并以并行的方式協(xié)調(diào)各個(gè)程序的運(yùn)行。因此,對(duì)于用戶(hù)來(lái)說(shuō),shell是最重要的實(shí)用程序,深入了解和熟練掌握shell的特性極其使用方法,是用好Linux系統(tǒng)的關(guān)鍵。可以說(shuō),shell使用的熟練程度反映了用戶(hù)對(duì)Linux使用的熟練程度。一、什么是s
2、hell當(dāng)一個(gè)用戶(hù)登錄Linux系統(tǒng)之后,系統(tǒng)初始化程序init就為每一個(gè)用戶(hù)運(yùn)行一個(gè)稱(chēng)為shell(外殼)0000那么,shell是什么呢?確切一點(diǎn)說(shuō),shell就是一個(gè)命令行解釋器,它為用戶(hù)提供了一個(gè)向Linux內(nèi)核發(fā)送請(qǐng)求以便運(yùn)行程序的界面系統(tǒng)級(jí)程序,用戶(hù)可以用shell來(lái)啟動(dòng)、掛起、停止甚至是編寫(xiě)一些程序。當(dāng)用戶(hù)使用Linux時(shí)是通過(guò)命令來(lái)完成所需工作0。一個(gè)命令就是用戶(hù)和shell之間對(duì)話(huà)的一個(gè)基本單位,它是由多個(gè)字符組成并以換行結(jié)束的字符串。shell解釋用戶(hù)輸入0命令,就象DOS里0所做的一樣,所不同的是,在DOS中,只有一個(gè),而在Linux下比較流行的shell0000,每個(gè)s
3、hell都各有千秋。一般的Linux系統(tǒng)都將bash作為默認(rèn)的shellO二、幾種流行0shell00000shell0ash、bash、ksh、csh、zsh等,你可以用下面的命令來(lái)查看你自己的shell類(lèi)型:#echo$SHELL$SHELL是一個(gè)環(huán)境變量,它記錄用戶(hù)所使用0shell類(lèi)型。你可以用命令:#shell-name來(lái)轉(zhuǎn)換到別的shell,DOshell-name是你想要嘗試使用的shell0名稱(chēng),如ash等。這個(gè)命令為用戶(hù)又啟動(dòng)了一個(gè)shell,這個(gè)shell在最初登錄的那個(gè)shell之后,稱(chēng)為下級(jí)的shell或子shell。使用命令:$exit可以退出這個(gè)子shell。000
4、00shell0原因在于它們各自都有自己的特點(diǎn),下面作一個(gè)簡(jiǎn)單的介紹:ashashshell是由KennethAlmquist編寫(xiě)0,Linux中占用系統(tǒng)資源最少0一個(gè)小shell,它只包含24個(gè)內(nèi)部命令,因而00起來(lái)很不方便。2.bashbash是Linux系統(tǒng)默認(rèn)000shell,它由BrianFox和ChetRamey共同完成,是BourneAgainShell0縮寫(xiě),內(nèi)部命令一共04000Linux00它作為默認(rèn)0shell是因?yàn)樗兄T如以下0特色:000000DOS下面的doskey0功能,用方向鍵查閱和快速輸入并修改命令。自動(dòng)通過(guò)查找匹配0方式給出以某字符串開(kāi)頭0命令。包含了自身0
5、幫助功能,你只要在提示符下面鍵入help就可以得到相關(guān)0幫助。kshksh是Kornshell0縮寫(xiě),由EricGisin編寫(xiě),共有42條內(nèi)部命令。該shell最大0優(yōu)點(diǎn)是幾乎和商業(yè)發(fā)行版0ksh完全兼容,這樣就可以在不0花錢(qián)購(gòu)買(mǎi)商業(yè)版本0情況下嘗試商業(yè)版本0性能了。cshcsh是Linux比較大的內(nèi)核,它由以WilliamJoy為代表的共計(jì)47位作者編成,共有52個(gè)內(nèi)部命令。該shell其實(shí)是指向/bin/tcsh這樣的一個(gè)shell,也就是說(shuō),csh其實(shí)就是tcsh。zchzch是Linux最大的shell之一,由PaulFalstad00,0084個(gè)內(nèi)部命令。如果只是一般的用途,是沒(méi)有必
6、要安裝這樣的shell的。3.shell程序設(shè)計(jì)(基礎(chǔ)部分)其實(shí)作為命令語(yǔ)言交互式地解釋和執(zhí)行用戶(hù)輸入的命令只是shell0000000,shell還可以用來(lái)進(jìn)行程序設(shè)計(jì),它提供了定義變量和參數(shù)的手段以及豐富的程序控制結(jié)構(gòu)。使用shell編程類(lèi)似于DOS中的批處理文件,稱(chēng)為shellscript,又叫shell程序或shell命令文件。l.shell基本語(yǔ)法shell的基本語(yǔ)法主要就是如何輸入命令運(yùn)行程序以及如何在程序之間通過(guò)shell的一些參數(shù)提供便利手段來(lái)進(jìn)行通訊。(1)輸入輸出重定向在Linux中,每一個(gè)進(jìn)程都有三個(gè)特殊的文件描述指針:標(biāo)準(zhǔn)輸入(standardinput,文件描述指針為
7、0)、標(biāo)準(zhǔn)輸出(standardoutput,文件描述指針為1)、標(biāo)準(zhǔn)錯(cuò)誤輸出(standarderror,文件描述指針為2)。這三個(gè)特殊的文件描述指針使進(jìn)程在一般情況下接收標(biāo)準(zhǔn)輸入終端的輸入,同時(shí)由標(biāo)準(zhǔn)終端來(lái)顯示輸出,Linux同時(shí)也向使用者提供可以使用普通的文件或管道來(lái)取代這些標(biāo)準(zhǔn)輸入輸出設(shè)備。在shell中,使用者可以利用“”和“”。(2)用戶(hù)定義的變量用戶(hù)可以按照下面的語(yǔ)法規(guī)則定義自己的變量:變量名=變量值要注意的一點(diǎn)是,在定義變量時(shí),變量名前不應(yīng)加符號(hào)“$”,在引用變量的內(nèi)容時(shí)則應(yīng)在變量名前加“$”;在給變量賦值時(shí),等號(hào)兩邊一定不能留空格,若變量中本身就包含了空格,則整個(gè)字符串都要用
8、雙引號(hào)括起來(lái)。在編寫(xiě)shellODD,為了使變量名和命令名相區(qū)別,示。建議所有的變量名都用大寫(xiě)字母來(lái)表有時(shí)我們想要在說(shuō)明一個(gè)變量并對(duì)它設(shè)定為一個(gè)特定值后就不在改變它的值,的命令來(lái)保證一個(gè)變量的只讀性:readly變量名在任何時(shí)候,建立的變量都只是當(dāng)前shell的局部變量,這可以用下面所以不能被shell運(yùn)行的其他命令或shell程序所利用,其格式為:export命令可以將一局部變量提供給shell執(zhí)行的其他命令使用,export變量名也可以在給變量賦值的同時(shí)使用export變量名=變量值使用export說(shuō)明的變量,在(3)位置參數(shù)位置參數(shù)是一種在調(diào)用輸入的參數(shù)。位置參數(shù)之間用空格分隔,expo
9、rt命令:shell以后運(yùn)行的所有命令或程序中都可以訪(fǎng)問(wèn)到。shell程序的命令行中按照各自的位置決定的變量,shell取第一個(gè)位置參數(shù)替換程序文件中的二個(gè)替換$2,依次類(lèi)推。$0是一個(gè)特殊的變量,所以,$0不是一個(gè)位置參數(shù),在顯示當(dāng)前所有的位置參數(shù)時(shí)是不包括(4)預(yù)定義變量它的內(nèi)容是當(dāng)前這個(gè)預(yù)定義變量和環(huán)境變量相類(lèi)似,也是在shell一開(kāi)始時(shí)就定義了的變量,是在程序名之后$1,第shell程序的文件名,$0的。所不同的是,用戶(hù)只能根據(jù)shell的定義來(lái)使用這些變量,而不能重定義它。所有預(yù)定義變量都是由$符和另一個(gè)符號(hào)組成的,常用的shell預(yù)定義變量有:$#:位置參數(shù)的數(shù)量$*:所有位置參數(shù)
10、的內(nèi)容$?:命令執(zhí)行后返回的狀態(tài)$:當(dāng)前進(jìn)程的進(jìn)程號(hào)$!:后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程號(hào)$0:當(dāng)前執(zhí)行的進(jìn)程名其中,“$?”用于檢查上一個(gè)命令執(zhí)行是否正確令正確執(zhí)行,任何非0值表示命令出錯(cuò))。“$”變量最常見(jiàn)的用途是用作臨時(shí)文件的名字以保證臨時(shí)文件不會(huì)重復(fù)。(5)參數(shù)置換的變量shell提供了參數(shù)置換能力以便用戶(hù)可以根據(jù)不同的條件來(lái)給變量賦不同的值。(在Linux中,命令退出狀態(tài)為0表示該命參數(shù)置換的變量有四種,這些變量通常與某一個(gè)位置參數(shù)相聯(lián)系,決定變量的取值,它們的語(yǔ)法和功能分別如下。a.變量二$參數(shù)word:如果設(shè)置了參數(shù),即這種變量的值等于某一個(gè)參數(shù)的值,如果該參數(shù)沒(méi)有設(shè)置,則變量就等于根據(jù)
11、指定的位置參數(shù)是否已經(jīng)設(shè)置類(lèi)則用參數(shù)的值置換變量的值,否則用word置換。word的值。b.變量=$參數(shù)=word:如果設(shè)置了參數(shù),則用參數(shù)的值置換變量的值,否則把變量設(shè)置成word然后再用word替換參數(shù)的值。注意,位置參數(shù)不能用于這種方式,因?yàn)樵趕hell程序中不能為位置參數(shù)賦值。c.變量=$參數(shù)?word:如果設(shè)置了參數(shù),則用參數(shù)的值置換變量的值,否則就顯示并從shell中退出,如果省略了word,則顯示標(biāo)準(zhǔn)信息。這種變量要求一定等于某一個(gè)參word數(shù)的值,如果該參數(shù)沒(méi)有設(shè)置,就顯示一個(gè)信息,然后退出,因此這種方式常用于出錯(cuò)指示。d.變量=$參數(shù)+word:如果設(shè)置了參數(shù),則用word置
12、換變量,否則不進(jìn)行置換。所有這四種形式中的“參數(shù)”既可以是位置參數(shù),也可以是另一個(gè)變量,只是用位置參數(shù)的情況比較多。shell提供了用來(lái)控制程序執(zhí)行流程的命令,包括條件分支四、shell程序設(shè)計(jì)的流程控制和其他高級(jí)程序設(shè)計(jì)語(yǔ)言一樣,和循環(huán)結(jié)構(gòu),用戶(hù)可以用這些命令建立非常復(fù)雜的程序。與傳統(tǒng)的語(yǔ)言不同的是,shell用于指定條件值的不是布爾表達(dá)式而是命令和字符串。1.test測(cè)試命令test命令用于檢查某個(gè)條件是否成立,它可以進(jìn)行數(shù)值、字符和文件三個(gè)方面的測(cè)試,其測(cè)試符和相應(yīng)的功能分別如下:(1)數(shù)值測(cè)試:-eq:等于則為真-ne:不等于則為真gt:大于則為真-ge:大于等于則為真-lt:小于則為
13、真-le:小于等于則為真(2)字符串測(cè)試:=:等于則為真!=:不相等則為真-z字符串:字符串長(zhǎng)度偽則為真-n字符串:字符串長(zhǎng)度不偽則為真(3)文件測(cè)試:-e文件名:如果文件存在則為真-r文件名:如果文件存在且可讀則為真-w文件名:如果文件存在且可寫(xiě)則為真-x文件名:如果文件存在且可執(zhí)行則為真-s文件名:如果文件存在且至少有一個(gè)字符則為真-d文件名:如果文件存在且為目錄則為真-f文件名:如果文件存在且為普通文件則為真-c文件名:如果文件存在且為字符型特殊文件則為真-b文件名:如果文件存在且為塊特殊文件則為真另外,Linux還提供了與(“!”)、或(“0)、非(“a”)三個(gè)邏輯操作符用于將測(cè)試條件
14、連接起來(lái),其優(yōu)先級(jí)為:“!”最高,“a”次之,“o”最低。同時(shí),bash也能完成簡(jiǎn)單的算術(shù)運(yùn)算,格式如下:$expression例如:var1=2var2=$var1*10+1則:var2的值為21。2.if條件語(yǔ)句shell程序中的條件分支是通過(guò)if條件語(yǔ)句來(lái)實(shí)現(xiàn)的,其一般格式為:if條件命令串then條件為真時(shí)的命令串else條件為假時(shí)的命令串fi3.for循環(huán)賦給變量的幾個(gè)數(shù)值既可以在程序內(nèi)for循環(huán)的一般格式為:var,則在in之后給出的數(shù)值將順序var的取值將是位置參數(shù)。對(duì)變量的While循環(huán)的一般格式為:for循環(huán)對(duì)一個(gè)變量的可能的值都執(zhí)行一個(gè)命令序列。以數(shù)值列表的形式提供,也可以
15、在程序以外以位置參數(shù)的形式提供。for變量名in數(shù)值列表do若干個(gè)命令行done變量名可以是用戶(hù)選擇的任何字符串,如果變量名是替換循環(huán)命令列表中的$var。如果省略了in,則變量每一個(gè)可能的賦值都將執(zhí)行do和done之間的命令列表。4.while和until循環(huán)while和until命令都是用命令的返回狀態(tài)值來(lái)控制循環(huán)的。while若干個(gè)命令行1do若干個(gè)命令行2done只要while的“若干個(gè)命令行do.done之間的“若干個(gè)命令行1”中最后一個(gè)命令的返回狀態(tài)為真,2”。while循環(huán)就繼續(xù)執(zhí)行until命令是另一種循環(huán)結(jié)構(gòu),它和while命令相似,其格式如下:until若干個(gè)命令行1do若
16、干個(gè)命令行2doneuntil循環(huán)和while循環(huán)的區(qū)別在于:while循環(huán)在條件為真時(shí)繼續(xù)執(zhí)行循環(huán),而until則是在條件為假時(shí)繼續(xù)執(zhí)行循環(huán)。ShellDODOtrue和false兩條命令用于建立無(wú)限循環(huán)結(jié)構(gòu)的需要,它們的返回狀態(tài)分別是總為0或總為非0case條件選擇辻條件語(yǔ)句用于在兩個(gè)選項(xiàng)中選定一項(xiàng),而case條件選擇為用戶(hù)提供了根據(jù)字符串或變量的值從多個(gè)選項(xiàng)中選擇一項(xiàng)的方法,其格式如下:casestringinexp-1)若干個(gè)命令行1;exp-2)若干個(gè)命令行2;*)其他命令行esacshell通過(guò)計(jì)算字符串string的值,將其結(jié)果依次和表達(dá)式exp-1、exp-2等進(jìn)行比較,直到找
17、到一個(gè)匹配的表達(dá)式為止,如果找到了匹配項(xiàng)則執(zhí)行它下面的命令直到遇到一對(duì)分號(hào)(;)為止。在case表達(dá)式中也可以使用shell的通配符(“*”、“?”、“”)。通常用“*”作為case命令的最后表達(dá)式以便使在前面找不到任何相應(yīng)的匹配項(xiàng)時(shí)執(zhí)行“其他命令行”的命令。無(wú)條件控制語(yǔ)句break和continuebreak用于立即終止當(dāng)前循環(huán)的執(zhí)行,而contiune用于不執(zhí)行循環(huán)中后面的語(yǔ)句而立即開(kāi)始下一個(gè)循環(huán)的執(zhí)行。這兩個(gè)語(yǔ)句只有放在do和done之間才有效。函數(shù)定義在shell中還可以定義函數(shù)。函數(shù)實(shí)際上也是由若干條shell命令組成的,因此它與shell程序形式上是相似的,不同的是它不是一個(gè)單獨(dú)的
18、進(jìn)程,而是shell程序的一部分。函數(shù)定義的基本格式為:functionname若干命令行調(diào)用函數(shù)的格式為:functionnameparam1param2shell函數(shù)可以完成某些例行的工作,而且還可以有自己的退出狀態(tài),因此函數(shù)也可以作為f、while等控制結(jié)構(gòu)的條件。在函數(shù)定義時(shí)不用帶參數(shù)說(shuō)明,但在調(diào)用函數(shù)時(shí)可以帶有參數(shù),此時(shí)shell將把這些參數(shù)分別賦予相應(yīng)的位置參數(shù)$1、$2、.及$*。8.命令分組在shell中有兩種命令分組的方法:“()”和“”,前者當(dāng)shellDO()中的命令時(shí)將再創(chuàng)建一個(gè)新的子進(jìn)程,然后這個(gè)子進(jìn)程去執(zhí)行圓括弧中的命令。當(dāng)用戶(hù)在執(zhí)行某個(gè)命令時(shí)不想讓命令運(yùn)行時(shí)對(duì)狀態(tài)
19、集合(如位置參數(shù)、環(huán)境變量、當(dāng)前工作目錄等)的改變影響到下面語(yǔ)句的執(zhí)行時(shí),就應(yīng)該把這些命令放在圓括弧中,這樣就能保證所有的改變只對(duì)子進(jìn)程產(chǎn)生影響,而父進(jìn)程不受任何干擾;用于將順序執(zhí)行的命令的輸出結(jié)果用于另一個(gè)命令的輸入(管道方式)。當(dāng)我們要真正使用圓括弧和花括弧時(shí)(如計(jì)算表達(dá)式的優(yōu)先級(jí)),則需要在其前面加上轉(zhuǎn)義符()以便讓shell知道它們不是用于命令執(zhí)行的控制所用。9.信號(hào)trap命令用于在shell程序中捕捉到信號(hào),之后可以有三種反應(yīng)方式:執(zhí)行一段程序來(lái)處理這一信號(hào)接受信號(hào)的默認(rèn)操作忽視這一信號(hào)trap對(duì)上面三種方式提供了三種基本形式:第一種形式的trap000shell接收到signal
20、list清單中數(shù)值相同的信號(hào)時(shí),將執(zhí)行雙引號(hào)中的命令串。trapcommandssignal-listtrapcommandssignal-list為了恢復(fù)信號(hào)的默認(rèn)操作,使用第二種形式的trap00:trapsignal-list第三種形式的trap00允許忽視信號(hào):trapsignal-list注意:(1)對(duì)信號(hào)11(段違例)不能捕捉,因?yàn)閟hell本身需要捕捉該信號(hào)去進(jìn)行內(nèi)存的轉(zhuǎn)儲(chǔ)。在trap中可以定義對(duì)信號(hào)0的處理(實(shí)際上沒(méi)有這個(gè)信號(hào)),shell程序在其終止(如執(zhí)行exit語(yǔ)句)時(shí)發(fā)出該信號(hào)。在捕捉到signal-list中指定的信號(hào)并執(zhí)行完相應(yīng)的命令之后,如果這些命令沒(méi)有將shel
21、l程序終止的話(huà),shell程序?qū)⒗^續(xù)執(zhí)行收到信號(hào)時(shí)所執(zhí)行的命令后面的命令,這樣將很容易導(dǎo)致shell程序無(wú)法終止。另外,在trap語(yǔ)句中,單引號(hào)和雙引號(hào)是不同的,當(dāng)shell程序第一次碰到trap語(yǔ)句時(shí),將把commands中的命令掃描一遍。此時(shí)若commands是用單引號(hào)括起來(lái)的話(huà),那么shell不會(huì)對(duì)commands中的變量和命令進(jìn)行替換,否則commands中的變量和命令將用當(dāng)時(shí)具體的值來(lái)替換。五、運(yùn)行shell00000用戶(hù)可以用任何編輯程序來(lái)編寫(xiě)shellODD因?yàn)閟hell0序是解釋執(zhí)行的,所以不需要編譯裝配成目標(biāo)程序,按照shell編程的慣例,以bash為例,程序的第一行一般為“
22、#!/bin/bash”,其中#表示該行是注釋?zhuān)瑖@號(hào)“!”告訴shell運(yùn)行嘆號(hào)之后000并用文件的其余部分作為輸入,也就是運(yùn)行/bin/bash并讓/bin/bash去執(zhí)行shell000內(nèi)容。DOshell000方法有三種:(1)shshell00文件名這種方法000格式為:bashshell00000這實(shí)際上是調(diào)用一個(gè)新的bash00解釋00,而把shell00文件名作為參數(shù)傳遞給它。新啟動(dòng)0shell將去讀指定000,執(zhí)行文件中列出000,當(dāng)所有000都執(zhí)行完結(jié)束。該方法的優(yōu)點(diǎn)是可以利用shell調(diào)試功能。(2)sh格式為:bash這種方式就是利用輸入重定向,使shell命令解釋程序的
23、輸入取自指定的程序文件。用chmod命令使shell程序成為可執(zhí)行的一個(gè)文件能否運(yùn)行取決于該文件的內(nèi)容本身可執(zhí)行且該文件具有執(zhí)行權(quán)。對(duì)于shell程序,當(dāng)用編輯器生成一個(gè)文件時(shí),系統(tǒng)賦予的許可權(quán)限都是運(yùn)行這個(gè)文件時(shí),只需要直接鍵入文件名即可。在這三種運(yùn)行shell000000,最好按下面的方式選擇:它的正確性還沒(méi)有把握時(shí),應(yīng)當(dāng)使用第一種方式進(jìn)行調(diào)試。應(yīng)使用第三種方式把它固定下來(lái),以后只要鍵入相應(yīng)的文件名即可,用。六、bash000DD在編程過(guò)程中難免會(huì)出錯(cuò),有的時(shí)候,調(diào)試程序比編寫(xiě)程序花費(fèi)的時(shí)間還要多,同樣如此。shell0序的調(diào)試主要是利用bash命令解釋程序的選擇項(xiàng)。調(diào)用bash-選擇項(xiàng)s
24、hell00000幾個(gè)常用的選擇項(xiàng)是:-e:如果一個(gè)命令失敗就立即退出-n:讀入命令但是不執(zhí)行它們-u:置換時(shí)把未設(shè)置的變量看作出錯(cuò)644(rw-r-r-),因此,當(dāng)用戶(hù)需要當(dāng)剛建立一個(gè)shell00,對(duì)當(dāng)一個(gè)shell程序已經(jīng)調(diào)試好時(shí),并可被另一個(gè)00所調(diào)shell00bash的形式是:-V:當(dāng)讀入shell輸入行時(shí)把它們顯示出來(lái)-X:執(zhí)行命令時(shí)把命令和它們的參數(shù)顯示出來(lái)上面的所有選項(xiàng)也可以在shell程序內(nèi)部用“set-選擇項(xiàng)”的形式引用,而“set+選擇項(xiàng)”則可以將該部分用上面兩個(gè)語(yǔ)句包圍起來(lái)。1.未置變量退出和立即退出未置變量退出特性允許用戶(hù)對(duì)所有變量進(jìn)行檢查,shell000執(zhí)行。s
25、hell通常允許未置變量0使用,在這種情況下,變量0值為空。如果設(shè)置了未置變量退出選擇項(xiàng),則一旦使用了未置變量就顯示錯(cuò)誤信息,并終止000運(yùn)行。未置變量退出選擇項(xiàng)為“-u”。當(dāng)shell運(yùn)行時(shí),若遇到不存在或不可執(zhí)行0命令、重定向失敗或命令非正常結(jié)束等情況時(shí),如果未經(jīng)重新定向,該出錯(cuò)信息會(huì)打印在終端屏幕上,而shell00仍將繼續(xù)執(zhí)行。要想在錯(cuò)誤發(fā)生時(shí)迫使shell00立即結(jié)束,可以使用“-e”選項(xiàng)將shell000執(zhí)行立即終止。如果引用了一個(gè)未賦值的變量就終止則將禁止該選擇項(xiàng)起作用。如果只想對(duì)00的某一部分使用某些選擇項(xiàng)時(shí),2.shell程序的跟蹤調(diào)試shell程序的主要方法是利用shell
26、命令解釋程序的“-v”或“-x”選項(xiàng)來(lái)跟蹤程序的執(zhí)行。“-v”選擇項(xiàng)使shell在執(zhí)行程序的過(guò)程中,把它讀入的每一個(gè)命令行都顯示出來(lái),而“-X”選擇項(xiàng)使shell在執(zhí)行程序的過(guò)程中把它執(zhí)行的每一個(gè)命令在行首用一個(gè)“+”加上命令名顯示出來(lái)。并把每一個(gè)變量和該變量所取的值也顯示出來(lái),因此,它們的主要區(qū)別在于:在執(zhí)行命令行之前無(wú)“-v”則打印出命令行的原始內(nèi)容,而有“-v”則打印出經(jīng)過(guò)替換后的命令行的內(nèi)容。除了使用shellCD-v”和“-x”選擇項(xiàng)以外,還可以在shell程序內(nèi)部采取一些輔助調(diào)試的措施。例如,可以在shell程序的一些關(guān)鍵地方使用echo命令把必要的信息顯示出來(lái),它的作用相當(dāng)于C語(yǔ)
27、言中的printf語(yǔ)句,這樣就可以知道程序運(yùn)行到什么地方及程序目前的狀態(tài)。七、bash的內(nèi)部命令bash命令解釋程序包含了一些內(nèi)部命令。內(nèi)部命令在目錄列表時(shí)是看不見(jiàn)的,它們由shell本身提供。常用的內(nèi)部命令有:echo、eval、exec、export、readonly、read、shift、wait和點(diǎn)(.)。下面簡(jiǎn)單介紹其命令格式和功能。1.echo命令格式:echoarg功能:在屏幕上打印出由eval命令格式:evalargs功能:當(dāng)shell程序執(zhí)行到命令,然后執(zhí)行。execarg指定的字符串。eval語(yǔ)句時(shí),shell讀入?yún)?shù)args,并將它們組合成一個(gè)新的命令格式:exec命令命
28、令參數(shù)功能:當(dāng)shell執(zhí)行到exec語(yǔ)句時(shí),不會(huì)去創(chuàng)建新的子進(jìn)程,而是轉(zhuǎn)去執(zhí)行指定的命令,當(dāng)指定的命令執(zhí)行完時(shí),該進(jìn)程,也就是最初的shell就終止了,所以shell程序中exec后面的語(yǔ)句將不再被執(zhí)行。4.export=變量值shell從而讓子進(jìn)程繼承父進(jìn)程中的環(huán)命令格式:export變量名或:export變量名功能:shell000export把它的變量向下帶入子境變量。但子shellODDexport把它的變量向上帶入父注意:不帶任何變量名的export語(yǔ)句將顯示出當(dāng)前所有的5.readonlyshell。export變量。命令格式:readonly變量名功能:將一個(gè)用戶(hù)定義的shel
29、l變量標(biāo)識(shí)為不可變的。不帶任何參數(shù)的示出所有只讀的shell變量。readonly命令將顯read命令格式:read變量名表功能:從標(biāo)準(zhǔn)輸入設(shè)備讀入一行,分解成若干字,賦值給7.shift語(yǔ)句功能:shift語(yǔ)句按如下方式重新命名所有的位置參數(shù)變量:程序中每使用一次shift語(yǔ)句,都使所有的位置參數(shù)依次向左移動(dòng)一個(gè)位置,shell0序內(nèi)部定義的變量。$2成為$1,$3成為$2在并使位置參數(shù)“$#”減一,直到減到0。wait功能:是shell等待在后臺(tái)啟動(dòng)的所有子進(jìn)程結(jié)束。Wait的返回值總是真。exit功能:退出shell程序。在exit之后可有選擇地指定一個(gè)數(shù)字作為返回狀態(tài)?!?”(點(diǎn))00
30、00:.Shell00000功能:使shell讀入指定的shell程序文件并依次執(zhí)行文件中的所有語(yǔ)句。1.Linux腳本編寫(xiě)基礎(chǔ)1.1語(yǔ)法基本介紹1.1.1開(kāi)頭程序必須以下面的行開(kāi)始(必須方在文件的第一行):#!/bin/sh符號(hào)#!用來(lái)告訴系統(tǒng)它后面的參數(shù)是用來(lái)執(zhí)行該文件的程序。在這個(gè)例子中我們使用/bin/sh來(lái)執(zhí)行程序。當(dāng)編輯好腳本時(shí),如果要執(zhí)行該腳本,還必須使其可執(zhí)行。要使腳本可執(zhí)行:編譯chmod+xfilename這樣才能用./filename來(lái)運(yùn)行1.1.2注釋在進(jìn)行shell編程時(shí),以#開(kāi)頭的句子表示注釋?zhuān)钡竭@一行的結(jié)束。我們真誠(chéng)地建議您在程序中使用注釋。如果您使用了注釋?zhuān)?/p>
31、么即使相當(dāng)長(zhǎng)的時(shí)間內(nèi)沒(méi)有使用該腳本,您也能在很短的時(shí)間內(nèi)明白該腳本的作用及工作原理。1.1.3變量在其他編程語(yǔ)言中您必須使用變量。在shellDOO,所有的變量都由字符串組成,并且您不需要對(duì)變量進(jìn)行聲明。要賦值給一個(gè)變量,您可以這樣寫(xiě):#!/bin/sh#對(duì)變量賦值:a=helloworld#現(xiàn)在打印變量a的內(nèi)容:echoAis:echo$a有時(shí)候變量名很容易與其他文字混淆,比如:num=2echothisisthe$numnd這并不會(huì)打印出thisisthe2nd,而僅僅打印thisisthe,因?yàn)閟hell會(huì)去搜索變量numnd的值,但是這個(gè)變量時(shí)沒(méi)有值的??梢允褂没ɡㄌ?hào)來(lái)告訴shell我
32、們要打印的是num變量:num=2echothisisthe$numnd這將打印:thisisthe2nd環(huán)境變量由export關(guān)鍵字處理過(guò)的變量叫做環(huán)境變量。我們不對(duì)環(huán)境變量進(jìn)行討論,因?yàn)橥ǔG闆r下僅僅在登錄腳本中使用環(huán)境變量。Shell命令和流程控制在shell腳本中可以使用三類(lèi)命令:1)Unix命令:雖然在shell腳本中可以使用任意的unix命令,但是還是由一些相對(duì)更常用的命令。這些命令通常是用來(lái)進(jìn)行文件和文字操作的。常用命令語(yǔ)法及功能echosometext:將文字內(nèi)容打印在屏幕上ls:文件列表wc-lfilewc-wfilewc-cfile:計(jì)算文件行數(shù)計(jì)算文件中的單詞數(shù)計(jì)算文件中
33、的字符數(shù)cpsourcefiledestfile:文件拷貝mvoldnamenewname:重命名文件或移動(dòng)文件rmfile:刪除文件greppatternfile:在文件內(nèi)搜索字符串比如:grepsearchstringfile.txtcut-bcolnumfile:指定欲顯示的文件內(nèi)容范圍,并將它們輸出到標(biāo)準(zhǔn)輸出設(shè)備比如:輸出每行第5個(gè)到第9個(gè)字符cut-b5-9file.txt千萬(wàn)不要和cat命令混淆,這是兩個(gè)完全不同的命令catfile.txt:輸出文件內(nèi)容到標(biāo)準(zhǔn)輸出設(shè)備(屏幕)上filesomefile:得到文件類(lèi)型readvar:提示用戶(hù)輸入,并將輸入賦值給變量sortfile.t
34、xt:對(duì)file.txt文件中的行進(jìn)行排序uniq:刪除文本文件中出現(xiàn)的行列比如:sortfile.txt|uniqexpr:進(jìn)行數(shù)學(xué)運(yùn)算Example:add2and3expr2+3find:搜索文件比如:根據(jù)文件名搜索find.-namefilename-printtee:將數(shù)據(jù)輸出到標(biāo)準(zhǔn)輸出設(shè)備(屏幕)和文件比如:somecommand|teeoutfilebasenamefile:返回不包含路徑的文件名比如:basename/bin/tux將返回tuxdirnamefile:返回文件所在路徑比如:dirname/bin/tux將返回/binheadfile:打印文本文件開(kāi)頭幾行tail
35、file:打印文本文件末尾幾行sed:Sed是一個(gè)基本的查找替換程序??梢詮臉?biāo)準(zhǔn)輸入(比如命令管道)讀入文本,并將結(jié)果輸出到標(biāo)準(zhǔn)輸出(屏幕)。該命令采用正則表達(dá)式(見(jiàn)參考)進(jìn)行搜索。不要和shell中的通配符相混淆。比如:將linuxfocus替換為L(zhǎng)inuxFocus:cattext.file|seds/linuxfocus/LinuxFocus/newtext.fileawk:awk用來(lái)從文本文件中提取字段。缺省地,字段分割符是空格,可以使用-F指定其他分割符。catfile.txt|awk-F,print$1,$3這里我們使用,作為字段分割符,同時(shí)打印第一個(gè)和第三個(gè)字段。如果該文件內(nèi)容如
36、下:AdamBor,34,IndiaKerryMiller,22,USA命令輸出結(jié)果為:AdamBor,IndiaKerryMiller,USA2)概念:管道,重定向和backtick這些不是系統(tǒng)命令,但是他們真的很重要。管道(|)將一個(gè)命令的輸出作為另外一個(gè)命令的輸入。grephellofile.txt|wc-l在file.txt中搜索包含有”hello”的行并計(jì)算其行數(shù)。在這里grep命令的輸出作為wc命令的輸入。當(dāng)然您可以使用多個(gè)命令。重定向:將命令的結(jié)果輸出到文件,而不是標(biāo)準(zhǔn)輸出(屏幕)。寫(xiě)入文件并覆蓋舊文件加到文件的尾部,保留舊文件內(nèi)容。反短斜線(xiàn)使用反短斜線(xiàn)可以將一個(gè)命令的輸出作為另
37、外一個(gè)命令的一個(gè)命令行參數(shù)。命令:find.-mtime-1-typef-print用來(lái)查找過(guò)去24ODD-mtime-2則表示過(guò)去48小時(shí))內(nèi)修改過(guò)的文件。如果您想將所有查找到的文件打一個(gè)包,則可以使用以下腳本:#!/bin/sh#Theticksarebackticks()notnormalquotes():tar-zcvflastmod.tar.gzfind.-mtimeT-typef-print3)流程控制1.ifif表達(dá)式如果條件為真則執(zhí)行then后面的部分:if;thenelif;thenelsefi大多數(shù)情況下,可以使用測(cè)試命令來(lái)對(duì)條件進(jìn)行測(cè)試。比如可以比較字符串、判斷文件是否存
38、在及是否可讀等等通常用來(lái)表示條件測(cè)試。注意這里的空格很重要。要確保方括號(hào)的空格。-fsomefile:判斷是否是一個(gè)文件-x/bin/ls:判斷/bin/ls是否存在并有可執(zhí)行權(quán)限-n$var:判斷$var變量是否有值$a=$b:判斷$a0$b是否相等執(zhí)行mantest可以查看所有測(cè)試表達(dá)式可以比較和判斷的類(lèi)型。直接執(zhí)行以下腳本:#!/bin/shif$SHELL=/bin/bash;thenechoyourloginshellisthebash(bourneagainshell)elseechoyourloginshellisnotbashbut$SHELLfi變量$SHELL包含了登錄sh
39、ell的名稱(chēng),我們和/bin/bash進(jìn)行了比較。快捷操作符熟悉C語(yǔ)言的朋友可能會(huì)很喜歡下面的表達(dá)式:-f/etc/shadow&echoThiscomputerusesshadowpasswors這里&就是一個(gè)快捷操作符,如果左邊的表達(dá)式為真則執(zhí)行右邊的語(yǔ)句。您也可以認(rèn)為是邏輯運(yùn)算中的與操作。上例中表示如果/etc/shadow文件存在則打印”Thiscomputerusesshadowpasswors”。同樣或操作(|)在shell編程中也是可用的。這里有個(gè)例子:#!/bin/shmailfolder=/var/spool/mail/james-r$mailfolderechoCannot
40、read$mailfolder;exit1;echo$mailfolderhasmailfrom:grepFrom$mailfolder該腳本首先判斷mailfolder是否可讀。如果可讀則打印該文件中的From一行。如果不可讀則或操作生效,打印錯(cuò)誤信息后腳本退出。這里有個(gè)問(wèn)題,那就是我們必須有兩個(gè)命令:-打印錯(cuò)誤信息一般函數(shù)將-退出程序我們使用花括號(hào)以匿名函數(shù)的形式將兩個(gè)命令放到一起作為一個(gè)命令使用。在下文提及。不用與和或操作符,我們也可以用if表達(dá)式作任何事情,但是使用與或操作符會(huì)更便利很多。casecase:表達(dá)式可以用來(lái)匹配一個(gè)給定的字符串,而不是數(shù)字。case.in.)dosomet
41、hinghere;esac讓我們看一個(gè)例子。file命令可以辨別出一個(gè)給定文件的文件類(lèi)型,比如:filelf.gz這將返回:ziplf.gz:gzipcompresseddata,deflated,originalfilename,lastmodified:MonAug2723:09:182001,os:Unix我們利用這一點(diǎn)寫(xiě)了一個(gè)叫做smartzip的腳本,該腳本可以自動(dòng)解壓bzip2,gzip和類(lèi)型的壓縮文件:#!/bin/shftype二file”$1case$ftypein$1:Ziparchive*)unzip$1;$1:gzipcompressed*)gunzip$1;$1:bz
42、ip2compressed*)bunzip2$1;*)echoFile$1cannotbeuncompressedwithsmartzip;esac您可能注意到我們?cè)谶@里使用了一個(gè)特殊的變量$1。該變量包含了傳遞給該程序的第一個(gè)參數(shù)值。也就是說(shuō),當(dāng)我們運(yùn)行:smartziparticles.zip$1就是字符串a(chǎn)rticles.zipselsectselect表達(dá)式是一種bash的擴(kuò)展應(yīng)用,尤其擅長(zhǎng)于交互式使用。用戶(hù)可以從一組不同的值中進(jìn)行選擇。selectvarin.;dobreakdonenow$varcanbeused下面是一個(gè)例子:#!/bin/shechoWhatisyourfavo
43、uriteOS?selectvarinLinuxGnuHurdFreeBSDOther;do這里出現(xiàn)了第二個(gè)特殊的變量$*,該變量包含了所有輸入的命令行參數(shù)值。breakdoneechoYouhaveselected$var下面是該腳本運(yùn)行的結(jié)果:WhatisyourfavouriteOS?1)LinuxGnuHurdFreeBSDOther#?1YouhaveselectedLinux4.looploop表達(dá)式:while.;dodonewhile-loop將運(yùn)行直到表達(dá)式測(cè)試為真。willrunwhiletheexpressionthatwetestforistrue.關(guān)鍵字break用來(lái)
44、跳出循環(huán)。而關(guān)鍵字”continue”用來(lái)不執(zhí)行余下的部分而直接跳到下一個(gè)循環(huán)。(字符串用空格分隔)然后將其賦給一個(gè)變量:for-loop表達(dá)式查看一個(gè)字符串列表forvarin;dodone在下面的例子中,將分別打印#!/bin/shforvarinABC;doechovaris$vardone下面是一個(gè)更為有用的腳本#!/bin/shABC到屏幕上:showrpm,其功能是打印一些RPM包的統(tǒng)計(jì)信息:listacontentsummaryofanumberofRPMpackagesUSAGE:showrpmrpmfile1rpmfile2.EXAMPLE:showrpm/cdrom/Red
45、Hat/RPMS/*.rpmforrpmpackagein$*;doif-r$rpmpackage;thenecho=$rpmpackage=rpm-qi-p$rpmpackageelseechoERROR:cannotreadfile$rpmpackagefidone如果您運(yùn)行如果您運(yùn)行showrpmopenssh.rpmw3m.rpmwebgrep.rpm此時(shí)$*包含了3個(gè)字符串,即openssh.rpm,w3m.rpmandwebgrep.rpm.5.引號(hào)在向程序傳遞任何參數(shù)之前,程序會(huì)擴(kuò)展通配符和變量。這里所謂擴(kuò)展的意思是程序會(huì)把通配符(比如jpg件,*)替換成合適的文件名,它變量替換
46、成變量值。為了防止程序作這種替換,您可以使用引號(hào):讓我們來(lái)看一個(gè)例子,假設(shè)在當(dāng)前目錄下有一些文件,兩個(gè)mail.jpg和tux.jpg。1.2編譯SHELL腳本#ch#!/bin/shmod+xfilenamecho*.jpgU緩螅梢醞D淙耄?./filename來(lái)執(zhí)行您的腳本。這將打印出mail.jpgtux.jpg的結(jié)果。引號(hào)(單引號(hào)和雙引號(hào))將防止這種通配符擴(kuò)展:#!/bin/shecho*.jpgecho*.jpg這將打印*.jpg兩次。單引號(hào)更嚴(yán)格一些。它可以防止任何變量擴(kuò)展。雙引號(hào)可以防止通配符擴(kuò)展但允許變量擴(kuò)展。#!/bin/shecho$SHELLecho$SHELLecho$
47、SHELL運(yùn)行結(jié)果為:/bin/bash/bin/bash$SHELL最后,還有一種防止這種擴(kuò)展的方法,那就是使用轉(zhuǎn)義字符反斜桿:echo*.jpgecho$SHELL這將輸出:*.jpg$SHELL6.Heredocuments當(dāng)要將幾行文字傳遞給一個(gè)命令時(shí),heredocuments譯者注:目前還沒(méi)有見(jiàn)到過(guò)對(duì)該詞適合的翻譯)一種不錯(cuò)的方法。對(duì)每個(gè)腳本寫(xiě)一段幫助性的文字是很有用的,此時(shí)如果我們四有那個(gè)heredocuments就不必用echo函數(shù)一行行輸出。一個(gè)Heredocument以開(kāi)頭,后面接上一個(gè)字符串,這個(gè)字符串還必須出現(xiàn)在heredocument的末尾。下面是一個(gè)例子,在該例子中
48、,我們對(duì)多個(gè)文件進(jìn)行重命名,并且使用heredocuments打印幫助:#!/bin/sh#wehavelessthan3arguments.Printthehelptext:if$#-lt3;thencatren-renamesanumberoffilesusingsedregularexpressionsUSAGE:renregexpreplacementfiles.EXAMPLE:renameallrenHTM$html*.HTMfilesin*.html:*.HTMHELPexit0fiOLD=$1NEW=$2#Theshiftcommandremovesoneargumentfrom
49、thelistof#commandlinearguments.shiftshift#$*containsnowallthefiles:forfilein$*;doif-f$file;thennewfile二echo$file|seds/$0LD/$NEW/gif-f$newfile;thenechoERROR:$newfileexistsalreadyelseechorenaming$fileto$newfile.mv$file$newfilefifi您就會(huì)發(fā)現(xiàn)在程序中可能在幾個(gè)地方使用了相同的代done字傳遞給cat命令,然后由cat命令將其打印在屏幕上。打印幫助文字后程序退出。如果輸入?yún)?shù)
50、等于或大于3個(gè),我們就將第一個(gè)參數(shù)賦值給變量OLD,第二個(gè)參數(shù)賦值給變量NEW。下一步,我們使用shift命令將第一個(gè)和第二個(gè)參數(shù)從參數(shù)列表中刪除,這樣原來(lái)的第三個(gè)參數(shù)就成為參數(shù)列表$*的第一個(gè)參數(shù)。然后我們開(kāi)始循環(huán),命令行參數(shù)列表被一個(gè)接一個(gè)地被賦值給變量$file。接著我們判斷該文件是否存在,如果存在則通過(guò)sed命令搜索和替換這是一個(gè)復(fù)雜一些的例子。讓我們?cè)敿?xì)討論一下。第一個(gè)辻表達(dá)式判斷輸入命令行參數(shù)是否小于3個(gè)(特殊變量$#表示包含參數(shù)的個(gè)數(shù))。如果輸入?yún)?shù)小于3個(gè),則將幫助文來(lái)產(chǎn)生新的文件名。然后將反短斜線(xiàn)內(nèi)命令結(jié)果賦值給newfile。這樣我們就達(dá)到了我們的目的:得到了舊文件名和新文
51、件名。然后使用4)函數(shù)如果您寫(xiě)了一些稍微復(fù)雜一些的程序,mv命令進(jìn)行重命名。碼,并且您也會(huì)發(fā)現(xiàn),如果我們使用了函數(shù),會(huì)方便很多。一個(gè)函數(shù)是這個(gè)樣子的:functionname()insidethebody$1isthefirstargumentgiventothefunction$2thesecond.body您需要在每個(gè)程序的開(kāi)始對(duì)函數(shù)進(jìn)行聲明。下面是一個(gè)叫做xtitlebar的腳本,使用這個(gè)腳本您可以改變終端窗口的名稱(chēng)。這里使用了一個(gè)叫做help的函數(shù)。正如您可以看到的那樣,這個(gè)定義的函數(shù)被使用了兩次。#!/bin/sh#vim:setsw=4ts=4et:help()catxtitleb
52、ar-changethenameofanxterm,gnome-terminalorkdekonsoleUSAGE:xtitlebar-hstring_for_titelbarOPTIONS:-hhelptextEXAMPLE:xtitlebarcvsHELPexit0#incaseoferrororif-hisgivenwecallthefunctionhelp:-z$1&help$1=-h&help#sendtheescapesequencetochangethextermtitelbar:echo-e330;$107#在腳本中提供幫助是一種很好的編程習(xí)慣,這樣方便其他用戶(hù)(和您)使用和理
53、解腳本。命令行參數(shù)我們已經(jīng)見(jiàn)過(guò)$*和$1,$2.$9等特殊變量,這些特殊變量包含了用戶(hù)從命令行輸入的參數(shù)。迄今為止,我們僅僅了解了一些簡(jiǎn)單的命令行語(yǔ)法(比如一些強(qiáng)制性的參數(shù)和查看幫助的-h選項(xiàng))。但是在編寫(xiě)更復(fù)雜的程序時(shí),您可能會(huì)發(fā)現(xiàn)您需要更多的自定義的選項(xiàng)。通常的慣例是在所有可選的參數(shù)之前加一個(gè)減號(hào),后面再加上參數(shù)值(比如文件名)。有好多方法可以實(shí)現(xiàn)對(duì)輸入?yún)?shù)的分析,但是下面的使用case表達(dá)式的例子無(wú)遺是一個(gè)不錯(cuò)的方法。#!/bin/shhelp()catshiftby2-)shift;break;#endofoptions-*)echoerror:nosuchoption$1.-hforhelp;exit1;*)break;esacdoneechoopt_fis$opt_fechoopt_lis$opt_lechofirstargis$1echo2ndargis$2您可以這樣運(yùn)行該腳本:cmdparser-lhello-f-somefile1somefile2返回的結(jié)果是:opt_fis1opt_lishellofirstargis-somefile1將輸入?yún)?shù)與Unix系統(tǒng)的慣例,并copy命令:expr命令2ndargissomefile2這個(gè)腳本是如何工作的呢?腳本首先在所有輸
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 保健食品批文轉(zhuǎn)讓合同標(biāo)準(zhǔn)文本
- 涼皮供貨合同范例
- 企業(yè)建廠(chǎng)房合同標(biāo)準(zhǔn)文本
- crv訂車(chē)合同標(biāo)準(zhǔn)文本
- 個(gè)體商戶(hù)采購(gòu)合同范例
- 保定租房個(gè)人轉(zhuǎn)租合同范例
- 特產(chǎn)電商創(chuàng)業(yè)項(xiàng)目
- 上海存量租房合同標(biāo)準(zhǔn)文本
- 個(gè)人合股合同范例
- 產(chǎn)品區(qū)域經(jīng)銷(xiāo)代理合同標(biāo)準(zhǔn)文本
- 基于社區(qū)的慢性病預(yù)防策略研究
- 2025家庭教育指導(dǎo)師試題庫(kù)及答案
- 紅酒-價(jià)格表格
- 2025年機(jī)電實(shí)務(wù)考試題型及答案
- 高中化學(xué) 硝酸-課件 學(xué)習(xí)資料
- CRH5動(dòng)車(chē)組轉(zhuǎn)向架
- 2025江蘇宿遷宿豫區(qū)總工會(huì)公開(kāi)招聘5人高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 西北四?。兾魃轿髑嗪幭模?025屆高三下學(xué)期第一次聯(lián)考英語(yǔ)試卷含答案
- 醫(yī)院門(mén)禁施工方案
- 2025年安徽商貿(mào)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)a4版
- 2025年安慶醫(yī)藥高等專(zhuān)科學(xué)校單招職業(yè)適應(yīng)性考試題庫(kù)往年題考
評(píng)論
0/150
提交評(píng)論