版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第6章Shell腳本編程基礎深入了解Shell腳本編程中的變量知識變量的使用-定義變量在Shell里定義變量時,不需要指定數(shù)據(jù)類型,通過直接賦值就可以實現(xiàn)對變量的定義?!臼纠?-1】#定義變量a并賦值[root@openEuler~]#a=1Shell在賦值變量時,無論是否使用引號,無論將整數(shù)還是小數(shù)賦給變量,值都會默認以字符串的形式進行存儲。這一點與其他編程語言有所不同。此外,也可以使用declare關鍵字顯式定義變量的類型。declare后可加參數(shù)用于定義變量的類型,如-i表示定義整數(shù)變量,-a表示定義數(shù)組變量,-f表示定義函數(shù)變量,-r表示定義只讀變量。但在一般情況下,如果沒有定義變量類型的需求,只需要在編寫Shell代碼時注意變量的類型即可?!臼纠?-2】#顯式定義整數(shù)變量aa[root@openEuler~]#declare-iaa變量的命名有以下規(guī)范。
只能由英文字母、數(shù)字和下畫線組成。
首個字符不能為數(shù)字。
不能使用標點符號。
不能使用bashShell里的保留關鍵字(保留關鍵字可使用help命令查看)。如1bce3、abc*def等是無效的變量名,_test、var1等是可以正常使用的變量名。變量的使用-引用變量如果想要引用已經(jīng)定義過的變量,只需要使用“$變量名”。變量名前也可以選擇不加或者加花括號“{}”,加花括號有助于開發(fā)者識別變量的邊界,是一個良好的編程習慣。變量的使用-賦值變量賦值操作可以在一條命令中實現(xiàn)定義和賦值變量。假設變量名為var,值為value。此時可以用下面3種方式對var進行定義及賦值:var=valuevar='value'var="value"要注意的是,如果值value中不包含任何如空格、縮進等特殊字符時,就可以省略引號。同時,賦值的等號周圍一定不能有空格。已經(jīng)被定義過的變量,可以被重新賦值。但要注意,如果使用readonly命令,將變量定義為只讀變量后,除了第一次賦值外,在后續(xù)嘗試更改只讀變量值時,系統(tǒng)會報錯,值將無法被修改。變量的使用-賦值變量【示例6-3】#定義只讀變量var1并賦值為ok,后嘗試重新賦值為yes,系統(tǒng)會報錯[root@openEuler~]#readonlyvar1='ok'[root@openEuler~]#var1='yes'-bash:var:readonlyvariable賦值時使用單引號和雙引號也是有區(qū)別的。使用單引號“''”為變量賦值時,單引號里的內(nèi)容就是輸出的內(nèi)容。即使內(nèi)容中包含變量和命令,也會將它們原樣輸出。因此,單引號比較適合定義純字符串的情況,或者是不需要解析變量或者命令的情況。【示例6-4】#使用單引號為變量賦值并輸出[root@openEuler~]#var2=123[root@openEuler~]#var3='ABC=$var2'[root@openEuler~]#echo$var3ABC=$var2而如果使用雙引號“""”為變量賦值,在輸出前會解析引號內(nèi)的變量和命令。因此,雙引號比較適合字符串中含有變量和命令,并且希望能先對其進行解析后輸出的情況。
變量的使用-賦值變量【示例6-5】#使用雙引號為變量賦值并輸出[root@openEuler~]#var2=123[root@openEuler~]#var4="ABC=$var2"[root@openEuler~]#echo$var4ABC=123除此之外,Shell也支持直接將命令的執(zhí)行結果賦給變量。假設變量名為var,命令為command。此時可以用以下的兩種方式進行賦值:var=`command`var=$(command)第一種方式中,使用了反引號“``”將命令包圍。第二種方式中,使用了$()將命令包圍。兩種方式都能輸出command對應的執(zhí)行結果,它們執(zhí)行的效果相同。變量的使用-刪除變量如果想要刪除已經(jīng)定義的變量,可以使用unset命令。變量被刪除后,將無法再次使用?!臼纠?-8】#刪除變量var1[root@openEuler~]#unsetvar125431用戶級用戶級環(huán)境變量寫在登錄用戶的~/.bash_profile文件中,只對當前用戶有效。通過不同的文件來配置不同級別的環(huán)境變量,方便對環(huán)境變量進行分類管理。系統(tǒng)級環(huán)境變量寫在系統(tǒng)的配置文件/etc/profile中,對操作系統(tǒng)中的所有用戶都有效。環(huán)境變量介紹-環(huán)境變量級別系統(tǒng)級配置方式會話級環(huán)境變量只在當前的Shell中有效,當該Shell關閉時,變量及其值就會失效。不同級別的環(huán)境變量具有不同的作用范圍,這有助于根據(jù)實際需求來設置和管理環(huán)境變量。會話級作用范圍環(huán)境變量介紹-會話級環(huán)境變量添加命令如果在父進程中創(chuàng)建一個新的進程來執(zhí)行Shell命令,那么這個新的進程被稱作子進程。子進程產(chǎn)生時,會繼承父進程的環(huán)境變量。傳遞規(guī)則兩個沒有父子關系的Shell進程是不能傳遞環(huán)境變量的,同時也只能由父到子地向下傳遞而不能反向傳遞環(huán)境變量。子進程繼承使用export命令,可以在當前Shell中添加會話級環(huán)境變量。被添加會話級環(huán)境變量的Shell進程稱為父進程?!臼纠?-9】#在父進程中定義會話級環(huán)境變量a[root@openEuler~]#exporta=1[root@openEuler~]#echo$a1#進入子進程,子進程可以繼承父進程的環(huán)境變量a[root@openEuler~]#bash[root@openEuler~]#echo$a1#當Shell關閉后,子進程無法繼續(xù)使用環(huán)境變量a[root@openEuler~]#exit環(huán)境變量介紹-用戶級環(huán)境變量【示例6-10】#定義用戶級環(huán)境變量b [root@openEuler~]#vim~./bash_profileexportb=1#使用source命令使環(huán)境變量生效[root@openEuler~]#source~/.bash_profile[root@openEuler~]#echo$b1#當再次使用該用戶登錄Shell會話,仍可繼續(xù)使用環(huán)境變量b[root@openEuler~]#echo$b1在登錄用戶的~/.bash_profile文件中寫入對應環(huán)境變量,后續(xù)用該用戶登錄時,能使用該用戶級環(huán)境變量。環(huán)境變量介紹-系統(tǒng)級環(huán)境變量【示例6-11】#定義系統(tǒng)級環(huán)境變量c[root@openEuler~]#vim/etc/profileexportc=1#使用source命令使環(huán)境變量生效[root@openEuler~]#source/etc/profile#當使用root或者其他用戶登錄Shell會話,均可繼續(xù)使用環(huán)境變量c[root@openEuler~]#echo$c1【示例6-12】#查看當前用戶的主目錄[root@openEuler~]#echo$HOME/root#查看當前使用的Shell類型[root@openEuler~]#echo$SHELL/bin/bash#查看當前系統(tǒng)的語言[root@openEuler~]#echo$LANGen_US.UTF-8在系統(tǒng)配置文件/etc/profile中寫入對應環(huán)境變量,操作系統(tǒng)中的所有用戶都能使用該系統(tǒng)級環(huán)境變量。環(huán)境變量名含義HISTSIZE保存的歷史命令記錄的數(shù)量HOSTNAME當前的主機名稱HOME當前的用戶主目錄HTTP_PROXY當前使用的代理服務器LANG當前系統(tǒng)的語言LOGNAME當前登錄的用戶名PATH當前的環(huán)境變量SHELL當前使用的Shell類型TREM當前終端類型TMOUT系統(tǒng)與用戶交互過程中的超時值UID當前登錄的用戶的UID,如UID=0,說明當前為root用戶系統(tǒng)預定義變量系統(tǒng)預定義變量是系統(tǒng)預先定義的變量的簡稱。它是由操作系統(tǒng)自身保留并維護的一系列特殊的變量,通常用來保存程序的相關運行狀態(tài)。在使用時,系統(tǒng)預定義變量無法被定義、修改和賦值。系統(tǒng)預定義變量功能$0獲取腳本名稱或輸出腳本路徑$1,$2,…,$n獲取執(zhí)行腳本名稱后的第n個參數(shù)值$#獲取執(zhí)行腳本名稱后的參數(shù)個數(shù)$*獲取執(zhí)行腳本名稱后的所有參數(shù)$@獲取執(zhí)行腳本名稱后的所有參數(shù)$?獲取上一條命令的退出狀態(tài)或者函數(shù)的返回值,返回值為0表示沒有錯誤,返回值非0表示有錯誤$$獲取當前Shell的進程的PID$!獲取后臺運行的最后一個進程的PID在使用系統(tǒng)預定義變量時,還有幾點注意事項。
$1,$2,…,$n也可以稱為位置變量。
當n>9時,獲取參數(shù)值時需要使用{},例如${10}。
$*、$@都能實現(xiàn)獲取所有參數(shù)的功能,但它們也有所不同。在加雙引號時,"$*"會將所有參數(shù)看成一個整體字符串,而"$@"會把每個參數(shù)用“""”分開。全局和局部變量系統(tǒng)預定義變量是系統(tǒng)預先定義的變量的簡稱。它是由操作系統(tǒng)自身保留并維護的一系列特殊的變量,通常用來保存程序的相關運行狀態(tài)。在使用時,系統(tǒng)預定義變量無法被定義、修改和賦值。系統(tǒng)預定義變量功能$0獲取腳本名稱或輸出腳本路徑$1,$2,…,$n獲取執(zhí)行腳本名稱后的第n個參數(shù)值$#獲取執(zhí)行腳本名稱后的參數(shù)個數(shù)$*獲取執(zhí)行腳本名稱后的所有參數(shù)$@獲取執(zhí)行腳本名稱后的所有參數(shù)$?獲取上一條命令的退出狀態(tài)或者函數(shù)的返回值,返回值為0表示沒有錯誤,返回值非0表示有錯誤$$獲取當前Shell的進程的PID$!獲取后臺運行的最后一個進程的PID在使用系統(tǒng)預定義變量時,還有幾點注意事項。
$1,$2,…,$n也可以稱為位置變量。
當n>9時,獲取參數(shù)值時需要使用{},例如${10}。
$*、$@都能實現(xiàn)獲取所有參數(shù)的功能,但它們也有所不同。在加雙引號時,"$*"會將所有參數(shù)看成一個整體字符串,而"$@"會把每個參數(shù)用“""”分開。在Shell函數(shù)中定義的變量默認是全局變量,與在函數(shù)外部定義的效果相同。全局變量特性Shell中的變量有各自的作用范圍,即使變量同名,也不會互相影響。變量互不相關性示例在不同Shell會話中定義的變量互不影響,例如一個會話中定義變量a=1,另一個會話中echo$a顯示為空。在Shell中定義的變量默認是全局變量,不同Shell進程中的全局變量互不影響。變量作用范圍變量分類函數(shù)中變量特性變量分為全局變量、局部變量和環(huán)境變量。全局變量在當前進程中可用,局部變量在函數(shù)內(nèi)部使用,環(huán)境變量在子進程中使用。全局和局部變量通配符功能*匹配0個或多個字符?匹配任意一個字符[list]匹配list中的任意單一字符[!list]匹配除list中的任意單一字符[c1-c2]匹配c1c
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 北京市大興區(qū)高米店街道面向社會招聘臨時輔助人員3人筆試參考題庫及答案解析
- 2025山東濱州無棣縣豐達建設工程集團有限公司及權屬公司招聘工作人員4人(公共基礎知識)綜合能力測試題附答案
- 2025河南商丘市實達國際人力資源合作有限公司招聘輔助人員30考前自測高頻考點模擬試題附答案
- 2025年中國民用航空局局屬事業(yè)單位招聘(88人)備考題庫附答案
- 2025年甘肅省蘭州市西固區(qū)中醫(yī)醫(yī)院招聘(公共基礎知識)測試題附答案
- 2025廣東廣州市越秀區(qū)林業(yè)和園林局招聘輔助人員1人備考題庫附答案
- 2025民族出版社專業(yè)技術人員招聘4人(第二批)(公共基礎知識)綜合能力測試題附答案
- 2026河南省森源電氣招聘筆試備考題庫及答案解析
- 2026榆林市橫山區(qū)石窯溝衛(wèi)生院招聘(4人)筆試備考題庫及答案解析
- 2026高校區(qū)域技術轉(zhuǎn)移轉(zhuǎn)化中心(福建)新型功能材料分中心招聘5人筆試參考題庫及答案解析
- 質(zhì)量互變課件
- 神經(jīng)內(nèi)科腦疝術后護理手冊
- 幼兒園重大事項社會穩(wěn)定風險評估制度(含實操模板)
- 2026年包頭輕工職業(yè)技術學院單招職業(yè)適應性測試題庫附答案
- 2025至2030中國應急行業(yè)市場深度分析及發(fā)展趨勢與行業(yè)項目調(diào)研及市場前景預測評估報告
- 2025年中厚鋼板行業(yè)分析報告及未來發(fā)展趨勢預測
- 基于多因素分析的新生兒重癥監(jiān)護室患兒用藥系統(tǒng)風險評價模型構建與實證研究
- 2025新能源光伏、風電發(fā)電工程施工質(zhì)量驗收規(guī)程
- 電磁炮課件教學課件
- JJF 2287-2025 測量水池聲學特性校準規(guī)范(相關函數(shù)法)
- 財務崗位離職交接清單模版
評論
0/150
提交評論