linux 的變數可分為兩類:環境變數和本地變數
環境變數,或者稱為全域性變數,存在與所有的shell 中,在你登陸系統的時候就已經有了相應的系統定義的環境變數了。linux 的環境變數具有繼承性,即子shell 會繼承父shell 的環境變數。
本地變數,當前shell 中的變數,很顯然本地變數中肯定包含環境變數。linux 的本地變數的非環境變數不具備繼承性。
linux 中環境變數的檔案
當你進入系統的時候,linux 就會為你讀入系統的環境變數,這些環境變數存放在什麼地方,那就是環境變數的檔案中。linux 中有很多記載環境變數的檔案,它們被系統讀入是按照一定的順序的。
1. /etc/profile :
此檔案為系統的環境變數,它為每個使用者設定環境資訊,當使用者第一次登入時,該檔案被執行。並從/etc/profile.d 目錄的配置檔案中蒐集shell 的設定。
這個檔案,是任何使用者登陸作業系統以後都會讀取的檔案(如果使用者的shell 是csh 、tcsh 、zsh ,則不會讀取此檔案),用於獲取系統的環境變數,只在登陸的時候讀取一次。
假設使用者使用的是bash ,那麼
2. /etc/bashrc :
在執行完/etc/profile 內容之後,如果使用者的shell 執行的是bash ,那麼接著就會執行此檔案。另外,當每次乙個新的bash shell 被開啟時, 該檔案被讀取。
每個使用bash 的使用者在登陸以後執行完/etc/profile 中內容以後都會執行此檔案,在新開乙個bash 的時候也會執行此檔案。因此,如果你想讓每個使用bash 的使用者每新開乙個bash 和每次登陸都執行某些操作,或者給他們定義一些新的環境變數,就可以在這個裡面設定。
3. ~/.bash_profile :
每個使用者都可使用該檔案輸入專用於自己使用的shell 資訊。當使用者登入時,該檔案僅僅執行一次,預設情況下,它設定一些環境變數,執行使用者的.bashrc 檔案。
單個使用者此檔案的修改只會影響到他以後的每一次登陸系統。因此,可以在這裡設定單個使用者的特殊的環境變數或者特殊的操作,那麼它在每次登陸的時候都會去獲取這些新的環境變數或者做某些特殊的操作,但是僅僅在登陸時。
4. ~/.bashrc :
該檔案包含專用於單個人的bash shell 的bash 資訊,當登入時以及每次開啟乙個新的shell 時, 該該檔案被讀取。
單個使用者此檔案的修改會影響到他以後的每一次登陸系統和每一次新開乙個bash 。因此,可以在這裡設定單個使用者的特殊的環境變數或者特殊的操作,那麼每次它新登陸系統或者新開乙個bash ,都會去獲取相應的特殊的環境變數和特殊操作。
~/.bash_logout :
當每次退出系統( 退出bash shell) 時, 執行該檔案。
幾個命令
env 和printenv
這兩個變數用於列印所有的環境 變數:
set
用於顯示與設定當前本地 變數。單獨乙個set 就顯示了當前環境的所有的變數,它肯定包括環境變數和一些非環境變數
unset
用於清除變數。不管這個變數是環境變數還是本地變數,它都可以清除。
-- 下面是清除本地變數
[oracle@devdb1 oracle]$ set|grep myname
myname=ilonng
[oracle@devdb1 oracle]$ unset myname
[oracle@devdb1 oracle]$ set|grep myname
-- 下面是清除環境變數
[oracle@devdb1 oracle]$ env|grep myname
myname=ilonng
[oracle@devdb1 oracle]$ unset myname
[oracle@devdb1 oracle]$ env|grep myname
export
用於把變數變成當前shell 和其子shell 的環境變數,存活期是當前的shell 及其子shell ,因此重新登陸以後,它所設定的環境變數就消失了。如何將環境變數永久化?修改上面介紹的那幾個環境變數的配置檔案
source
當直接執行乙個指令碼的時候,其實是在乙個子shell 環境執行的,即開啟了乙個子shell 來執行這個指令碼,指令碼執行完後該子shell 自動退出。
有沒有辦法在當前shell 中執行乙個指令碼呢?使用source 命令就可以讓指令碼在當前shell 中執行。如:
[oracle@dbamonitor nbu]$ cat test.sh -- 檢視指令碼內容,顯示變數內容
echo $myname
[oracle@dbamonitor nbu]$ echo $myname -- 變數存在,內容是ilonng
ilonng
[oracle@dbamonitor nbu]$ set |grep myname -- 變數是本地變數
myname=ilonng
[oracle@dbamonitor nbu]$ env |grep myname -- 變數不是環境變數
[oracle@dbamonitor nbu]$ sh test.sh -- 直接執行,新開子shell ,非環境變數的本地變數不具備繼承性,在子shell 中不可見
-- 這裡什麼都沒有輸出
一、shell變數分為本地變數和環境變數。
1、本地變數 -- 在使用者現有執行的指令碼中使用
1) 定義本地變數 格式: variable-name=value
例子:[root@jike1 /root]# localtest="test"
[root@jike1 /root]# echo $localtest test
2) 顯示本地變數 格式: set
例子:[root@chinaitlab root]# set
3) 清除本地變數 格式:unset variable-name
例如:[root@jike1 /root]# unset localtest
此時再執行echo $localtest將看不到變數localtest的輸出。
2、環境變數 -- 在所有的子程序中使用
1) 定義環境變數 格式: export variable-name=value (與本地變數的定義相比,多了乙個export關鍵字)
例子:[root@chinaitlab /root]# export domain="chinaitlab.com"
[root@ chinaitlab shell]# vi testenv.sh
#!/bin/bash
echo $domain
[root@chinaitlab shell]# chmod +x testenv.sh
[root@chinaitlab shell]# ./testenv.sh
chinaitlab.com
2) 顯示環境變數 格式: env (本地變數的顯示使用set,環境變數的顯示使用env)
例子: [root@chinaitlab test]# env
3) 清除環境變數 格式:unset variable-name (用法與本地變數相同,都使用unset)
例子: [root@chinaitlab shell]# unset domain
此時再執行./testenv.sh將看不到變數domain的輸出。
~/.bash_profile 使用者登入時被讀取,其中包含的命令被執行
~/.bashrc 啟動新的shell時被讀取,並執行
~/.bash_logout shell 登入退出時被讀取
分類:
linux
上學期沒弄懂指標,今天好好看看
指標就是乙個存放位址的變數 當指標指向某個變數 這時這個指標裡就存放了那個變數的位址 同時可以利用指標直接取變數中的值用 只要在指標前加 就是取其真值了 也就是被指向的變數的值 舉個例子 int i 0,p 宣告了乙個 int 型別,變數i和指標p 假設i在記憶體中所存在的位址為aaaaa 隨便寫的...
別再說Python沒有列舉型別了,好好看看
列舉型別可以看作是一種標籤或是一系列常量的集合,通常用於表示某些特定的有限集合,例如星期 月份 狀態等。python 的原生型別 built in types 裡並沒有專門的列舉型別,但是我們可以通過很多方法來實現它,例如字典 類等 miraclelove class miraclelove mon...
別再說Python沒有列舉型別了,好好看看
列舉型別可以看作是一種標籤或是一系列常量的集合,通常用於表示某些特定的有限集合,例如星期 月份 狀態等。python 的原生型別 built in types 裡並沒有專門的列舉型別,但是我們可以通過很多方法來實現它,例如字典 類等 如果你對python感興趣,我這有個學習python基地,裡面有很...