SHELL中的變量

1. 介紹shell

  任一shell 都獨立保存一份變量列表 ,包括從父shell導出的環境變量和局部變量,能夠根據變量的做用範圍將其簡單地分爲環境變量局部變量app


環境變量: 能夠在定義它的shell中使用,子shell(子進程)也可繼承使用,能夠簡單的理解爲shell 須要向子shell傳遞內容時使用。但只遵行父>子的傳遞方向,其它方向不成立,如子shell對環境變量的修改不會反應在父shell中。ide

局部變量:只存在於定義它的shell 測試

  常常談到的概念,全局變量,內部變量,系統變量,用戶變量,位置參數,本地變量(同局部變量)等,也可歸於環境變量和局部變量, 以免混淆,它們只不量過從另外的角將變量歸類。spa


全局變量:就是環境變量,相對於局部變量而言的環境變量的另外一種叫法。命令行

內部變量:一般指系統定義的一類特殊的環境變量(一般是隻讀類型),一般用戶知道其做用,引用便可,如寫腳本經常使用的位置參數繼承

位置參數:特殊的只讀環境變量,一般在腳本 中引用,沒有賦值和修改操做,用於向shell腳本傳遞參數進程

系統變量:指系統預約義的一類環境變量,主要用於設定用戶shell環境,通常用戶也只知道何時引用便可。用戶能夠自行修改,但通常在腳本中修改這些變量也沒有什麼意義。可使用set查看。ip

用戶變量:用行任意定義的變量,能夠是環境變量,也能夠是局部變量內存


2. 變量的基本屬性和操做

變量的基本屬性和操做不區分是環境變量仍是局部變量,環境變量和局部變量只是有定義和做用範圍的差別而已


變量數據類型

shell變量是無類型,嚴格來講數據類型只有字符型,因此shell不要求定義變量時聲明其類型,定義取用比較隨意。至於數值運算,shell會根據上下文將文本當作數值型,並進行算術和比較等數值操做(若變量中包含數字,則認定其爲數值型變量.)


變量名稱

_,A-Z,a-z,0-9字符組成,不能以數字開頭,默認約定環境變量所有大寫,局部變量小寫。用記可自行定義命名規則,但最好不要引發沒必要要的混淆。


變量賦值

變量能夠設置爲任何值,當設置的值包含空格時,需將值使使用引號括起來。

variable=value(兩邊無空格,若value包含空格,習慣使用"" 或' ')

${variable=value}


賦值的特殊模式:

variable+value,對已賦值的variable,重設其值,未賦值則仍爲空

variable:?value ,對未賦值的variable ,顯示系統錯誤信息,不然顯示variable的值(用於測試變量是否已賦值)

variable:=value 對未賦值的variable ,將value值賦給它

variable:-value ,賦值,但不存儲在對地址空間


e.g.

    • variable2="hello world"   定義變量且賦值,或重設其值

    • variable4="we are saying $variable2" 變量賦值

    • variable=value;echo $variable   輸出value

    • echo ${variable=value} , 若variable 未定義,則賦值,表達式值爲value. 若variable已定義,則varible 保持原值,且表達式值與其相同

    • echo ${variable+value} ,variable 已賦值,則variable和表達式的值均爲value.若variable未賦值,表達式爲空,且不會定義variable

    • echo ${variable:?value}   variable 未賦值,顯示系統錯誤;variable已賦值,表達式值爲$variable  (用於測試變量是否被賦值)

    • echo ${variable:=value},variable未賦值,將value值賦給它,表達式值爲value;varialbe 已賦值,保持原值,表達式的值爲$variable

    • echo ${variable:-value},variable值保持不變,variable已賦值時,表達式值爲$varialbe. variable未賦值時,表達式值爲value

    • PATH="$PATH":/home/bin"$變量名稱" ${變量} 擴增變量內


變量引用

即提取變量值時使用,引用變量也稱爲變量替換(使用符號$), $variable即表示變量值。

${variable},可避免變量名引用時的歧義,好比變量名包含空格或者變量名後有其它字符時的引用

e.g.  

echo $LOGNAME


取消變量:unset variable釋放變量的內存空間

清空變量: variable=    只是清空變量值,值爲null,


只讀變量

readonly variable=value

readonly variable 設置爲只讀變量,一旦設置爲只讀變量後,任何用戶沒法再對其賦值。能夠定義時賦值,並設定只讀屬性。也能夠修改爲只讀屬性。

declare , typeset也能夠定義只讀變量


       變量操做總結

  echo $變量名                            引用變量值

            echo ${變量名}  

            echo $var_1$var_2                結合變量值

            unset VAR                               取消變量

            unset -v

            unset -f

            VAR=                                    清空變量

            env export                          列出環境變量

            export -p

            declare -x

            set                                         列出全部變量

            VAR=apple                              變量創建與賦值語法

            declare                                    聲明變量

            readonly varname                 定義只讀變量

            read -p -t variable                  讀取變量



3. 環境變量

  每一個進程有一個由子進程繼承的環境變量集合,給系統或用戶應用程序設置的一些變量,一般用大寫表示set 列出shell 變量,env 列出環境變量

  通常的執行script ,系統環境已經處在login shell, 執行script 時建立子shell 時會繼承父shell(login shell) 的環境變量,環境變量適用於全部登陸進程產生的子進程。


4. 位置參數
位置參數是一種特殊的只讀變量,用於從命令行向shell腳本傳遞參數,能夠在腳本中用shift進行左移操做以處理參數。
$0 表示腳本名(程序名,第一個參數前的內容)
$1,$2,.....$9,${10},${11},....${100}表示第1,2....9,10,11,......100個參數

 
其它特殊變量
用來獲取腳本相關信,只要知道如何引用(前加$便可)和在哪引用。
Linux中執行的命令一般都有參數檢查機制,即參數非法,將打印用法消息,而且返回一個非零返回碼,以標識是何種錯誤。
命令結束狀態, 內置變量? ($?) 存儲命令執行後的返回值,0 爲成功 , 大於0的數值則表明各類失敗的代碼 , 常常做業用於條件測試
   

變量名  說明     

         *       以一個單字符串顯示全部向腳本傳遞的參數

         @     傳遞到腳本的全部參數

         #       腳本參數個數

         $      當前運行腳本進程的PID,

         ?       上條指令的退出狀態:0 爲成功, (返回值) exitstatus,其它值表示各類錯誤

         -        調用中向shell給出的選項

         _       前面指令的最後一個參數

             最後一個後臺進程的PID

         0       shell名稱

        1~n  位置參數

相關文章
相關標籤/搜索