shell之變量和引用


一 變量shell

     變量:本質上是程序中保存用戶數據的一塊內存空間,變量名就是內存空間地址。數組

    Shell中:變量可有字母數字和下劃線組成,只能以字母或下劃線開頭。bash

    命名:PATH=/sbin函數

         JAVA_HOME=」/usr/lib」命令行

    (變量名區分大小寫)code

    在shell中,變量的數據類型無需顯示低聲明,變量的數據類型會根據不一樣操做有所變化。ip

    (shell變量部分數據類型,統一按字符串存儲,但根據變量的上下文環境,容許程序執行一些不一樣操做)。爲了能執行加減法計算,shell爲自動進行數據類型的轉換,若是遇到含義非數字的字符串,則該字符串被轉換成整數0。同時,在空串以及沒有定義變量的狀況下,變量值都會被轉換爲整數0。內存

    例如,n=「」 echo 「n=$n」作用域

         Echo 「p=$p」字符串

1.1變量的定義:

    Shell中能夠直接使用變量,無需定義,若是變量的值包含空格,必定要用引號引發來。

    declare attribute variable(控制變量相關屬性)

    attribute 表示變量屬性,variable表示名稱,屬性有:

    -p:顯示全部變量值

    -i:定義爲整數

    -r:定義爲只讀變量

    -a:定義爲數組變量

    -f:顯示全部自定義函數,包括名稱和函數體

    -x:變量設置成環境變量,隨後的腳本和程序能夠使用

    例子:

    x=6/3

    echo "$x"                            //6/3

    #定義變量x爲整數

    declare -i x

    echo "$x"                          //6/3,由於shell中全部數據都當作字符串存儲

    #將算術式賦給變量x

    x=6/3

    echo "$x"                         //2,變量聲明爲整數後,能夠進行算術運算

    #將字符串賦給變量x

    x=hello

    echo "$x"

    #將浮點數賦給變量x

    x=3.14

    echo "$x"                          //報錯,bash不支持浮點數

    #取消變量x的整數屬性

    declare +i x

    #從新將算術式賦給變量x

    x=6/3

    echo "$x"

    #求表達式的值

    x=$[6/3]

    echo "$x"                              //2,獲得算術值得兩種方法,方括號

    #求表達式的值

    x=$((6/3))                             //2,獲得算術值得兩種方法,圓括號

 1.2 引號

    單引號(‘’):括起來的字符做爲普通字符

    雙引號(「」):括起來的字符,除    「$」, 「\」,  「`」和「``」保留其特殊功能外,其他仍做爲普通字符

    反引號(``):括起來的字串被解釋爲命令,shell首先執行該命令,並一他的標準輸出結果例如:取代整個反引號部分

    #! /bin/bash

    #輸出當前目錄

    echo "current directory is `pwd`"

    結果:currentdirectory is /root/chapter3

    (先執行`pwd`,結果/root/chapter3取代`pwd`)

 1.3 變量的做用域:

    全局變量:shell中,全局變量可在腳本中定義,也可在某個函數中定義。腳本中定義的變量都爲全局變量,做用域爲被定義的地方開始,指定shell腳本結束或顯示刪除。

    例:

    #! /bin/bash

    #定義函數

    func()

    {

       #輸出變量x的值

      echo "$v1" //100

       #修改變量x的值

      v1=200

    }

    #在腳本中定義變量x

    v1=100

    #調用函數

    func

    #輸出變量x的值

    echo "$v1"  //200

    局部變量:一般僅限某個程序段訪問,如函數內部。Shell中可在函數內部經過local關鍵字定義局部變量,另外函數的參數也是局部變量。

    例:

    #! /bin/bash

    #定義函數

    func()

    {

       #使用local關鍵字定義局部變量

      local v2=200

    }

    #調用函數

    func

    #輸出變量的值

    echo "$v2"    // 空值,函數外面不能得到該變量的值

    注意:全局變量與局部變量同名時,函數內部的局部變量優先被使用。不管在何處,賦值語句都會影響全局變量的值,全局變量的值改變後,最整個腳本都有效,默認狀況下,函數內部定義的變量也是全局變量,除非用local聲明

 
1.4 系統變量:

    Shell的系統變量主要對參數判斷和命令返回值判斷時的使用,包括腳本和函數的參數,以及腳本和函數的返回值。經常使用系統變量:

    $n:表示傳遞給腳本的第n個參數,如$1表示第一個參數

    $#:命令行參數的個數

    $0:當前腳本名稱

    $*:以「參數1參數2….」形式返回全部參數的值

    $@:以「參數1」「參數2」形式返回全部參數的值

    $_:保存以前執行的命令的最後一個參數

    例子:

    #! /bin/bash

    #輸出腳本的參數個數

    echo "thenumber of parameters is $#"

    #輸出上一個命令的退出狀態碼

    echo "thereturn code of last command is $?"

    #輸出當前腳本名稱

    echo "thescript name is $0"

    #輸出全部的參數

    echo "theparameters are $*"

    #輸出其中的幾個參數

    echo"\$1=$1;\$2=$2;\$11=$11"

1.5 環境變量:

    Shell環境變量是全部shell程序均可以使用的變量。(所有大寫)

    PATH:命令搜索路徑,以冒號爲分隔符,當前目錄不在系統路徑裏

    HOME:用戶主目錄的路徑名,cd命令的默認參數

    COLUMNS:命令編輯模式下可以使用命令行長度

    HISTSIZE:命令歷史文件中最多可包含的命令條數

    HISTFILE:命令歷史文件

    HISTFILESIZE:命令歷史文件中包含的最大行數

    IFS:shell使用的分隔符

    LOGNAME:當前的登入名

    SHELL:Shell的全路徑名

    TERM:終端類型

    TMOUT:shell自動退出時間,單位秒,爲0則禁止shell自動退出

    PWD:當前工做目錄

    能夠使用set命令列出全部環節變量,set| more

    例子:

    #! /bin/bash

    #輸出命令搜索路徑

    echo"commands path is $PATH"

    #輸出當前的登陸名

    echo "currentlogin name is $LOGNAME"

    #輸出當前用戶的主目錄

    echo "currentuser's home is $HOME"

    #輸出當前的Shell

    echo "currentshell is $SHELL"

    #輸出當前工做目錄

    echo "currentpath is $PWD"

 1.6 變量賦值和清空:

    Shell中全部普通變量值都看做字符串,若是賦值包含空格,製表符和換行符,要用單引號或雙引號括起來,一個沒有初始化的shell變量被認爲是一個空字符串。

 1.7 清除變量:

    變量被清除後,表明的值也會消失。消除變量用unset語句

    unsetvariable_name

二 引用
2.1引用變量的值:

    可經過在變量面前加$來獲取變量的值。

    爲了能使shell正確的界定變量名,能夠在引用變量時使用大括號將變量括起來

    如:

    v4=123

    echo 「${v4}abc」

    結果:123abc

    (若直接echo 「$v4abc」,會變成空字符串,由於v4abc沒有被定義)

2.2引用和替換:

    引用:字符串用引用符合包括起來,防止特殊字符被shell解釋成其餘含義

    經常使用引用符號:

    雙引號:除$,’’,``,\以外,其餘全部字符保持字面意義

    單引號:全部字符保持字面意義

    反引號:反引號中的字符串被解釋爲shell命令

    反斜線:轉義字符,屏蔽後的字符的特殊意義

2.3全引用:

    單引號引用的方式。

    #! /bin/bash

    #定義變量v1

    v1="chunxiao"

    #輸出含有變量名的字符串

    echo 'Hello, $v1'  //全引用保持字面意義

    結果:Hello ,$v1

 2.4 部分引用:

    雙引號引用方式

 2.5 命令替換:

    將某個shell命令的執行結果賦給某個變量。

    兩種方式:

    反引號:`shell_command`

    圓括號:$(shell_command)

2.6轉義:

    轉換某些特殊字符的意義,\表示。屏蔽反斜線後面字符的特殊意義

    如:

    Echo $SHELL

    結果:/bin/bash

    Echo \$SHELL

    結果:$SHELL

相關文章
相關標籤/搜索