Shell從入門到精通教學(xué)課件:第3章 變量和引用_第1頁
Shell從入門到精通教學(xué)課件:第3章 變量和引用_第2頁
Shell從入門到精通教學(xué)課件:第3章 變量和引用_第3頁
Shell從入門到精通教學(xué)課件:第3章 變量和引用_第4頁
Shell從入門到精通教學(xué)課件:第3章 變量和引用_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第3章變量和引用本章主要涉及到的知識點(diǎn)有:深入認(rèn)識變量:主要介紹什么是變量,變量的命名,變量的類型,變量的有效范圍以及系統(tǒng)變量和用戶自定義變量等。變量的賦值和替換:主要介紹如何為變量賦值,如何取得變量的值,如何清空變量的值以及如何進(jìn)行變量替換。引用:主要介紹什么是全引用、部分引用、命令替換和轉(zhuǎn)義等。3.1深入認(rèn)識變量在程序設(shè)計(jì)語言中,變量是一個(gè)非常重要的概念。也是初學(xué)者在進(jìn)行Shell程序設(shè)計(jì)之前必須掌握的一個(gè)非?;A(chǔ)的概念。只有理解變量的使用方法,才能設(shè)計(jì)出良好的程序。本節(jié)將介紹Shell中變量的相關(guān)知識。3.1.1什么是變量顧名思義,變量就是程序設(shè)計(jì)語言中的一個(gè)可以變化的量,當(dāng)然,可以變化的是變量的值。變量幾乎所有的程序設(shè)計(jì)語言中都有定義,并且其涵義也大同小異。從本質(zhì)上講,變量就是在程序中保存用戶數(shù)據(jù)的一塊內(nèi)存空間,而變量名就是這塊內(nèi)存空間的地址。在程序的執(zhí)行過程中,保存數(shù)據(jù)的內(nèi)存空間的內(nèi)容可能會不斷地發(fā)生變化,但是,代表內(nèi)存地址的變量名卻保持不變。3.1.2變量的命名在Shell中,變量名可以由字母、數(shù)字或者下劃線組成,并且只能以字母或者下劃線開頭。對于變量名的長度,Shell并沒有做出明確的規(guī)定。因此,用戶可以使用任意長度的字符串來作為變量名。但是,為了提高程序的可讀性,建議用戶使用相對較短的字符串作為變量名。在一個(gè)設(shè)計(jì)良好的程序中,變量的命名有著非常大的學(xué)問。通常情況下,用戶應(yīng)該盡可能選擇有明確意義的英文單詞作為變量名,盡量避免使用拼音或者毫無意義的字符串作為變量名。這樣的話,用戶通過變量名就可以了解該變量的作用。例如,下面的變量名都是非常好的選擇:PATH=/sbinUID=100JAVA_HOME="/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/../.."SSHD=/usr/sbin/sshd3.1.3變量的類型Shell是一種動態(tài)類型語言和弱類型語言,即在Shell中,變量的數(shù)據(jù)類型毋需顯示地聲明,變量的數(shù)據(jù)類型會根據(jù)不同的操作有所變化。準(zhǔn)確地講,Shell中的變量是不分?jǐn)?shù)據(jù)類型的,統(tǒng)一地按照字符串存儲。但是根據(jù)變量的上下文環(huán)境,允許程序執(zhí)行一些不同的操作,例如字符串的比較和整數(shù)的加減等等。#!/bin/bash#定義變量x,并且賦值為123x=123#變量x加1let"x+=1"#輸出變量x的值echo"x=$x"#顯示空行Echo#替換x中的1為abc,并且將值賦給變量yy=${x/1/abc}#輸出變量y的值echo"y=$y"#聲明變量ydeclare-iy#輸出變量y的值echo"y=$y"【例3-1】演示Shell變量的數(shù)據(jù)類型#變量y的值加1let"y+=1"#輸出變量y的值echo"y=$y"#顯示空行echo#將字符串賦給變量zz=abc22#輸出變量z的值echo"z=$z"#替換變量z中的abc為數(shù)字11,并且將值賦給變量mm=${z/abc/11}#輸出變量m的值echo"m=$m"#變量m加1let"m+=1"#輸出變量m的值echo"m=$m"echo#將空串賦給變量nn=""#輸出變量n的值echo"n=$n"#變量n加1let"n+=1"echo"n=$n"echo#輸出空變量p的值echo"p=$p"#變量p加1let"p+=1"echo"p=$p"01[root@linuxchapter3]#./ex3-1.sh02x=1240304y=abc2405y=abc2406y=10708z=abc2209m=112210m=11231112n=13n=11415p=16p=13.1.4變量的定義在Shell中,通常情況下用戶可以直接使用變量,而毋需先進(jìn)行定義,當(dāng)用戶第一次使用某個(gè)變量名時(shí),實(shí)際上就同時(shí)定義了這個(gè)變量,在變量的作用域內(nèi),用戶都可以使用該變量。#!/bin/bash

#定義變量aa=1#定義變量bb="hello"#定義變量cc="helloworld"【例3-2】演示通過直接使用變量來定義變量通過declare命令聲明變量declareattributevariable-p:顯示所有變量的值。-i:將變量定義為整數(shù)。在之后就可以直接對表達(dá)式求值,結(jié)果只能是整數(shù)。如果求值失敗或者不是整數(shù),就設(shè)置為0。-r:將變量聲明為只讀變量。只讀變量不允許修改,也不允許刪除。-a:變量聲明為數(shù)組變量。但這沒有必要。所有變量都不必顯式定義就可以用作數(shù)組。事實(shí)上,在某種意義上,似乎所有變量都是數(shù)組,而且賦值給沒有下標(biāo)的變量與賦值給下標(biāo)為0的數(shù)組元素相同.-f:顯示所有自定義函數(shù),包括名稱和函數(shù)體。-x:將變量設(shè)置成環(huán)境變量,這樣在隨后的腳本和程序中可以使用。【例3-3】演示使用不同的方法了聲明變量,導(dǎo)致變量在不同的環(huán)境下表現(xiàn)出不同的行為#!/bin/bash定義變量x,并將一個(gè)算術(shù)式賦給它x=6/3echo"$x"#定義變量x為整數(shù)declare-ixecho"$x"#將算術(shù)式賦給變量xx=6/3echo"$x"#將字符串賦給變量xx=helloecho"$x"#將浮點(diǎn)數(shù)賦給變量xx=3.14echo"$x"#取消變量x的整數(shù)屬性declare+ix#重新將算術(shù)式賦給變量xx=6/3echo"$x"#求表達(dá)式的值x=$[6/3]echo"$x"#求表達(dá)式的值x=$((6/3))echo"$x"#聲明只讀變量xdeclare-rxecho"$x"#嘗試為只讀變量賦值x=5echo"$x[root@linuxchapter3]#./ex3-3.sh6/36/320./ex3-3.sh:line15:3.14:syntaxerror:invalidarithmeticoperator(errortokenis".14")06/3222./ex3-3.sh:line32:x:readonlyvariable23.1.5變量和引號Shell語言中一共有3種引號,分別為單引號('')、雙引號("")和反引號(``)。這3種引號的作用是不同的,其中單引號括起來的字符都作為普通字符出現(xiàn),由雙引號括起來的字符,除“$”、“\”、“'”和“"”這幾個(gè)字符仍是特殊字符并保留其特殊功能外,其余字符仍作為普通字符對待,由反引號括起來的字串被Shell解釋為命令,在執(zhí)行時(shí),Shell首先執(zhí)行該命令,并以它的標(biāo)準(zhǔn)輸出結(jié)果取代整個(gè)反引號(包括兩個(gè)反引號)部分#!/bin/bash#輸出當(dāng)前目錄echo"currentdirectoryis`pwd`"[root@linuxchapter3]#./ex3-4.shcurrentdirectoryis/root/chapter3【例3-4】演示反引號使用方法3.1.6變量的作用域

Shell中的變量也分為全局變量和局部變量2種1.全局變量全局變量可以在腳本中定義,也可以在某個(gè)函數(shù)中定義。在腳本中定義的變量都是全局變量,其作用域?yàn)閺谋欢x的地方開始,一直到Shell腳本結(jié)束或者被顯式地刪除#!/bin/bash#定義函數(shù)func(){#輸出變量x的值echo"$v1"#修改變量x的值v1=200}#在腳本中定義變量xv1=100#調(diào)用函數(shù)func#輸出變量x的值echo"$v1"[root@linuxchapter3]#./ex3-5.sh100200【例3-5】演示全局變量的使用方法#!/bin/bash#定義函數(shù)func(){#在函數(shù)內(nèi)部定義變量

v2=200}#調(diào)用函數(shù)func#輸出變量的值echo"$v2"[root@linuxchapter3]#./ex3-6.sh200【例3-6】演示在函數(shù)內(nèi)部定義全局變量的方法2.局部變量與全局變量相比,局部變量的使用范圍較小,通常僅限于某個(gè)程序段訪問,例如函數(shù)內(nèi)部。在Shell語言中,可以在函數(shù)內(nèi)部通過local關(guān)鍵字定義局部變量,另外,函數(shù)的參數(shù)也是局部變量。#!/bin/bash#定義函數(shù)func(){#使用local關(guān)鍵字定義局部變量

localv2=200}#調(diào)用函數(shù)func#輸出變量的值echo"$v2"[root@linuxchapter3]#./ex3-7.sh

【例3-7】演示使用local關(guān)鍵字定義局部變量#!/bin/bash#定義函數(shù)func(){#輸出全局變量v1的值

echo"globalvariablev1is$v1"#定義局部變量v1localv1=2#輸出局部變量v1的值

echo"localvariablev1is$v1"}#定義全局變量v1v1=1#調(diào)用函數(shù)func#輸出全局變量v1的值echo"globalvariablev1is$v1"[root@linuxchapter3]#./ex3-8.shglobalvariablev1is1localvariableis2globalvariableis1【例3-8】演示全局變量和局部變量的區(qū)別3.1.7系統(tǒng)變量

Shell語言的系統(tǒng)變量主要在對參數(shù)判斷和命令返回值判斷時(shí)使用,包括腳本和函數(shù)的參數(shù)以及腳本和函數(shù)的返回值變量說明$nn是一個(gè)整數(shù),從1開始,表示參數(shù)的位置,例如$1表示第1個(gè)參數(shù),$2表示第2個(gè)參數(shù)等等$#命令行參數(shù)的個(gè)數(shù)$0當(dāng)前Shell腳本的名稱$?前一個(gè)命令或者函數(shù)的返回狀態(tài)碼$*以“參數(shù)1參數(shù)2…”的形式將所有的參數(shù)通過一個(gè)字符串返回$@以“參數(shù)1”“參數(shù)2”…的形式返回每個(gè)參數(shù)$$返回本程序的進(jìn)程ID(PID)#!/bin/bash#輸出腳本的參數(shù)個(gè)數(shù)echo"thenumberofparametersis$#"#輸出上一個(gè)命令的退出狀態(tài)碼echo"thereturncodeoflastcommandis$?"#輸出當(dāng)前腳本名稱echo"thescriptnameis$0"#輸出所有的參數(shù)echo"theparametersare$*"#輸出其中的幾個(gè)參數(shù)echo"\$1=$1;\$2=$2;\$11=$11"【例3-9】演示常用系統(tǒng)變量的使用方法[root@linuxchapter3]#./ex3-9.shabcdefghijklmnthenumberofparametersis14thereturncodeoflastcommandis0thescriptnameis./ex3-9.shtheparametersareabcdefghijklmn$1=a;$2=b;$11=a13.1.8環(huán)境變量

Shell的環(huán)境變量是所有的Shell程序都可以使用的變量。Shell程序在運(yùn)行時(shí),都會接收一組變量,這組變量就是環(huán)境變量。環(huán)境變量會影響到所有的腳本的執(zhí)行結(jié)果。除了上表列出的環(huán)境變量之外,用戶還可以使用set命令列出當(dāng)前系統(tǒng)的環(huán)境變量。[root@linuxchapter3]#set|moreBASH=/bin/bashBASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepathBASH_ALIASES=()BASH_ARGC=()BASH_ARGV=()BASH_CMDS=()BASH_LINENO=()BASH_SOURCE=()BASH_VERSINFO=([0]="4"[1]="1"[2]="2"[3]="1"[4]="release"[5]="x86_64-redhat-linux-gnu")BASH_VERSION='4.1.2(1)-release'COLORS=/etc/DIR_COLORSCOLUMNS=235…#!/bin/bash#輸出命令搜索路徑echo"commandspathis$PATH"#輸出當(dāng)前的登錄名echo"currentloginnameis$LOGNAME"#輸出當(dāng)前用戶的主目錄echo"currentuser'shomeis$HOME"#輸出當(dāng)前的Shellecho"currentshellis$SHELL"#輸出當(dāng)前工作目錄echo"currentpathis$PWD"【例3-10】通過環(huán)境變量來獲取與當(dāng)前Shell有關(guān)的一些環(huán)境變量的值[root@linuxchapter3]#./ex3-10.shcommandspathis/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/pgsql-9.2/bincurrentloginnameisrootcurrentuser'shomeis/rootcurrentshellis/bin/bashcurrentpathis/root/chapter33.2變量賦值和和清空

本節(jié)介紹Shell中變量的賦值和銷毀。3.2.1變量賦值

在Shell中,變量的賦值使用以下語法:variable_name=value其中,varibale_name表示變量名,value表示變量的值。例如,下面都是一些正確的賦值語句:v1=Linuxv2='RedHatLinux'v3="RedHatLinux$HOSTTYPE"v4=123453.2.2引用變量的值

在Shell中,用戶可以通過在變量名前面加上“$”,來獲取該變量的值。#!/bin/bashv1=Linuxv2='RedHatLinux'v3="RedHatLinux$HOSTTYPE"v4=12345#輸出變量v1的值echo"$v1"#輸出變量echo"$v2"#輸出變量v3的值echo"$v3"#輸出變量v4的值echo"$v4"[root@linuxchapter3]#./ex3-11.shLinuxRedHatLinuxRedHatLinuxx86_6412345【例3-11】演示Shell變量的引用方法3.2.3清除變量

當(dāng)某個(gè)Shell變量不再需要時(shí),可以將其清除。當(dāng)變量被清除后,其所代表的值也會消失。清除變量使用unset語句,其基本語法如下:unsetvariable_name其中,參數(shù)varibale_name表示要清除的變量的名稱。#!/bin/bash#定義變量v1v1="Helloworld"#輸出v1的值echo"$v1"#清除變量unsetv1echo"thevalueofv1hasbeenreset"#再次輸出變量的值echo"$v1"[root@linuxchapter3]#./ex3-12.shHelloworldthevalueofv1hasbeenreset【例3-12】演示Shell變量清除方法,并且觀察在清除前后變量值的變化3.3引用和替換

變量的引用和替換是Shell對于變量功能的擴(kuò)展。3.3.1引用

所謂引用,是指將字符串用引用符號包括起來,以防止其中的特殊字符被Shell解釋為其他涵義。特殊字符是指除了字面意思之外還可以解釋為其他意思的字符。例如在Shell中,“$”符號的本身涵義是美元符號,其ASCII碼值為十進(jìn)制36。除了這個(gè)涵義之外,前面已經(jīng)講過,“$”符號還可以用了獲取某個(gè)變量的值,即變量替換。星號“*”也是一個(gè)特殊的字符,星號可以用來作為通配符使用。【例3-13】演示星號通配符的使用方法[root@linuxchapter3]#llex*-rwxr-xr-x 1 root root 179 Jan711:51 ex3-10.sh-rwxr-xr-x 1 root root 114 Jan715:49 ex3-11.sh-rwxr-xr-x 1 root root 100 Jan716:15 ex3-12.sh…符號說明雙引號除美元符號、單引號、反引號和反斜線之外,其他所有的字符都將保持字面意義單引號所有的字符都將保持字面意義反引號反引號中的字符串將被解釋為Shell命令反斜線轉(zhuǎn)義字符,屏蔽后的字符的特殊意義3.3.2全引用

在Shell語句中,當(dāng)一個(gè)字符串被單引號引用起來之后,其中所有的字符,除單引號本身之外,都將被解釋為字面意義,即字符本身的涵義。這意味著被單引號引用起來的所有的字符都將被解釋為普通的字符,因此,這種引用方式稱為全引用。#!/bin/bash#定義變量v1v1="chunxiao"#輸出含有變量名的字符串echo'Hello,$v1'[root@linuxchapter3]#./ex3-14.shHello,$v1【例3-14】演示全引用的使用方法3.3.3部分引用

對于單引號來說,被其引用起來的所有的字符都將被解釋為字面意義。而對于雙引號來說,情況會有所不同。如果用戶使用雙引號將字符串引用起來,則其中所包含的字符除美元符號($)、反引號(`)以及反斜線(\)之外

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論