




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
Shell數(shù)組與函數(shù)任務2:創(chuàng)建和使用函數(shù)目錄/Contents01020304定義和調(diào)用函數(shù)函數(shù)參數(shù)函數(shù)返回值變量作用域01定義和調(diào)用函數(shù)定義和調(diào)用函數(shù)函數(shù)是計算機編程中的一個重要概念,幾乎所有的編程語言都支持函數(shù)。函數(shù)提供一種結(jié)構化的方式來組織和重用代碼,可以將一段邏輯相關的代碼封裝在一個函數(shù)中,并在需要的時候進行調(diào)用。在Shell中,可自定義函數(shù)并在腳本中調(diào)用,通過參數(shù)傳遞和返回值處理來實現(xiàn)復雜的邏輯處理,以降低代碼的重復性,提高代碼的可讀性和可維護性在Shell中定義函數(shù)的基本語法如下:#方式1function_name(){#函數(shù)體}#方式2functionfunction_name{#函數(shù)體
#returnvalue}#function_name表示函數(shù)名,函數(shù)名不能以數(shù)字開頭,可以包含字母、數(shù)字和下畫線。#函數(shù)體位于花括號內(nèi),可以包含任意數(shù)量的命令和語句以及可選的參數(shù)。#value表示函數(shù)的返回值,函數(shù)的返回值可以使用return語句指定,如果未指定返回值,則默認返回最后一個命令的退出狀態(tài)碼。定義和調(diào)用函數(shù)定義簡單的函數(shù),用于輸出當前日期和時間。print_datetime(){echo"Thecurrentdateandtimeare:$(date)"}定義函數(shù)后,可以在腳本中使用函數(shù)名來調(diào)用函數(shù),也可以給函數(shù)傳遞參數(shù)。調(diào)用函數(shù)的語法如下:function_name#其中,function_name表示要調(diào)用的函數(shù)的名稱,arguments表示傳遞給函數(shù)的參數(shù),這些參數(shù)可以是位置參數(shù)或關鍵字參數(shù)。在Shell腳本中調(diào)用函數(shù),輸出當前日期和時間。print_datetime(){echo"Thecurrentdateandtimeare:$(date)"}print_datetime02函數(shù)參數(shù)位置參數(shù)在執(zhí)行函數(shù)時,函數(shù)可以接收輸入?yún)?shù)并執(zhí)行相應的操作,這些參數(shù)可以是位置參數(shù)或關鍵字參數(shù)。位置參數(shù)是指在函數(shù)調(diào)用時按照參數(shù)的位置順序傳遞給函數(shù)的值,這些參數(shù)按照在命令行中出現(xiàn)的順序從1開始依次編號。在函數(shù)體內(nèi)部,位置參數(shù)可以通過$1,$2,$3,...,$n的形式來引用,其中$1表示第一個參數(shù),$2表示第二個參數(shù),以此類推,$n表示第n個參數(shù)。調(diào)用函數(shù)并指定傳遞的參數(shù)值時,這些參數(shù)值會自動賦給位置參數(shù)。常見的位置參數(shù)如下表所示。序號參數(shù)描述1$0表示當前腳本或函數(shù)的名稱2$@表示所有位置參數(shù)的列表,將每個位置參數(shù)作為獨立的字符串返回3$#表示位置參數(shù)的個數(shù),即傳遞給函數(shù)的參數(shù)數(shù)量4$*表示所有位置參數(shù)的列表,將所有位置參數(shù)作為一個字符串返回5$?用于獲取上一個命令或函數(shù)的退出狀態(tài)碼(返回值)。它表示上一個命令或函數(shù)的執(zhí)行結(jié)果位置參數(shù)在函數(shù)中輸出不同位置參數(shù)的示例如下:#!/bin/bashfunctionfoo(){echo"Thescriptnameis:$0"echo"Thefirstargumentis:$1"echo"Thesecondargumentis:$2"echo"Thenumberofargumentsis:$#"echo"Allargumentsasasingleword:$*"echo"Allargumentsasseparatewords:$@"}fooarg1arg2arg3#執(zhí)行腳本bashfunc-para.sh腳本定義了一個名為foo的函數(shù),該函數(shù)使用了一些特殊的Shell參數(shù)來處理腳本和函數(shù)的輸入?yún)?shù)。它通過調(diào)用foo函數(shù)并傳遞arg1arg2arg3作為參數(shù)來展示這些特殊參數(shù)的使用。$0是特殊參數(shù),代表當前執(zhí)行的腳本的名字。在函數(shù)內(nèi)部,它仍然代表腳本名,而不是函數(shù)名。$1是傳遞給函數(shù)或腳本的第一個參數(shù),在這個腳本的上下文中,它將是arg1。$2代表傳遞給函數(shù)或腳本的第二個參數(shù),這里為arg2。$#代表傳遞給函數(shù)的參數(shù)個數(shù)。在這個腳本中,由于傳遞給foo的參數(shù)有三個,$#將會是3。$*將所有傳遞給函數(shù)的參數(shù)視為一個整體,參數(shù)之間默認由空格分隔。如果要將所有參數(shù)視為一個單一字符串,經(jīng)常會用到"$*"。$@與$*不同的是,$@會將每個參數(shù)作為獨立的引用字符串處理。在腳本中經(jīng)常用于循環(huán)遍歷所有參數(shù),特別是當參數(shù)本身可能包含空格時。位置參數(shù)在函數(shù)中使用位置參數(shù)來計算兩個數(shù)的和,具體示例如下:#定義一個函數(shù),計算兩個數(shù)的和sum(){localnum1=$1#使用第一個位置參數(shù)localnum2=$2#使用第二個位置參數(shù)localresult=$((num1+num2))echo"Thesumof$num1and$num2is:$result"}#調(diào)用函數(shù),并傳遞位置參數(shù)sum1020上述示例中,定義了一個名為sum的函數(shù),它接收兩個位置參數(shù)$1和$2。在函數(shù)體內(nèi)部,將位置參數(shù)的值分別賦給num1和num2變量,并使用$((num1+num2))表達式進行加法運算,得到和result。最后通過調(diào)用sum函數(shù)來執(zhí)行加法運算,在函數(shù)調(diào)用中,按照順序傳遞參數(shù)10和20,這些參數(shù)將作為位置參數(shù)傳遞給函數(shù)。關鍵字參數(shù)關鍵字參數(shù)是指在函數(shù)調(diào)用時使用關鍵字-值對的形式傳遞給函數(shù)的參數(shù)。使用關鍵字參數(shù),可以明確指定參數(shù)的名稱,而不依賴于參數(shù)的位置順序。在函數(shù)體內(nèi)部,可以使用${parameter_name}的形式來訪問傳遞的關鍵字參數(shù)。調(diào)用函數(shù)時,使用parameter_name=value的形式來給函數(shù)傳遞參數(shù)。其中,函數(shù)print_info接收關鍵字參數(shù)name、age和country。在函數(shù)內(nèi)部,通過for語句將關鍵字參數(shù)傳遞給函數(shù)的參數(shù)列表$@,使用case語句對參數(shù)進行解析。函數(shù)參數(shù)#!/bin/bashfunctionprint_info(){localname=""localage=""localcountry=""
forargin"$@";docase$arginname=*)name=${arg#*=};;age=*)age=${arg#*=};;country=*)country=${arg#*=};;esacdone
echo"Name:$name,Age:$age,Country:$country"}print_infoname=Johnage=30country=USA在函數(shù)中使用關鍵字參數(shù)來輸出給定信息,具體示例如下:腳本中的print_info函數(shù)接收三個模擬的關鍵字參數(shù):name、age和country。在函數(shù)內(nèi)部,使用for循環(huán)遍歷函數(shù)參數(shù)列表$@。對于每個參數(shù),使用case語句和參數(shù)擴展來提取關鍵字后的值。通過移除等號=及其前面的部分來實現(xiàn)(${arg#*=}),保留參數(shù)值。最后,函數(shù)打印出提取的參數(shù)值。03函數(shù)返回值函數(shù)返回值在Shell腳本中,函數(shù)可以通過return語句返回一個值,返回值可以是整數(shù),取值范圍為0~255。返回值用于表示函數(shù)執(zhí)行的狀態(tài)或結(jié)果,并可以在函數(shù)調(diào)用時進行處理或判斷。當調(diào)用函數(shù)并接收其返回值時,$?變量保存了上一個命令或函數(shù)的退出狀態(tài)碼,可以使用$?變量來獲取函數(shù)的返回值。functionmy_func(){localresult="hello"return42}my_funcecho"my_funcreturned$?"#執(zhí)行腳本,輸出結(jié)果my_funcreturned42函數(shù)返回值函數(shù)的返回值默認是整數(shù),如果需要返回其他類型的值,如字符串或其他數(shù)據(jù),可使用echo命令將值輸出到標準輸出中,然后在調(diào)用函數(shù)時使用命令替換來獲取返回值。在上述示例中,my_func函數(shù)將字符串hello輸出到標準輸出中,然后在調(diào)用my_func時使用命令替換將輸出的字符串賦給變量result,最終輸出的結(jié)果為my_funcreturnedhello。functionmy_func(){localresult="hello"echo"$result"}result=$(my_func)echo"my_funcreturned$result"#執(zhí)行腳本,輸出結(jié)果my_funcreturnedhello04變量作用域變量作用域變量作用域指的是變量可以被訪問的范圍。在Shell函數(shù)中,變量分為全局變量和局部變量,全局變量在腳本的任何地方都可以訪問,而局部變量僅在函數(shù)內(nèi)部可訪問。默認情況下,在函數(shù)內(nèi)部可以直接訪問和使用函數(shù)外部定義的變量,而無須使用特殊的關鍵字,這樣的行為可能導致變量混淆和數(shù)據(jù)錯誤修改。為了避免這種情況,可以使用local或者declare關鍵字來聲明局部變量,使其僅在當前函數(shù)內(nèi)部有效,不會影響外部同名變量的值。在函數(shù)內(nèi)部使用local關鍵字聲明的變量,只在該函數(shù)內(nèi)部有效,函數(shù)外部無法訪問該變量。使用local關鍵字聲明局部變量:function_name(){localvariable_name=value#函數(shù)內(nèi)部代碼塊}變量作用域使用declare關鍵字聲明的變量,如果是在函數(shù)內(nèi)部聲明的,則為局部變量,只在該函數(shù)內(nèi)部有效;如果是在函數(shù)外部聲明的,則為全局變量,在整個腳本中有效。使用declare關鍵字聲明局部變量:注意:定義函數(shù)不會導致函數(shù)被執(zhí)行,在沒有主動調(diào)用函數(shù)時,無論是全局變量還是局部變量,都不能在函數(shù)外部和內(nèi)部調(diào)用。function_name(){declarevariable_name=value#函數(shù)內(nèi)部代碼塊}變量作用域全局變量和使用local聲明的局部變量的作用域,具體示例如下:#!/bin/bash#全局變量global_variable="Global"functionmy_function(){#局部變量
locallocal_variable="Local"echo"Insidefunction:$local_variable"echo"Insidefunction:$global_variable"}echo"Outsidefunction:$local_variable"echo"Outsidefunction:$global_variable"#調(diào)用函數(shù)my_function#執(zhí)行腳本,輸出結(jié)果Outsidefunction:Outsidefunction:GlobalInsidefunction:LocalInsidefunction:Globa全局變量global_variable被設置為字符串"Global"。在腳本中任何地方都是可見的。定義了一個名為my_function的函數(shù),在這個函數(shù)內(nèi)部聲明了一個局部變量local_variable,被設置為字符串"Local"。局部變量只在函數(shù)內(nèi)部可見。函數(shù)內(nèi)部使用echo命令打印局部變量local_variable和全局變量global_variable的值。在函數(shù)外部也使用echo嘗試打印這兩個變量的值。由于local_variable是局部變量,它在函數(shù)外部不可見,所以打印為空。而全局變量global_variable在任何地方都可見,因此它的值"Global"被打印出來。在腳本的末尾調(diào)用了my_function函數(shù),腳本輸出函數(shù)內(nèi)外對變量的打印結(jié)果。變量作用域全局變量和使用declare聲明的局部變量的作用域,具體示例如下:global_var="GlobalVariable"modify_variable(){declare-llocal_var="LOWercase"echo"Insidethefunction:"echo"Globalvariable:$global_var"echo"Localvariable:$local_var"}modify_variableecho"Outsidethefunction:"echo"Globalvariable:$global_var"echo"Localvariable:$local_var"#執(zhí)行腳本,輸出結(jié)果Insidethefunction:Globalvariable:GlobalVariableLocalvariable:lowercaseOutsidethefunction:Globalvariable:GlobalVariableLocalvariable:global_var是一個全局變量,賦值為"GlobalVariable"。全局變量在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 有機化學原料的環(huán)保合成方法優(yōu)化研究進展分析預測考核試卷
- 機器人服務創(chuàng)新模式與實踐案例考核試卷
- 景區(qū)旅游信息化平臺運營與管理考核試卷
- 制作氣球培訓課件
- 家電公司轉(zhuǎn)讓合同范本
- 委托汽車融資合同范本
- 正規(guī)吊車租賃合同范本
- 圍墻制作安裝合同范本
- 項目建設策劃合同范本
- 酒店餐飲服務流程優(yōu)化與提升制度
- 人工智能大模型
- 高空作業(yè)車外墻施工方案
- 川教版信息技術五年級下冊全冊教學設計教案
- 重慶市江北區(qū)社區(qū)專職工作者招考聘用高頻500題難、易錯點模擬試題附帶答案詳解
- 掩體構筑與偽裝教學法教案
- 讓我們一起去追“星”!兩彈一星之核彈老人魏世杰課件高二下學期愛國主義教育主題班會
- 2024年日歷表電子版(帶農(nóng)歷-含周數(shù)-周一開始-打印版)
- 2024年計算機組成原理期末考試試題及答案共五套
- DB32T-認知障礙老年人康復訓練服務規(guī)范編制說明
- 三年級上冊科學全冊知識點2024年新青島版六三制
- 網(wǎng)絡營銷(第三版) 課件 項目一 網(wǎng)絡營銷概述
評論
0/150
提交評論