使用Linux的環境變量


  許多程序和腳本都使用環境變量來獲取系統信息,並存儲臨時數據和配置信息;

1、什么是環境變量

  用來存儲關於shell會話和工作環境的信息,就叫做環境變量;

  bash shell下兩種類型:

    1、全局變量;

    2、局部變量;

  1.1、全局環境變量

    全局環境變量再shell會話,和在該shell中產生的子進程中都可見。

    Linux系統,默認情況下會支持一些全局環境變量,通過printenv來查看全局環境變量;

    使用echo命令來查看某個環境變量:

    例如:echo $HOME  #變量前面必須加上$符號;在子進程中,這個變量依然生效;

  1.2、局部環境變量

    本地環境變量,只在定義他們的本地進程中生效可見;沒有命令可以只顯示本地環境變量;

    set命令顯示特定進程的所有環境變量集。set中看到的除了printenv中的變量外的所有變量,都是本地環境變量

2、設置環境變量

  可以在bash shell中直接設置自己的環境變量。

  2.1、設置本地環境變量

    test=testing

    echo $test

    如果是字符串,就需要使用引號

    test='testing a long string'

    echo $test

    【注意:我們使用小寫字母來定義本地環境變量】

    *環境變量名稱、等號和值之間沒有空格,這一點尤為重要*

    同時:如果在子進程中設置了本地環境變量,則一旦離開子進程,本地環境變量將不再可用;  

  2.2、設置全局變量

    我們需要創建一個本地環境變量,然后將其導出到全局環境中。這個過程通過export命令來完成;

    test='testing a long string'

    echo $test

    export test

    bash

    echo $test  #此時,test變量再子進程bash中也會生效了;

3、移除環境變量

  unset可以為我們完成刪除環境比那輛的操作;

  test=testing

  export test

  unset test

4、默認的shell環境變量

  默認的Bourne的環境變量:

  1、CDPATH    cd命令的搜索路徑

  2、HOME      當前用戶的主目錄

  3、IFS        用於分隔字段的字符列表,shell使用它們分隔本文字符串

  4、MAIL      當前用戶郵箱文件名,對於新郵件,bash shell將檢查該文件

  5、MAILPATH    當前用戶郵箱的多個文件名,由冒號分隔。對於新郵件,bash shell將檢查該列表中的各個文件

  6、OPTARG    getopts命令處理的最后一個選項參數的值

  7、OPTIND      getopts命令處理的最后一個選項參數的索引值

  8、PATH      冒號分隔的目錄列表,shell將在這些目錄中查找命令

   

  9、PS1      主shell命令行界面提示字符串

  10、PS2      次shell命令行界面提示字符串

  

  bash shell自己的環境變量:

5、設置PATH環境變量

  echo $PATH

  PATH=$PATH:/home/rich/test

  程序員常用技巧

  PATH=$PATH:.  #后面直接加點(.),將當前目錄添加到PATH中去;

6、定位系統環境變量

  通過Linux啟動bash shell的時候,系統會讀取一些文件,這些文件被稱為啟動文件。文件里面包含了啟動bash shell的一些方法,可以采用三種方式來啟動bash shell:

  1、在登錄時作為默認登錄shell

  2、作為非登錄shell的交互式shell

  3、作為非交互式shell運行腳本

  6.1、登錄shell

    登錄bash shell后,系統會查找四個常見文件:/etc/profile、$HOME/.bash_profile、$HOME/.bash_login、$HOME/.profile;

    1、/etc/profile文件

    /etc/profile文件是bash shell在系統上的主默認啟動文件。系統上的每一個用戶在登錄shell的時候都會執行這個啟動文件。另外3個屬於特定用戶,可以根據用戶需求來自己定義;

    我們可以在/etc/profile底部添加export行;

    例如:export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC

    如果使用的比那輛比較大,或者是一個執行文件,可以使用/etc/profile.d目錄;它是Linux系統提供了一個放置特定應用程序的啟動文件的地方。

    2、$HOME啟動文件

    另外的三個啟動文件用於特定用戶的環境變量,用戶可以編輯這些文件來添加自己啟動的bash shell會話都為活動狀態的環境變量;

  6.2、交互式shell

    bash 回車,這樣的話啟動了一個bash shell而沒有登錄系統,就是交互式的shell。交互式的shell與登錄shell的行為不同,但它仍然提供了CLI的提示符界面;

    交互式的shell不會處理/etc/profile文件,相反他會檢查$HOME/。bashrc文件;

    .bashrc文件執行兩個任務:1、檢查/etc目錄中的公共bashrc;2、方便用戶輸入個人別名;  

  6.3、非交互式shell

    這是系統開始執行shell腳本的shell,它不用擔心CLI提示符。但是,您仍然希望在每次啟動系統中的腳本時運行特定的腳本啟動命令。

    為了適應這種情況,bash shell提供連帶BASH_ENV環境變量。當shell開始一個非交互是shell程序時,它將檢查該環境變量表示的待執行啟動文件的名稱。如果該變量有值,則shell將執行該文件中的命令。在我們的Linux發型版本中,此環境變量並非默認設置;

7、變量數組

  環境變量可以作為數組使用;數組可以保存多個值,這些值可以一起引用,也可以單獨引用;

  mytest=(one two three four five)

  echo $mytest

  echo ${mytest[2]}

  echo ${mytest[*]}

  mytest[2]=seven  #給數組匯總的某個值賦值

  unset mytest  #移除整個數組變量

8、使用別名

  alias -p  #查看當前支持的別名

  alias li='ls -il'  #這樣就可以自己定義命令的顯示格式;

  除了直接使用alias命令意外,還可以隨時在shell中使用它。

  命令別名與本地環境變量的行為相似。它們只對與定義范圍內的shell進程生效;

  bash

  li  #這樣的話,新定義的alias li就無效了;

  當然,您也可以在$HOME/.bashrc啟動文件中去定義,這樣的話,新的交換式的shell界面就會讀取這個alias的配置;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM