Shell中的變量


    這篇博文我們首先簡單介紹Shell中變量的幾個注意點,然後通過實際的例子來學習。

    關於Shell的變量,總結起來有如下幾個注意點:

    1)Shell中的變量是不區分類型的,這點和C++、java語言不同。變量統一地按照字符串存儲;

    2)允許使用declare來改變變量的類型爲整型,如declare -i x   這樣並不改變x本身的值

    3)echo語句中顯示變量值,需要使用$x;

    4)允許變量執行一些不同的操作,例如字符串的比較和整數的加減等;

    5)x=123   x此時是整型變量    x="123"    x此時是字符串類型;

    6)關於變量中字符串的刪除和替換操作:



    7)執行變量加1運算時,x+=1   如果變量x中含有非數字字符,那麼x會自動轉換爲整數0,再加1;如果x中全是數字字符,那麼自動轉換爲相應的整數,再加1;

    8)把一個空串賦值給一個變量:x=""

    9)沒有定義變量,直接$p,認爲p變量中是一個空串;


#-----------------------------/chapter3/ex3-1.sh------------------
#! /bin/bash

#定義變量x,並且賦值爲123。#此時x是整型變量,123是數字,不是"123"
x=123
#變量x加1,整型相加,支持+=運算符,記得加上雙引號
let "x += 1"
#輸出變量x的值,記得加上雙引號
echo "x = $x"
#顯示空行
echo

#替換x中的1爲abc,並且將值賦給變量y。關於變量中字符串的替換和刪除有表格
#${變量/舊字符串/新字符串}  第一個舊字符串會被新字符串替換
y=${x/1/abc}
#輸出變量y的值
echo "y = $y"

#聲明變量y,這樣並不改變x本身的值
declare -i y
#輸出變量y的值,這樣並不改變x本身的值
echo "y = $y"
#變量y的值加1,y中含有非數字字符,被自動轉換爲整數0
let "y += 1"
#輸出變量y的值
echo "y = $y"
#顯示空行
echo

#將字符串賦給變量z,含有字母的字符串
z=abc22
#輸出變量z的值
echo "z = $z"

#替換變量z中的abc爲數字11,並且將值賦給變量m,變量的替換
m=${z/abc/11}
#輸出變量m的值
echo "m = $m"
#變量m加1,自動轉換爲整數
let "m += 1"
#輸出變量m的值
echo "m = $m"
echo

#將空串賦給變量n
n=""
#輸出變量n的值,echo輸出的時候,會帶來n = ,後面會有$n加上n的內容
echo "n = $n"
#變量n加1
let "n += 1"
echo "n = $n"
echo

#輸出空變量p的值,沒有定義變量,直接$p,認爲p變量中是一個空串
echo "p = $p"
# 變量p加1
let "p += 1"
echo "p = $p"


    10)如果變量的值包含空格,則一定要用雙引號括起來賦值;

    11)declare除以把x變量聲明爲整型之外的功能,還可以控制變量的讀寫屬性,具體總結如下:


    注意:上面的屬性前面的-號,可以變成+號,表示相反的意思;

    12)如果變量x被聲明爲整數類型,那麼x就可以參與一些算術運算,比如加法,比如除法; 

    13)如果變量x被聲明爲整數類型,那麼再把字符串賦值給x的時候,x一律被轉換爲0;

    14)bash不內置對浮點數的支持,所以不要把小數賦值;

    15)在shell中,爲了得到算術式的結果,可以使用方括號或是圓括號,x=$[6/3]和x=$((6/3))

    16)在declare -r x之後,x是隻讀變量,不能對只讀變量賦值修改;


#-----------------------------/chapter3/ex3-3.sh------------------
#! /bin/bash

#定義變量x,並將一個算術式賦給它,字符串
x=6/3
echo "$x"
#定義變量x爲整數
declare -i x
echo "$x"
#將算術式賦給變量x,此時x是整數類型,可以參與算術運算
x=6/3
echo "$x"

#將字符串賦給變量x
x=hello
echo "$x"
#將浮點數賦給變量x,bash不內置對浮點數的支持,所以不要把小數賦值;
x=3.14
echo "$x"
#取消變量x的整數屬性,這個+號很重要
declare +i x
#重新將算術式賦給變量x
x=6/3
echo "$x"
#求表達式的值
x=$[6/3]
echo "$x"
#求表達式的值
x=$((6/3))
echo "$x"
#聲明只讀變量x
declare -r x
echo "$x"
#嘗試爲只讀變量賦值,不能對只讀變量賦值修改
x=5
echo "$x

    17)變量賦值中的單引號''。單引號括起來的字符都做爲普通字符,包括特殊字符也被當做普通字符處理;

    18)變量賦值中的雙引號""。雙引號括起來的字符,除了"$",“\”, "'", """這幾個特殊字符可以保留功能,其餘都是普通字符;

    19)變量賦值中的反引號``。首先執行反引號中的部分,並以標準輸出結果展示出來。

#-----------------------------/chapter3/ex3-4.sh------------------
#! /bin/bash

#輸出當前目錄
echo "current directory is `pwd`"

    20)全局變量。作用域從被定義~shell腳本運行結束或者變量被刪除。其不僅可以在腳本中定義,還可以再函數func中定義,而且都是全局變量;注意:函數的參數是局部變量。

#-----------------------------/chapter3/ex3-6.sh------------------
#! /bin/bash

#定義函數
func()
{
   #在函數內部定義變量
   v2=200
}
#調用函數
func
#輸出變量的值
echo "$v2"

    21)局部變量。一般使用在函數內部,用local x=100來定義。如果函數內部一個局部變量和一個全局變量同名,局部變量優先處理。

#-----------------------------/chapter3/ex3-8.sh------------------
#! /bin/bash

#定義函數
func()
{
   #輸出全局變量v1的值
   echo "global variable v1 is $v1"
   #定義局部變量v1
   local v1=2
   #輸出局部變量v1的值
   echo "local variable v1 is $v1"
}
#定義全局變量v1
v1=1
#調用函數
func
#輸出全局變量v1的值
echo "global variable v1 is $v1"

    22)系統變量。一般用作腳本和函數的參數,以及腳本和函數的返回值。常用的系統變量總結如下:



    注意:使用$@取文件每個參數的時候,@只能是一位數0~9,如果要是兩位數或者更多,需要使用${@}。

#-----------------------------/chapter3/ex3-9.sh------------------
#! /bin/bash

#輸出腳本的參數個數
echo "the number of parameters is $#"
#輸出上一個命令的退出狀態碼
echo "the return code of last command is $?"
#輸出當前腳本名稱
echo "the script name is $0"
#輸出所有的參數
echo "the parameters are $*"
#輸出其中的幾個參數
echo "\$1=$1;\$2=$2;\$11=$11"

    23)環境變量。環境變量就是所有shell程序都可以直接使用的變量。而且環境變量全是都是大寫字母。



    24)unset清除變量。

    25)變量的賦值中,被單引號括起來的是全引用,被雙引號括起來的是部分應用,被反引號或是圓括號括起來的是命令替換,反斜槓\是轉義。


    參考:

    《Shell從入門到精通》

    《鳥哥的Linux私房菜》




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章