linux的shell變量以及對set/env/export/unset/readonly命令的說明

來源:
http://www.cnblogs.com/dongzhiquan/archive/2012/01/10/2317641.html#undefined
http://blog.csdn.net/longxibendi/article/details/6125075




unix shell的變量分類
在Shell中有三種變量:內部變量,環境變量,用戶變量。
內部變量:系統提供,不用定義,不能修改
環境變量:系統提供,不用定義,可以修改,可以利用export將用戶變量轉爲環境變量.
用戶變量:用戶定義,可以修改


(1)內部變量(系統變量,環境變量,參數變量,預定義變量)
內部變量是Linux所提供的一種特殊類型的變量,這類變量在程序中用來作出判斷。在shell程序內這類變量的值是不能修改的。
即:位置變量。函數,腳本等都需要參數,位置變量就是用來獲得這些參數的。相當於其它編程語言的形參。
比如:test.sh腳本,用命令“sh test.sh 1 2 3”執行該腳本,則位置變量$1指代1,$2指代2,$3指代4,$0指代腳本名稱test.sh


   表示方法     描述
   $n     $1 表示第一個參數,$2 表示第二個參數 ...
   $#     命令行參數的個數或者說位置變量的個數
   $0     當前程序的名稱或者說當前腳本文件名
   $?     前一個命令或函數的返回碼
  $*       所有的位置變量(當然和$@還是有區別)
    $@      所有的位置變量(當然和$*還是有區別)
   $$     本程序的(進程ID號)PID




(2) 本地變量
即普通變量、用戶變量、私有變量,在當前腳中定義的,僅當前腳本本可見,對引用該腳本的腳本也可見;


(3) 環境變量
Linux環境(也稱爲shell環境)由許多變量及這些變量的值組成,由這些變量和變量的值決定環境外觀。這些變量就是環境變量。
包括兩部分,一是,由系統設置的,主要包括: HOME,LOGNAME,MAIL,PATH,PS1,PWD,SHELL,TERM
二是,用戶在命令行中設置的,使用export命令,但是用戶註銷時值將丟失




======================================================================================
一.shell環境變量的分類以及set env export的區別:
 
set:顯示(設置)shell變量 包括的私有變量以及用戶變量,不同類的shell有不同的私有變量 bash,ksh,csh每中shell私有變量都不一樣
env:顯示(設置)用戶變量變量
export:顯示(設置)當前導出成用戶變量的shell變量。
 
舉個例子來講:

  

[c-sharp] view plain copy
  1. [<a href="http://lib.csdn.net/base/oracle" class='replace_word' title="Oracle知識庫" target='_blank' style='color:#df3434; font-weight:bold;'>Oracle</a>@zhou3 ~]$ aaa=bbb --shell變量設定     
  2. [<a href="http://lib.csdn.net/base/oracle" class='replace_word' title="Oracle知識庫" target='_blank' style='color:#df3434; font-weight:bold;'>oracle</a>@zhou3 ~]$ echo $aaa      
  3. bbb     
  4. [oracle@zhou3 ~]$ env| grep aaa --設置完當前用戶變量並沒有     
  5. [oracle@zhou3 ~]$ set| grep aaa  --shell變量有     
  6. aaa=bbb     
  7. [oracle@zhou3 ~]$ export| grep aaa --這個指的export也沒導出,導出變量也沒有     
  8. [oracle@zhou3 ~]$ export aaa   --那麼用export 導出一下     
  9. [oracle@zhou3 ~]$ env| grep aaa  --發現用戶變量內存在了     
  10. aaa=bbb  

 

總結:Linux 分 shell變量(set),用戶變量(env), shell變量包含用戶變量,export是一種命令工具,是顯示那些通過export命令把shell變量中包含的用戶變量導入給用戶變量的那些變量.

 

二:使用unset命令來清除環境變量,注意set env  export設置的變量,都可以用unset來清除的

[c-sharp] view plain copy
  1. 清除環境變量的值用unset命令。如果未指定值,則該變量值將被 設爲NULL。示  
  2. 例如下:    
  3. $ export TEST="Test..." #增加一個環境變量TEST    
  4. $ env|grep TEST #此命令有輸入,證明環境變量TEST已經存在了    
  5. TEST=Test...    
  6. $ unset $TEST #刪除環境變量TEST    
  7. $ env|grep TEST #此命令沒有輸出,證明環境變量TEST已經不存在了  

 

三:使用readonly命令設置只讀變量

[c-sharp] view plain copy
  1. 使用了readonly命令的話,變量就不可以被修改或清除了。示例如下:  
  2. $ export TEST="Test..." #增加一個環境變量TEST  
  3. readonly TEST #將環境變量TEST設爲只讀  
  4. $ unset TEST #會發現此變量不能被刪除  
  5. -bash: unset: TEST: cannot unset: readonly variable  
  6. $ TEST="New" #會發現此也變量不能被修改  
  7. -bash: TEST: readonly variable  

 

四:最根本的設置、更改變量的配置文件 ~/.bash_profile   ~/.bashrc   ~/.bash_logout

~/.bash_profile  用戶登錄時被讀取,其中包含的命令被執行

~/.bashrc  啓動新的shell時被讀取,並執行

~/.bash_logout  shell 登錄退出時被讀取

 

此外,shell(這裏指bash)的初始化過程是這樣的:

1.bash 檢查文件/etc/profile 是否存在

2. 如果存在,bash 就讀取該文件,否則,跳過

3.bash 檢查主目錄下的文件.bash_profile 是否存在。

4. 如果存在,bash 就讀取該文件,否則,跳過

5.bash 檢查主目錄下的.bash_login 是否存在。

6. 如果存在,bash 就讀取該文件,否則,跳過

7.bash 檢查主目錄下的文件.profile 是否存在

8. 如果存在, bash 就讀取該文件,否則,跳過。

這些步驟都執行完後,就出現提示符了, ksh 默認提示符是 $.

 

 

五:常見的shell變量

PATH 這個變量包含了一系列由冒號分隔開的目錄,系統就從這些目錄裏尋找可執行文件。如果你輸入的可執行文件(例如ls、rc-update或者emerge) 不在這些目錄中,系統就無法執行它(除非你輸入這個命令的完整路徑,如/bin/ls)。  
ROOTPATH 這個變量的功能和PATH相同,但它只羅列出超級用戶(root)鍵入命令時所需檢查的目錄。  
LDPATH 這個變量包含了一系列用冒號隔開的目錄,動態鏈接器將在這些目錄裏查找庫文件。 
MANPATH 這個變量包含了一系列用冒號隔開的目錄,命令man會在這些目錄裏搜索man頁面。  
INFODIR 這個變量包含了一系列用冒號隔開的目錄,命令info將在這些目錄裏搜索info頁面。  
PAGER 這個變量包含了瀏覽文件內容的程序的路徑(例如less或者more)。  
EDITOR 這個變量包含了修改文件內容的程序(文件編輯器)的路徑(比如nano或者vi)。  
KDEDIRS 這個變量包含了一系列用冒號隔開的目錄,裏面放的是KDE相關的資料。 
CONFIG_PROTECT 這個變量包含了一系列用空格隔開的目錄,它們在更新的時候會被Portage保護起來。 
CONFIG_PROTECT_MASK 這個變量包含了一系列用空格隔開的目錄,它們在更新的時候不會被Portage保護起來。

 

 

PATH:決定了shell將到哪些目錄中尋找命令或程序
HOME:當前用戶主目錄
MAIL:是指當前用戶的郵件存放目錄。
SHELL:是指當前用戶用的是哪種Shell。
HISTSIZE:是指保存歷史命令記錄的條數
LOGNAME:是指當前用戶的登錄名。 
HOSTNAME:是指主機的名稱,許多應用程序如果要用到主機名的話,通常是從這個環境變量中來取得的。
LANG/LANGUGE:是和語言相關的環境變量,使用多種語言的用戶可以修改此環境變量。 
PS1:是基本提示符,對於root用戶是#,對於普通用戶是$。
PS2:是附屬提示符,默認是“>”。可以通過修改此環境變量來修改當前的命令符,比如下列命令會將提示符修改成字符串“Hello,My NewPrompt :) ”。 
# PS1=" Hello,My NewPrompt :) "


發佈了13 篇原創文章 · 獲贊 50 · 訪問量 60萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章