




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章Shell腳本編程基礎(chǔ)深入了解Shell腳本編程中的變量知識(shí)變量的使用-定義變量在Shell里定義變量時(shí),不需要指定數(shù)據(jù)類型,通過(guò)直接賦值就可以實(shí)現(xiàn)對(duì)變量的定義?!臼纠?-1】#定義變量a并賦值[root@openEuler~]#a=1Shell在賦值變量時(shí),無(wú)論是否使用引號(hào),無(wú)論將整數(shù)還是小數(shù)賦給變量,值都會(huì)默認(rèn)以字符串的形式進(jìn)行存儲(chǔ)。這一點(diǎn)與其他編程語(yǔ)言有所不同。此外,也可以使用declare關(guān)鍵字顯式定義變量的類型。declare后可加參數(shù)用于定義變量的類型,如-i表示定義整數(shù)變量,-a表示定義數(shù)組變量,-f表示定義函數(shù)變量,-r表示定義只讀變量。但在一般情況下,如果沒(méi)有定義變量類型的需求,只需要在編寫Shell代碼時(shí)注意變量的類型即可?!臼纠?-2】#顯式定義整數(shù)變量aa[root@openEuler~]#declare-iaa變量的命名有以下規(guī)范。
只能由英文字母、數(shù)字和下畫線組成。
首個(gè)字符不能為數(shù)字。
不能使用標(biāo)點(diǎn)符號(hào)。
不能使用bashShell里的保留關(guān)鍵字(保留關(guān)鍵字可使用help命令查看)。如1bce3、abc*def等是無(wú)效的變量名,_test、var1等是可以正常使用的變量名。變量的使用-引用變量如果想要引用已經(jīng)定義過(guò)的變量,只需要使用“$變量名”。變量名前也可以選擇不加或者加花括號(hào)“{}”,加花括號(hào)有助于開發(fā)者識(shí)別變量的邊界,是一個(gè)良好的編程習(xí)慣。變量的使用-賦值變量賦值操作可以在一條命令中實(shí)現(xiàn)定義和賦值變量。假設(shè)變量名為var,值為value。此時(shí)可以用下面3種方式對(duì)var進(jìn)行定義及賦值:var=valuevar='value'var="value"要注意的是,如果值value中不包含任何如空格、縮進(jìn)等特殊字符時(shí),就可以省略引號(hào)。同時(shí),賦值的等號(hào)周圍一定不能有空格。已經(jīng)被定義過(guò)的變量,可以被重新賦值。但要注意,如果使用readonly命令,將變量定義為只讀變量后,除了第一次賦值外,在后續(xù)嘗試更改只讀變量值時(shí),系統(tǒng)會(huì)報(bào)錯(cuò),值將無(wú)法被修改。變量的使用-賦值變量【示例6-3】#定義只讀變量var1并賦值為ok,后嘗試重新賦值為yes,系統(tǒng)會(huì)報(bào)錯(cuò)[root@openEuler~]#readonlyvar1='ok'[root@openEuler~]#var1='yes'-bash:var:readonlyvariable賦值時(shí)使用單引號(hào)和雙引號(hào)也是有區(qū)別的。使用單引號(hào)“''”為變量賦值時(shí),單引號(hào)里的內(nèi)容就是輸出的內(nèi)容。即使內(nèi)容中包含變量和命令,也會(huì)將它們?cè)瓨虞敵?。因此,單引?hào)比較適合定義純字符串的情況,或者是不需要解析變量或者命令的情況?!臼纠?-4】#使用單引號(hào)為變量賦值并輸出[root@openEuler~]#var2=123[root@openEuler~]#var3='ABC=$var2'[root@openEuler~]#echo$var3ABC=$var2而如果使用雙引號(hào)“""”為變量賦值,在輸出前會(huì)解析引號(hào)內(nèi)的變量和命令。因此,雙引號(hào)比較適合字符串中含有變量和命令,并且希望能先對(duì)其進(jìn)行解析后輸出的情況。
變量的使用-賦值變量【示例6-5】#使用雙引號(hào)為變量賦值并輸出[root@openEuler~]#var2=123[root@openEuler~]#var4="ABC=$var2"[root@openEuler~]#echo$var4ABC=123除此之外,Shell也支持直接將命令的執(zhí)行結(jié)果賦給變量。假設(shè)變量名為var,命令為command。此時(shí)可以用以下的兩種方式進(jìn)行賦值:var=`command`var=$(command)第一種方式中,使用了反引號(hào)“``”將命令包圍。第二種方式中,使用了$()將命令包圍。兩種方式都能輸出command對(duì)應(yīng)的執(zhí)行結(jié)果,它們執(zhí)行的效果相同。變量的使用-刪除變量如果想要?jiǎng)h除已經(jīng)定義的變量,可以使用unset命令。變量被刪除后,將無(wú)法再次使用。【示例6-8】#刪除變量var1[root@openEuler~]#unsetvar125431用戶級(jí)用戶級(jí)環(huán)境變量寫在登錄用戶的~/.bash_profile文件中,只對(duì)當(dāng)前用戶有效。通過(guò)不同的文件來(lái)配置不同級(jí)別的環(huán)境變量,方便對(duì)環(huán)境變量進(jìn)行分類管理。系統(tǒng)級(jí)環(huán)境變量寫在系統(tǒng)的配置文件/etc/profile中,對(duì)操作系統(tǒng)中的所有用戶都有效。環(huán)境變量介紹-環(huán)境變量級(jí)別系統(tǒng)級(jí)配置方式會(huì)話級(jí)環(huán)境變量只在當(dāng)前的Shell中有效,當(dāng)該Shell關(guān)閉時(shí),變量及其值就會(huì)失效。不同級(jí)別的環(huán)境變量具有不同的作用范圍,這有助于根據(jù)實(shí)際需求來(lái)設(shè)置和管理環(huán)境變量。會(huì)話級(jí)作用范圍環(huán)境變量介紹-會(huì)話級(jí)環(huán)境變量添加命令如果在父進(jìn)程中創(chuàng)建一個(gè)新的進(jìn)程來(lái)執(zhí)行Shell命令,那么這個(gè)新的進(jìn)程被稱作子進(jìn)程。子進(jìn)程產(chǎn)生時(shí),會(huì)繼承父進(jìn)程的環(huán)境變量。傳遞規(guī)則兩個(gè)沒(méi)有父子關(guān)系的Shell進(jìn)程是不能傳遞環(huán)境變量的,同時(shí)也只能由父到子地向下傳遞而不能反向傳遞環(huán)境變量。子進(jìn)程繼承使用export命令,可以在當(dāng)前Shell中添加會(huì)話級(jí)環(huán)境變量。被添加會(huì)話級(jí)環(huán)境變量的Shell進(jìn)程稱為父進(jìn)程。【示例6-9】#在父進(jìn)程中定義會(huì)話級(jí)環(huán)境變量a[root@openEuler~]#exporta=1[root@openEuler~]#echo$a1#進(jìn)入子進(jìn)程,子進(jìn)程可以繼承父進(jìn)程的環(huán)境變量a[root@openEuler~]#bash[root@openEuler~]#echo$a1#當(dāng)Shell關(guān)閉后,子進(jìn)程無(wú)法繼續(xù)使用環(huán)境變量a[root@openEuler~]#exit環(huán)境變量介紹-用戶級(jí)環(huán)境變量【示例6-10】#定義用戶級(jí)環(huán)境變量b [root@openEuler~]#vim~./bash_profileexportb=1#使用source命令使環(huán)境變量生效[root@openEuler~]#source~/.bash_profile[root@openEuler~]#echo$b1#當(dāng)再次使用該用戶登錄Shell會(huì)話,仍可繼續(xù)使用環(huán)境變量b[root@openEuler~]#echo$b1在登錄用戶的~/.bash_profile文件中寫入對(duì)應(yīng)環(huán)境變量,后續(xù)用該用戶登錄時(shí),能使用該用戶級(jí)環(huán)境變量。環(huán)境變量介紹-系統(tǒng)級(jí)環(huán)境變量【示例6-11】#定義系統(tǒng)級(jí)環(huán)境變量c[root@openEuler~]#vim/etc/profileexportc=1#使用source命令使環(huán)境變量生效[root@openEuler~]#source/etc/profile#當(dāng)使用root或者其他用戶登錄Shell會(huì)話,均可繼續(xù)使用環(huán)境變量c[root@openEuler~]#echo$c1【示例6-12】#查看當(dāng)前用戶的主目錄[root@openEuler~]#echo$HOME/root#查看當(dāng)前使用的Shell類型[root@openEuler~]#echo$SHELL/bin/bash#查看當(dāng)前系統(tǒng)的語(yǔ)言[root@openEuler~]#echo$LANGen_US.UTF-8在系統(tǒng)配置文件/etc/profile中寫入對(duì)應(yīng)環(huán)境變量,操作系統(tǒng)中的所有用戶都能使用該系統(tǒng)級(jí)環(huán)境變量。環(huán)境變量名含義HISTSIZE保存的歷史命令記錄的數(shù)量HOSTNAME當(dāng)前的主機(jī)名稱HOME當(dāng)前的用戶主目錄HTTP_PROXY當(dāng)前使用的代理服務(wù)器LANG當(dāng)前系統(tǒng)的語(yǔ)言LOGNAME當(dāng)前登錄的用戶名PATH當(dāng)前的環(huán)境變量SHELL當(dāng)前使用的Shell類型TREM當(dāng)前終端類型TMOUT系統(tǒng)與用戶交互過(guò)程中的超時(shí)值UID當(dāng)前登錄的用戶的UID,如UID=0,說(shuō)明當(dāng)前為root用戶系統(tǒng)預(yù)定義變量系統(tǒng)預(yù)定義變量是系統(tǒng)預(yù)先定義的變量的簡(jiǎn)稱。它是由操作系統(tǒng)自身保留并維護(hù)的一系列特殊的變量,通常用來(lái)保存程序的相關(guān)運(yùn)行狀態(tài)。在使用時(shí),系統(tǒng)預(yù)定義變量無(wú)法被定義、修改和賦值。系統(tǒng)預(yù)定義變量功能$0獲取腳本名稱或輸出腳本路徑$1,$2,…,$n獲取執(zhí)行腳本名稱后的第n個(gè)參數(shù)值$#獲取執(zhí)行腳本名稱后的參數(shù)個(gè)數(shù)$*獲取執(zhí)行腳本名稱后的所有參數(shù)$@獲取執(zhí)行腳本名稱后的所有參數(shù)$?獲取上一條命令的退出狀態(tài)或者函數(shù)的返回值,返回值為0表示沒(méi)有錯(cuò)誤,返回值非0表示有錯(cuò)誤$$獲取當(dāng)前Shell的進(jìn)程的PID$!獲取后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程的PID在使用系統(tǒng)預(yù)定義變量時(shí),還有幾點(diǎn)注意事項(xiàng)。
$1,$2,…,$n也可以稱為位置變量。
當(dāng)n>9時(shí),獲取參數(shù)值時(shí)需要使用{},例如${10}。
$*、$@都能實(shí)現(xiàn)獲取所有參數(shù)的功能,但它們也有所不同。在加雙引號(hào)時(shí),"$*"會(huì)將所有參數(shù)看成一個(gè)整體字符串,而"$@"會(huì)把每個(gè)參數(shù)用“""”分開。全局和局部變量系統(tǒng)預(yù)定義變量是系統(tǒng)預(yù)先定義的變量的簡(jiǎn)稱。它是由操作系統(tǒng)自身保留并維護(hù)的一系列特殊的變量,通常用來(lái)保存程序的相關(guān)運(yùn)行狀態(tài)。在使用時(shí),系統(tǒng)預(yù)定義變量無(wú)法被定義、修改和賦值。系統(tǒng)預(yù)定義變量功能$0獲取腳本名稱或輸出腳本路徑$1,$2,…,$n獲取執(zhí)行腳本名稱后的第n個(gè)參數(shù)值$#獲取執(zhí)行腳本名稱后的參數(shù)個(gè)數(shù)$*獲取執(zhí)行腳本名稱后的所有參數(shù)$@獲取執(zhí)行腳本名稱后的所有參數(shù)$?獲取上一條命令的退出狀態(tài)或者函數(shù)的返回值,返回值為0表示沒(méi)有錯(cuò)誤,返回值非0表示有錯(cuò)誤$$獲取當(dāng)前Shell的進(jìn)程的PID$!獲取后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程的PID在使用系統(tǒng)預(yù)定義變量時(shí),還有幾點(diǎn)注意事項(xiàng)。
$1,$2,…,$n也可以稱為位置變量。
當(dāng)n>9時(shí),獲取參數(shù)值時(shí)需要使用{},例如${10}。
$*、$@都能實(shí)現(xiàn)獲取所有參數(shù)的功能,但它們也有所不同。在加雙引號(hào)時(shí),"$*"會(huì)將所有參數(shù)看成一個(gè)整體字符串,而"$@"會(huì)把每個(gè)參數(shù)用“""”分開。在Shell函數(shù)中定義的變量默認(rèn)是全局變量,與在函數(shù)外部定義的效果相同。全局變量特性Shell中的變量有各自的作用范圍,即使變量同名,也不會(huì)互相影響。變量互不相關(guān)性示例在不同Shell會(huì)話中定義的變量互不影響,例如一個(gè)會(huì)話中定義變量a=1,另一個(gè)會(huì)話中echo$a顯示為空。在Shell中定義的變量默認(rèn)是全局變量,不同Shell進(jìn)程中的全局變量互不影響。變量作用范圍變量分類函數(shù)中變量特性變量分為全局變量、局部變量和環(huán)境變量。全局變量在當(dāng)前進(jìn)程中可用,局部變量在函數(shù)內(nèi)部使用,環(huán)境變量在子進(jìn)程中使用。全局和局部變量通配符功能*匹配0個(gè)或多個(gè)字符?匹配任意一個(gè)字符[list]匹配list中的任意單一字符[!list]匹配除list中的任意單一字符[c1-c2]匹配c1c2中的任意單一字符{string1,string2,…}匹配sring1或string2(或更多)中的一個(gè)字符串通配符出現(xiàn)在Shell命令的參數(shù)中,以進(jìn)行文件匹配或路徑拓展。Shell識(shí)別到通配符中的參數(shù)后,會(huì)將其當(dāng)作路徑或文件名在磁盤上搜尋可能的匹配。若存在匹配項(xiàng),則進(jìn)行替換;否則就將該通配符作為一個(gè)普通字符傳遞給命令進(jìn)行處理。通配符被處理后,Shell會(huì)先完成該命令的重組,然后繼續(xù)執(zhí)行重組后的命令。Shell中常用的通配符及對(duì)應(yīng)的功能如表6-3所示。表6-3
常用通配符及對(duì)應(yīng)的功能通配符第6章Shell腳本編程基礎(chǔ)深入了解Shell腳本編程02認(rèn)識(shí)Shell腳本Shell編程基礎(chǔ)系統(tǒng)特性腳本定義以“.sh”結(jié)尾的文件能讓用戶更清晰地分辨出這是一個(gè)Shell腳本文件,便于管理和操作。分類意義在Linux操作系統(tǒng)中,按照Shell語(yǔ)法編寫成的文件稱為Shell腳本。Linux不以文件擴(kuò)展名識(shí)別文件類型,將Shell腳本文件以“.sh”結(jié)尾,主要是為方便用戶對(duì)文件進(jìn)行分類。文件擴(kuò)展名主要是為了方便用戶對(duì)文件進(jìn)行分類,Linux系統(tǒng)本身不依賴擴(kuò)展名來(lái)識(shí)別文件類型。Linux操作系統(tǒng)不會(huì)以文件擴(kuò)展名來(lái)識(shí)別文件類型,這與其他一些操作系統(tǒng)有所不同。擴(kuò)展名作用Shell腳本定義03010204功能豐富Shell腳本的重要性支持變量的輸入輸出、引用、比較語(yǔ)句、判斷語(yǔ)句、條件語(yǔ)句、循環(huán)語(yǔ)句等,能實(shí)現(xiàn)與其他語(yǔ)言程序相同的效果。可以編寫腳本實(shí)現(xiàn)自動(dòng)化的系統(tǒng)管理任務(wù),如定時(shí)備份、文件清理等,提高工作效率。bash作為openEuler操作系統(tǒng)中默認(rèn)使用的Shell解釋器,與其他的Shell有很好的兼容性,使用廣泛。自動(dòng)化任務(wù)兼容性集成性可以與其他系統(tǒng)命令和工具集成,方便進(jìn)行系統(tǒng)配置和管理。04030102在處理一些簡(jiǎn)單的系統(tǒng)任務(wù)時(shí),執(zhí)行效率較高,但對(duì)于復(fù)雜的計(jì)算和算法,可能不如專門的編程語(yǔ)言。執(zhí)行效率能夠直接與Linux系統(tǒng)的各種命令和工具進(jìn)行交互,方便進(jìn)行系統(tǒng)管理和操作。主要應(yīng)用于系統(tǒng)管理、自動(dòng)化任務(wù)等方面,而其他編程語(yǔ)言可能更適用于開發(fā)大型軟件和復(fù)雜的應(yīng)用程序。Shell腳本與其他語(yǔ)言對(duì)比語(yǔ)法簡(jiǎn)單系統(tǒng)交互性強(qiáng)Shell腳本語(yǔ)法相對(duì)簡(jiǎn)單,易于學(xué)習(xí)和上手,對(duì)于初學(xué)者來(lái)說(shuō)更容易掌握。應(yīng)用場(chǎng)景編寫并且執(zhí)行一個(gè)簡(jiǎn)單的Shell腳本(1)進(jìn)入openEuler終端,使用vim命令創(chuàng)建一個(gè)Shell腳本文件hello.sh。[root@openEuler~]#vimhello.sh(2)在文件中輸入以下內(nèi)容保存并退出:#!/bin/bashecho'HelloWorld!'其中,第一行中的#!是一種特殊的表示符,后面跟著的是解釋此腳本的Shell的路徑,表示的是這個(gè)腳本使用/bin/bash來(lái)解釋并執(zhí)行。第3章中介紹過(guò),bash是openEuler操作系統(tǒng)中默認(rèn)使用的Shell解釋器,它與其他的Shell有很好的兼容性,使用得也較為廣泛。如果需要使用其他解釋器,也可以在這里進(jìn)行設(shè)定,如/bin/ksh、/bin/sh等。(3)執(zhí)行hello.sh。一般有兩種方式執(zhí)行.sh文件:#第一種方式[root@openEuler~]#shhello.sh#第二種方式[root@openEuler~]#chmod+xhello.sh[root@openEuler~]#./hello.sh第一種方式是直接使用sh命令調(diào)用腳本。在第二種方式中,chmod是修改文件權(quán)限的命令,chmod+xhello.sh表示對(duì)hello.sh文件賦予可執(zhí)行的權(quán)限,“./”表示執(zhí)行該文件。(4)此時(shí)在終端界面中會(huì)顯示“HelloWorld!”字樣。03010204通常情況下,每一條命令占一行。多行命令Shell腳本執(zhí)行規(guī)則縮進(jìn)無(wú)關(guān)命令分行腳本文件編寫過(guò)程中,每條命令前面的縮進(jìn)不會(huì)影響命令的執(zhí)行。順序執(zhí)行Shell腳本中的命令將按照從上到下的順序執(zhí)行。如果必須將多條命令寫在同一行,命令之間可以用分號(hào)進(jìn)行分隔,區(qū)分執(zhí)行的先后順序。掌握數(shù)據(jù)交互輸入輸出命令read命令read命令用于讀取標(biāo)準(zhǔn)輸入的下一行。在標(biāo)準(zhǔn)輸入中,新一行從開始到換行符前包含的所有字符會(huì)被完整讀取,同時(shí)也可以將其賦給相應(yīng)的變量。此外,read命令還可以結(jié)合echo命令,實(shí)現(xiàn)讀取輸入與輸出的功能?!臼纠?-17】#使用read命令讀取輸入中的5個(gè)字符,并提示信息“inputword:”[root@openEuler~]#read-p"inputword:"-n5inputword:abcdfecho命令echo命令支持將信息發(fā)送到標(biāo)準(zhǔn)的輸出設(shè)備,此時(shí),傳輸?shù)男畔⒁宰址姆绞奖4?。除此之外,echo命令還可以用來(lái)輸出變量的值?!臼纠?-18】#使用echo命令輸出“HelloWorld”,兩個(gè)單詞間用“Tab”鍵隔開[root@openEuler~]#echo-e"Hello\tWorld"Hello Worldprintf命令如%s表示輸出字符串,%d表示輸出整數(shù)等。功能概述格式替代符printf命令和echo命令功能類似,可輸出變量的值,支持按指定格式輸出結(jié)果?!臼纠?-19】#使用printf命令輸出“HelloWorld”并換行[root@openEuler~]#printf"Hello\nWorld"HelloWorld#使用printf命令輸出[root@openEuler~]#printf"%s\t%s\t\n%s"AnnyBobCandyAnnyBobCandy處理特殊字符引用01040203在一對(duì)雙引號(hào)中的大部分字符表示其字面含義,支持變量引用、命令替換等。在一對(duì)單引號(hào)中的所有字符都會(huì)表示其字面含義,但單引號(hào)本身不能出現(xiàn)在一對(duì)單引號(hào)中。轉(zhuǎn)義字符使用轉(zhuǎn)義字符可以使緊隨其后的第一個(gè)特殊字符取其字面含義,如echo$會(huì)得到結(jié)果$。引用機(jī)制類型單引號(hào)允許將腳本中多行的內(nèi)容重定向到一個(gè)命令,可避免使用臨時(shí)文件。雙引號(hào)Here-documentHere-document應(yīng)用命令語(yǔ)法格式:command<<IDENT...IDENT其中,<<表示引導(dǎo)的標(biāo)記,IDENT表示限定符,它可以由開發(fā)人員自行命名。在兩個(gè)IDENT限定符之間的所有內(nèi)容會(huì)被當(dāng)作一個(gè)文件,并用作command的標(biāo)準(zhǔn)輸入。其中常用的限定符EOF(EndOfFile,文件結(jié)束符)往往用來(lái)表示自定義終止符。當(dāng)然,既然是自定義的,也可以將其設(shè)置為其他名字,如ENDOFFILE等也都是可以的。EOF一般會(huì)配合cat命令來(lái)實(shí)現(xiàn)多行文本輸出的功能?!臼纠?-25】#使用cat命令輸出多行文本[root@openEuler~]#cat<<EOF>HelloWorld!>Thisisthefirsttime.>EOFHelloWorld!Thisisthefirsttime.實(shí)現(xiàn)條件判斷比較語(yǔ)句數(shù)值比較文件比較邏輯比較比較語(yǔ)句類型字符串比較文件比較數(shù)值比較字符串比較字符串比較判斷語(yǔ)句if判斷語(yǔ)句-單分支語(yǔ)句命令格式1:if比較語(yǔ)句then
執(zhí)行語(yǔ)句fi命令格式2:if比較語(yǔ)句;then
執(zhí)行語(yǔ)句fi【示例6-26】#單分支語(yǔ)句[root@openEuler~]#if[20-gt10]>then>echo'bigger'>fibiggerif判斷語(yǔ)句-雙分支語(yǔ)句命令格式:if比較語(yǔ)句then執(zhí)行語(yǔ)句1else執(zhí)行語(yǔ)句2fi【示例6-27】#雙分支語(yǔ)句[root@openEuler~]#if[10-gt20]>then>echo'bigger'>else>echo'smaller'>fismallerif判斷語(yǔ)句-多分支語(yǔ)句命令格式:if比較語(yǔ)句1then執(zhí)行語(yǔ)句1elif比較語(yǔ)句2then執(zhí)行語(yǔ)句2else執(zhí)行語(yǔ)句3fi【示例6-28】#實(shí)現(xiàn)如下功能:如70大于85,輸出excellent;如70大于60,輸出good;否則輸出bad[root@openEuler~]#if[70-gt85]>then>echo'excellent'>elif[70-gt60]>then>echo'good'>else>echo'bad'>figood條件語(yǔ)句語(yǔ)法格式將指定的變量與每一組值進(jìn)行匹配,匹配成功則執(zhí)行相應(yīng)命令。匹配規(guī)則casecase是Shell中的條件語(yǔ)句,它的使用方式與其他編程語(yǔ)言中的類似,可以實(shí)現(xiàn)在一組可能的值中匹配特定值,從而避免使用冗長(zhǎng)的多分支的判斷語(yǔ)句。命令格式:case變量in
取值1|取值2)
執(zhí)行命令1 ;;
取值3)
執(zhí)行命令3 ;; *)
默認(rèn)命令 ;;esac條件語(yǔ)句case【示例6-29】#實(shí)現(xiàn)如下功能:根據(jù)輸入的參數(shù)var的值,輸出對(duì)應(yīng)的結(jié)果[root@openEuler~]#var=6[root@openEuler~]#case$varin>"1")>echo'Monday'>;;>"2")>echo'Tuesday'>;;>"6"|"7")>echo'Weekend'>;;>*)>echo'others'>;;>esacWeekend循環(huán)語(yǔ)句for循環(huán)循環(huán)語(yǔ)句類型當(dāng)判斷條件為假時(shí)執(zhí)行循環(huán),與while循環(huán)相反。支持多種基本格式,可遍歷取值列,如for變量in取值列do執(zhí)行命令done。當(dāng)判斷條件為真時(shí)執(zhí)行循環(huán),如while判斷條件do執(zhí)行命令done。在循環(huán)內(nèi)可以使用其他循環(huán)命令,實(shí)現(xiàn)復(fù)雜的循環(huán)邏輯。while循環(huán)嵌套循環(huán)until循環(huán)for循環(huán)命令格式1:for變量in取值列do
執(zhí)行命令done命令格式2:for變量in取值列;do執(zhí)行命令;done命令格式3:for((初始值;循環(huán)控制條件;變量變化方式))do
執(zhí)行命令donefor命令后的取值列默認(rèn)用空格來(lái)分隔其中的每個(gè)取值。如果在單獨(dú)的取值中有空格,就必須用雙引號(hào)包圍這些值。for命令還支持從變量列表中讀取變量,例如$list。同時(shí)也支持從命令中讀取變量,例如$(cat$file)。如果要使用for命令來(lái)自動(dòng)遍歷/root目錄下的文件,可以在文件名或路徑名中使用通配符。此時(shí)執(zhí)行forfilein/root/*,將會(huì)遍歷/root目錄下的所有文件。while循環(huán)命令格式1:while判斷條件do執(zhí)行命令done只有當(dāng)判斷條件為真時(shí),才會(huì)進(jìn)入循環(huán)執(zhí)行命令。同時(shí)在執(zhí)行命令部分,需要添加改變判斷條件的命令,這樣才能在有限步驟后結(jié)束while循環(huán),否則會(huì)進(jìn)入無(wú)限循環(huán)?!臼纠?-32】#計(jì)算1+2+…+100的值[root@openEuler~]#vimtest_while.sh#!/bin/bashi=1sum=0while[$i-le100]dosum=$[$sum+$i]i=$[$i+1]doneecho$sum[root@openEuler~]#shtest_while.sh5050until循環(huán)命令格式:until判斷條件do執(zhí)行命令done與while命令相比,until命令的工作原理完全相反。當(dāng)判斷條件為真后,until命令才會(huì)退出循環(huán)執(zhí)行命令。但同樣,在執(zhí)行命令部分,也需要添加改變判斷條件的命令,這樣才能在有限步驟后退出循環(huán),否則會(huì)進(jìn)入無(wú)限循環(huán)?!臼纠?-33】#計(jì)算1+2+…+100的值[root@openEuler~]#vimtest_until.sh#!/bin/bashi=1sum=0until[$i-gt100]dosum=$[$sum+$i]i=$[$i+1]doneecho$sum[root@openEuler~]#shtest_until.sh5050例如,兩層for循環(huán)的命令格式如下:for((初始值;循環(huán)控制條件;變量變化方式))do
執(zhí)行命令
for((初始值;循環(huán)控制條件;變量變化方式))do
執(zhí)行命令
donedone嵌套循環(huán)【示例6-34】[root@openEuler~]#vimdouble_loop.sh#!/bin/bashfor((y=1;y<=5;y++))dox=1while[$x-le$y]doecho-n$x((x++))doneechodonebreakn的命令格式如下:for((初始值;循環(huán)控制條件;變量變化方式))do
執(zhí)行命令
for((初始值;循環(huán)控制條件;變量變化方式))doif比較語(yǔ)句
thenbreaknfi
執(zhí)行命令
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 客戶關(guān)系管理系統(tǒng)(CRM)整合考核試卷
- 兒童玩具情感化設(shè)計(jì)的情感認(rèn)知發(fā)展評(píng)估模型考核試卷
- 通風(fēng)設(shè)備智能化對(duì)用戶生活質(zhì)量的提升研究考核試卷
- 交通流量遙感調(diào)查在交通環(huán)境影響評(píng)價(jià)中的應(yīng)用考核試卷
- 制糖業(yè)人力資源結(jié)構(gòu)調(diào)整與優(yōu)化考核試卷
- 印刷機(jī)械故障診斷儀器研究考核試卷
- 牛津深圳版七年級(jí)英語(yǔ)下冊(cè)Units-1-8單元語(yǔ)法復(fù)習(xí)提綱
- 期末綜合素養(yǎng)培優(yōu)卷(九)含解析-人教版五年級(jí)數(shù)學(xué)下冊(cè)
- 2020年成人高考高起專語(yǔ)文現(xiàn)代文寫作訓(xùn)練
- 2025至2030年中國(guó)單焦點(diǎn)人工晶體行業(yè)市場(chǎng)發(fā)展監(jiān)測(cè)及投資戰(zhàn)略規(guī)劃報(bào)告
- 2025年《藥品經(jīng)營(yíng)和使用質(zhì)量監(jiān)督管理辦法》培訓(xùn)試題及答案
- 2025年清華emba面試題及答案
- 燃?xì)獠少?gòu)管理辦法
- 物料請(qǐng)購(gòu)管理辦法
- 羊肚菌栽培及其管理課件
- 教師身體健康管理指南
- 《金恒織襪機(jī)WD2001D-6F操作手冊(cè)》
- 外研版八年級(jí)英語(yǔ)下冊(cè)期末復(fù)習(xí)之閱讀還原【答案+解析】
- 晚期腫瘤病人的臨終關(guān)懷與護(hù)理
- 肝膿腫病人護(hù)理
- 2025至2030中國(guó)薏米市場(chǎng)運(yùn)行形勢(shì)與投資前景預(yù)測(cè)分析報(bào)告
評(píng)論
0/150
提交評(píng)論