天天看點

shell變量

關于變量的内容

一、變量命名:

二、變量指派:

三、變量類型:

四、變量取消:

五、取得變量值:

六、調整變量的屬性

七、數組

八、變量擴充:

九、指令擴充:

一、變量名稱:

    1、隻能包含字母、數字和下劃線,并且不能以數字開頭,

    2、不應該跟系統中已有的環境變量重名

    3、最好能見名知意

設定變量:

變量名稱=值

var_name=value 等号兩邊不能有空格

1

2

3

針對數字,你可以可以這樣為變量指派,定義一個變量的類型

三、bash:變量類型:

    環境變量:

    本地變量(局部變量):

    位置變量:

    特殊變量(系統變量):

本地變量:作用域為整個bash程序

    varname=value

局部變量:作用域隻對目前代碼段有效

    local varname=value

環境變量:作用域為目前shell程序及其子程序

    export varname=value "導出“

任意腳本在執行時會啟動一個子shell程序,

        指令行中啟動的腳本會繼承目前shell的環境變量

        系統自動執行的腳本(跟指令行無關)就需要自我定義需要的各環境變量

位置變量:

    $1,$2,....

特殊變量:保持某些特殊資料

        $? 上一個指令執行狀态傳回值

        $# 參數的個數

        $* 參數清單

        $@ 參數清單

        $0  指令本身  腳本本身

    執行腳本時的腳本路徑及名稱

程式執行一般有兩類傳回值  

    程式執行結果;

    執行狀态傳回代碼(0-255)

            0表示正确

            1-255:錯誤執行 1,2,127 系統預留 有特殊意義

四、撤銷變量:

    unset varname

[root@lovelace 51cto]# unset youname;echo $youname

檢視目前shell中的變量

        set  不帶任何參數和選項

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

如果檢視目前shell中的環境變量

        env

        export

        printenv

字元串變量添加新的變量

 PATH添加新的路徑

export PATH=$PATH:/usr/local/apsch/bin

    $變量名稱

    ${變量名稱}  $(x) 這個可以用來當做指令調用

     如果變量在語句當中被引用,必須要使用${x}才可以,取得數組的變量值時候也需要使用${}來調用

關于變量和引号的關系:

    單引号:所見即所得

    雙引号:使特殊符号生效

六、調整變量的屬性:

1、readonly 指令 :定義隻讀變量

        -p:顯示目前具有隻讀屬性的變量清單

        -f:設定函數不可修改

        -a:定義數組不可修改

2、declare 指令 

        -r:設定隻讀變量

        -p:顯示變量的屬性

        -a:變量是一個數組

        -f:搜尋指令時,隻找函數

        -i:變量是一個整數

        -F:顯示所有的函數式名稱及其屬性

        -t:設立變量具有trace屬性

        -x:設定環境變量

七、 數組:   

 是一種資料結構,有相關的資料項組成,每個資料項,稱為數組的元素,且可采用索引的方式取得個元素的值

數組指派:

1、單個指派,以index作為索引号,索引号從0開始

    a[0]=1

    a[2]=2

    a[3]=3

2、使用小括号為數組指派

    a=(1 2 3) 預設空格隔開

3、為數組中的某一個資料項指派,預設是從0開始,如果中間出現未比标示的索引項,則從前一個索引項開始計算

    a={51 [3]=5  cto  [6]=8}

顯示指派:

    echo ${a[1]}

取出數組中所有的值:

    echo ${a[@]}  或者echo ${a[*]}

取得數組元素的個數:

    echo ${#a[@]} 或者 echo ${#a[*]}

八、進階變量:

${變量名稱}  變量擴充

$(指令)      指令替換

$((算術式))  算術擴充

$(指令) 指令替換:

 測試變量存在與否:

    ${myname:-'nick'} 判斷條件,如果myname存在,就傳回值,如果myname不存在,就把-後接的字元串當做整個變量擴充的結果,并傳回

測試變量不存在或為空,傳回一個預設值

    ${myname:-'nick'} 如果待測變量不存在或為空,傳回-後的值,存在則傳回變量的值

測試變量不存在或為空,給變量設定一個預設值

    ${count:=100} 若變量coutn沒有值或為空,則把待測變量設定為預設值,

測試變量不存在或為空,傳回錯誤資訊

    ${myname:?"your input error"}

測試變量的存在性:

    ${myname:+Ture} 若變量存在且值非空,則符合判斷

    :  空              測空置

    -   負向            測不存在

    +   正向            測存在

    ?  有問題            檢查是否完備後再來執行吧

    =   設值            給控值變量設定一個預設值

$(指令) 指令替換  此指令等同于·· (esc下的按鍵,不是單引号)這個在編寫腳本的時候很有用

$((算術式))算術擴充:這個我們在下章将會單獨講解,這裡給出示例檢視

九、變量擴充“去字元串切片,字元串長度

 字元串切片是從0開始的 在使用${}的時候 大括号内的變量引用前面的$可以不寫

        ${變量:位置起點}   ${myname:3}

        ${變量:位置起點:長度}

取部分參數:

        指令行參數是從$1開始的依次類推,$@代表所有參數,指令本身使用$0來表示

        ${@:起點}:由點開始,取得後面的所有的位置參數

        ${@:起點:個數}:由起點開始,取得指定個數的位置參數

示例腳本

執行結果:

計算字元串長度:

    ${#變量名稱}:傳回變量值的字元串長度

    expr:也可以統計字元串的長度

        1、str="here you are."

           len$(expr length "$str")

           echo "str 字元串長度是:$len"

        2、expr "字元串“:‘。*’

            str="here you are."

            len=$(expr "$str":'.*')

            echo "str字元串長度是:$len"

變量擴充:對比樣式

    由字元串前面對比,删除最短的

         ${變量#樣式}

    由字元串前面對比,删除最長的

         ${變量##樣式}

    由字元串後面對比,删除最短的

         ${變量%樣式}

    由字元串後面對比,删除最長的

          ${變量%%樣式}

至于對比樣式可以根據自己的思考來獲得,這個沒有固定的格式

取代或删除部分字元串:

    隻替換第一個對比符合的字元串

        ${變量/樣式/替換字元串}

    替換所有符合的字元串

        ${變量//樣式/替換字元串}

删除對比符合的字元串

    隻删一個

        ${變量/樣式/}

    删除全部

        ${變量//樣式/}

    #T  行首位置

    %LE  最後面

變量擴充:取變量名稱清單、數組索引清單

取變量名稱清單:

        ${!開頭字元串@}或${!開頭字元串*}

取數組索引清單:

        ${!數組變量[@]}或${!數組變量[*]}

後記:學習shell程式設計,變量這一塊很重要,文章中列出的僅僅是變量内容的一部分,還有很多像系統内置變量,以及環境變量,局部變量之間的轉化,我們這裡沒有提及到,是以需要我們多練習、多總結。就算你一下記不住這麼多知識,熟能生巧總是可以的吧......

本文出自 “追馬” 部落格,請務必保留此出處http://lovelace.blog.51cto.com/1028430/1211141