《Linux操作系統(tǒng)》08Shell編程高級_第1頁
《Linux操作系統(tǒng)》08Shell編程高級_第2頁
《Linux操作系統(tǒng)》08Shell編程高級_第3頁
《Linux操作系統(tǒng)》08Shell編程高級_第4頁
《Linux操作系統(tǒng)》08Shell編程高級_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

八目項Shell編程高級企業(yè)級卓越人才培養(yǎng)方案(信息類專業(yè)集群)學(xué)習(xí)目標熟悉數(shù)組的相關(guān)操作掌握函數(shù)的調(diào)用掌握任務(wù)的管理數(shù)組定義數(shù)組

數(shù)組是能夠存儲多個值的變量。數(shù)組的值可以被單獨引用,也可以使用變量名來引用整個數(shù)組。如果要給某個變量設(shè)置多個值,可以把值放在括號內(nèi)。其格式如下所示。變量名=(值1值2值3…)注意:值與值之間需要用空格分隔。為變量設(shè)置多個值,如示例代碼CORE0801所示。代碼array=(13578“abc”‘def’)echo${array[*]}數(shù)組數(shù)組操作(1)數(shù)組賦值為數(shù)組指定下標賦值,如果指定的下標已經(jīng)超過當(dāng)前數(shù)組的大小,新賦的值被追加到數(shù)組的尾部。如果被賦值的下標已經(jīng)存在,那么在該下標的新值會代替原來的值。為數(shù)組賦值的格式如下所示。數(shù)組名[下標]=值(2)調(diào)用數(shù)組元素

在調(diào)用數(shù)組某個元素時,必須用代表該元素在數(shù)組位置的下標值來調(diào)用。下標值要用方括號括起來。當(dāng)要顯示整個數(shù)組的值,可用“*”作為通配符放在下標的位置。調(diào)用數(shù)組元素格式如下所示。${數(shù)組名[下標]}數(shù)組數(shù)組操作(3)刪除數(shù)組

用unset命令刪除數(shù)組中的某個值,其格式如下所示。unset數(shù)組名[下標](4)獲取數(shù)組長度

可使用如下所示格式獲取數(shù)組長度。變量名=${#數(shù)組名[*]}或${#數(shù)組名[@]}(5)分片訪問

分片訪問指的是訪問從指定下標開始到指定下標結(jié)束的值。其格式如下所示。${數(shù)組名[@或*]:開始下標:結(jié)束下標}數(shù)組數(shù)組操作(6)模式替換

模式替換其格式是指把數(shù)組中的舊值替換為新值,其格式如下所示。${數(shù)組名[@或*]/舊值/新值}(7)遍歷數(shù)組

使用循環(huán)遍歷數(shù)組,如代碼所示。代碼array=(13579“asdf”)forvin${array[@]};doecho$v;done函數(shù)函數(shù)簡介Shell腳本可以作為一種編程語言來使用,大部分的編程語言都有函數(shù),Shell也不例外。但是,由于Shell是一個解釋器,所以它不能對程序進行編譯,而是在從磁盤加載程序時對程序進行解釋,而程序的加載和解釋都是非常耗時的。為了解決這個問題,許多Shell都包含了函數(shù),Shell把這些函數(shù)放在內(nèi)存中,這樣每次執(zhí)行函數(shù)時就不必再從磁盤讀入。Shell以一種內(nèi)部格式來存放這些函數(shù),這樣就不必耗費大量的時間來解釋函數(shù)。雖然,在Shell中函數(shù)并非是必須的編程元素,但是通過使用函數(shù),可以更好的組織程序。將一些相對獨立的代碼變成函數(shù),可以提高程序的可讀性和重用性。避免重復(fù)編寫大量相同的代碼。函數(shù)函數(shù)簡介LinuxShell可以定義的函數(shù)在Shell腳本中可以實時調(diào)用。Shell中函數(shù)的定義格式如下兩種。格式一如下所示。[function]函數(shù)名(){action[returnint]}格式二如下所示。function函數(shù)名{action[returnint]}函數(shù)無參函數(shù)(1)無返回值的函數(shù)

無返回值的函數(shù),如代碼所示。代碼first(){echo"Thefirstshellfunction"#第一個Shell函數(shù)}echo"-----functionbeginstoexecute-----"#函數(shù)開始firstecho"-----functionexecution-----"#函數(shù)結(jié)束函數(shù)無參函數(shù)(2)有返回值的函數(shù)

有返回值的函數(shù)有return語句,且函數(shù)返回值小于255。定義一個函數(shù)實現(xiàn)先后輸入的兩個數(shù)相加的功能,如代碼所示。示例代碼CORE0812定義函數(shù)并實現(xiàn)數(shù)值相加firstWithReturn(){echo"Thisfunctionaddstwonumberstotheinput"echo"Enterthefirstnumber:"readaNumecho"Entersecondnumbers:"readanotherNumecho"Thetwonumbersare$aNumand$anotherNum!"return$(($aNum+$anotherNum))}firstWithReturnecho"Thesumofthetwoinputnumbersis$?!"函數(shù)有參函數(shù)

有參函數(shù)是指在調(diào)用函數(shù)時向函數(shù)傳遞參數(shù)。在函數(shù)體內(nèi)部,通過“$n”的形式來獲取參數(shù)的值(當(dāng)n>=10時,需要使用“${n}”來獲取參數(shù)),其中n表示第幾個參數(shù),例如,$1表示第一個參數(shù),$2表示第二個參數(shù)...可以用如表所示的字符組合處理傳入的參數(shù)。字符組合說明$#傳遞到腳本的參數(shù)個數(shù)$*以一個單字符串顯示所有向腳本傳遞的參數(shù)$$腳本運行的當(dāng)前進程ID號$!后臺運行的最后一個進程的ID號$@與$*相同,但是使用時加引號,并在引號中返回每個參數(shù)$-顯示Shell使用的當(dāng)前選項,與set命令功能相同$?顯示最后命令的退出狀態(tài)。0表示沒有錯誤,其他任何值表明有錯誤函數(shù)函數(shù)與數(shù)組(1)向函數(shù)傳數(shù)組參數(shù)

在向腳本函數(shù)傳遞數(shù)組變量時,將數(shù)組變量當(dāng)作單個參數(shù)傳遞的話,它不會起作用。如代碼所示。代碼functiontest1{echo"Theparametersare:$@"thisarray=$1echo"Thereceivedarrayis${thisarray[*]}"}myarray=(12345)echo"Theoriginalarrayis:${myarray[*]}"test1$myarray函數(shù)函數(shù)庫使用函數(shù)可以在腳本中省去一些輸入工作,但當(dāng)遇到要在多個腳本中使用同一段代碼時,為了使用一次而在每個腳本中都定義同樣的函數(shù)太過麻煩。在BashShell中可以把某些常用的功能,獨立存放在一些獨立的文件中,這些文件就稱為“函數(shù)庫”。Shell腳本缺乏第三方函數(shù)庫,所以在很多時候需要系統(tǒng)管理人員根據(jù)實際工作的需要自行開發(fā)。函數(shù)遞歸函數(shù)由于局部變量自成體系,所以除了從腳本命令行處獲得的變量外,自成體系的函數(shù)不需要使用任何外部資源,這個特性使得函數(shù)可以遞歸地調(diào)用。函數(shù)調(diào)用自己從而得到結(jié)果,稱為遞歸函數(shù)。通常遞歸函數(shù)都有一個最終可以迭代到的值。正則表達式正則表達式簡介

正則表達式是用某種模式去匹配由一串字符和元字符構(gòu)成的字符串的公式。如果數(shù)據(jù)匹配正則表達式的公式,它就會被接受并進一步處理;如果數(shù)據(jù)不匹配模式,它就會被濾掉。其過程如圖所示。正則表達式符號的含義

正則表達式模式利用通配符來描述數(shù)據(jù)流中的一個或多個字符。Linux中有很多場景都可以使用通配符來描述不確定的數(shù)據(jù),如表所示。字符含義.匹配除換行符之外的任意一個字符*匹配前一個字符0次或任意多次\{n,m\}匹配前面的字符n到m次^匹配開頭的字符$匹配結(jié)尾的字符[]匹配方括號內(nèi)出現(xiàn)的任一字符\轉(zhuǎn)義字符\<和\>用于界定單詞的左邊界和右邊界\d匹配一個數(shù)字,相當(dāng)于[0-9](使用時需要-P參數(shù))\b匹配單詞的邊界\B匹配非單詞的邊界\w匹配字母、數(shù)字和下劃線,相當(dāng)于[A-Za-z0-9]\W匹配非字母、非數(shù)字、非下劃線,相當(dāng)于[^A-Za-z0-9]\n匹配一個換行符\r匹配一個回車符\t匹配一個制符表\f匹配一個換頁符\s匹配任何空白字符\S匹配任何非空白字符正則表達式應(yīng)用場景(1)目錄文件計數(shù)一個Shell腳本會對PATH環(huán)境變量中定義的目錄里的可執(zhí)行文件進行計數(shù)。(2)解析郵件地址如今,電子郵件地址已經(jīng)成為一種重要的通信方式。由于郵件地址的形式眾多,驗證郵件地址成為腳本程序員的一個不小的挑戰(zhàn)。自動化自動化簡介Linux系統(tǒng)的Web網(wǎng)站在運營狀態(tài)時,常需要對網(wǎng)站進行維護,例如查看資源剩余并做出響應(yīng)、日志分割、數(shù)據(jù)整理、在特定狀態(tài)執(zhí)行特定任務(wù)等等,這些都會需要Linux能實現(xiàn)自動執(zhí)行某些任任務(wù)。實現(xiàn)Linux自動化有如下所示好處。節(jié)省人力,一個腳本即可完成原來需要多次輸入的命令。在夜晚自動執(zhí)行可以避開網(wǎng)站流量高峰期,不影響網(wǎng)站白天的效率。準確,設(shè)置完善的情況下,不會出差錯。不需要頻繁的輸入某些命令,才能執(zhí)行所需功能。自動化任務(wù)管理(1)at實現(xiàn)定時任務(wù)at命令能實現(xiàn)一個簡單的定時任務(wù)程序,它只能進行一次性的定時任務(wù),其格式如下。at[選項]time常用的選項如表所示選項說明-l顯示用戶的計劃任務(wù)-d清空計劃任務(wù)-c查看特定的計劃任務(wù)-fFILE從文件中讀取計劃任務(wù)命令自動化任務(wù)管理(2)crontab實現(xiàn)定時任務(wù)cron是一個linux下的定時執(zhí)行工具,可以在無需人為干預(yù)的情況下定時地執(zhí)行任務(wù),它由crond進程和一組表(crontab文件)組成。crond進程是linux下用來周期性的執(zhí)行某種任務(wù)或等待處理某些事件的一個守護進程(守護進程是一種后臺進程)。crontab文件定義了每小時、每天、每周、每月的任務(wù)。每個用戶都有一個以用戶名命名的crontab文件,存放在/var/spool/cron/crontabs目錄里,但在一個較大的系統(tǒng)中,系統(tǒng)管理員一般只會在整個系統(tǒng)保留一個這樣的文件。管理員可以通過編輯/etc/下面的cron.deny和cron.allow這兩個文件來禁止或允許用戶擁有自己的crontab文件。用戶所建立的crontab文件中,每一行都代表一項任務(wù),每行的每個字段代表一項設(shè)置,它的格式共分為六個字段,前五段是時間設(shè)定段,第六段是要執(zhí)行的命令段,格式如下所示minutehourdaymonthweekcommand自動化任務(wù)管理每個字段所代表的含義如表所示。字段含義minute表示分鐘,可以是從0到59之間的任何整數(shù)hour表示小時,可以是從0到23之間的任何整數(shù)day表示日期,可以是從1到31之間的任何整數(shù)month表示月份,可以是從1到12之間的任何整數(shù)week表示星期幾,可以是從0到7之間的任何整數(shù),這里的0或7代表星期日command要執(zhí)行的命令,可以是系統(tǒng)命令,也可以是自己編寫的腳本文件Linux日志系統(tǒng)Linux日志系統(tǒng)(1)連接時間日志連接時間日志由多個程序執(zhí)行,把記錄寫入到/var/og/wtmp和/var/run/utmp中。Login等程序更新wtmp和utmp文件,使系統(tǒng)管理員能夠跟蹤對應(yīng)用戶在何時登錄到系統(tǒng)。(2)進程統(tǒng)計日志進程統(tǒng)計日志由系統(tǒng)內(nèi)核執(zhí)行。當(dāng)一個進程終止時,為每個進程向統(tǒng)計文件(pacct或acct)中寫一個記錄。進程統(tǒng)計的目的是為系統(tǒng)中的基本服務(wù)提供命令使用統(tǒng)計。(3)錯誤日志錯誤日志由sysogd(8)執(zhí)行。各種系統(tǒng)守護進程、用戶程序和內(nèi)核通過sysog(3)向文件/var/og/messages報告值得注意的事件。另外還有許多UNIX類程序創(chuàng)建日志,像HTTP和FTP這樣提供網(wǎng)絡(luò)服務(wù)的服務(wù)器也有詳細的日志。Linux日志系統(tǒng)Linux日志系統(tǒng)Linux中常見的日志文件如表所示日志文件說明/var/log/message

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論