環境變量的功能

  1. 用env查看環境變量與常見環境變量說明
    變量名 含義
    HOSTNAME 主機名
    TERM 終端機使用的環境類型
    SHELL 這個環境下使用的shell程序
    HISTSIZE 命令的條數
    USER 用戶名稱
    MAIL 用戶取用的mailbox位置
    PATH 執行文件命令查找路徑
    INPUTRC 與鍵盤按鍵功能有關,可以設置特殊按鍵
    PWD 目前用戶所在工作目錄
    LANG 與語系有關
    HOME 用戶的主文件夾
    _ 上次使用的命令的最後一個參數
  2. 用set查看所有變量
    變量 含義
    BASH bash的主程序放置的路徑
    BASH_VERSION bash的版本
    COLORS 顏色記錄的文件
    COLUMNS 使用的字段有幾個字符長度
    HISTFILE 歷史命令記錄的放置文件,隱藏文件
    OLDPWD 上一個工作目錄
    OSTYPE 操作系統類型
  3. PS1提示符的設置
    符號 意義
    \d 可以顯示出星期月日的日期格式,如"Mon Feb 2"
    \H 完整的主機名字
    \h 僅取主機名在第一的小數點之前的名字
    \t 顯示時間,爲24小時格式"HH:MM:SS"
    \T 顯示時間,爲12小時格式"HH:MM:SS"
    \A 顯示時間,爲24小時格式"HH:MM"
    @ 顯示時間,爲12小時格式的"am/pm"
    \u 目前賬號名稱如root
    \v BASH版本信息
    \w 完整的工作目錄名稱,由根目錄寫起的目錄名稱
    \W 利用basename函數取得工作目錄名稱
    # 執行的第幾個命令
    $ 提示符,如果是root則爲#,否則爲$
    [root@www ~]# cd /home
    [root@www home]# PS1='[\u@\h\w\A#\\#]\$'
    [root@www /home 17:02 #85]#
    
  4. $代表關於本shell的PID
    $本身是一個變量,代表的是目前Shell這個線程代號,就是PID,如果想直到shell的PID,直接在命令行輸入 “echo $$”,出現的數字就是PID號碼
  5. ?代表關於上個命令的回傳碼
    問號也是一個特殊變量。當我們執行某些命令時,這些命令都會回傳一個執行後的代碼,一般來說,如果成功執行該命令,則會回傳一個0,如果執行錯誤,就會回傳"錯誤代碼",一般已非0值替代。
  6. OSTYPE,HOSTTYPE,MACHTYPE代表主機硬件與內核等級
    CPU主要分爲32位和64位,其中32位中又可分爲i386,i586,i686,而64位則稱爲x86_64。由於不同等級的CPU的命令集不同,因此軟件可能會針對某些CPU進行優化。
  7. export自定義變量轉換爲環境變量
    環境變量和自定義變量的區別就是這個變量是否會被子進程繼續引用。子進程只會繼承父進程的環境變量,子進程不會繼承父進程的自定義變量。
    export 變量名稱
    
  8. 影響顯示結果的語系變量locate
    當使用man command的方式去查詢某個數據說明文件時,該說明文件的內容可能會因爲我們使用的語系不同而產生亂碼。另外利用ls查詢文件的時間時,也有可能會有亂碼出現在時間部分。
    locate -a        #這個命令用來查詢Linux裏面有多少個語系
    
  9. 變量有效範圍
    Q:爲什麼環境變量的數據可以被子進程所引用
    A:當啓動一個shell,操作系統會分配一個記憶塊給shell使用,此內存內的變量可讓子進程取用。若在父進程利用export功能,可以讓自定義變量內容寫到上述的記憶塊中,當加載另一個shell時,子shell可以將父shell的環境變量所在的記憶塊導入自己的環境變量塊中。
  10. 變量鍵盤讀取、數組與聲明:read,array,declare
    • read。要讀取來自鍵盤輸入的變量,就是用read命令。

      read [-pt] variable_name
      
      參數 含義
      -p 後面可以接提示符
      -t 後面可以接等待的"秒數",不會一直等待用戶輸入
      [root@www ~]#read atest
      This is a test      <==此時光標會等待輸入
      [root@www ~]#echo $atest
      This is a test
      
      [root@www ~]#read -p "Please keyin your name: " -t 30 name
      Please keyin your name: Edmond           <==出現了提示符
      [root@www ~]#echo $name
      Edmond
      

      read之後不加任何參數,直接加上變量名字,就會直接出現一個空白行等待輸入。如果加上-t秒數,那麼30秒內沒有任何操作,命令就會自動略過,如果加上-p參數,那麼輸入光標前面會出現提示符。

    • declare/typeset。聲明變量類型

      參數 含義
      -a 將後面變量名的變量定義爲數組
      -i 將後面變量名的變量定義爲整數數字類型
      -x 用法與export一樣,將後面的變量名變成環境變量
      -r 將變量設置爲readonly類型,給變量不可被更改內容,也不能重設
      [root@www~]#sum=100+300+50
      [root@www~]#echo $sum
      100+300=50     <=====因爲是文字類型,所以直接顯示了
      [root@www~]declare -i sum=100+300+50
      [root@www~]echo $sum
      450                  <=====顯示結果
      [root@www~]#declare -x sum             <======將sum變成環境變量
      [root@www~]#export | grep sum
      declare -ix sum="450"
      [root@www~]#declare -r sum             <======將sum變成只讀屬性
      [root@www~]#sum=tesgting
      -bash:sum:readonly variable              <======這個變量不能改變
      [root@www~]#declare +x sum           <======將-號變成+可以進行取消操作
      [root@www~]#declare -p sum           <======可以單獨列出變量類型
      declare -ir sum="450"
      
      • 數組類型array
        數組的設置方式var[index]=content,意思是有一個數組名爲var,而這個數組的內容爲var[1]=“small min”,var[2]=“big min”,var[3]=“nice min”。
        數組類型的讀取建議直接使用${數組}的方式來讀取
  11. 與文件系統及程序的限制關係:ulimit
    bash可以限制用戶某些系統資源的,包括打開的文件數量,可以使用的CPU時間,可以使用的內存總量。
    參數 含義
    -H 嚴格設置,必定不能超過這個設置的數值
    -S 警告設置,可以超過這個設置的值,但是若超過則有警告信息,通常-S設置的值比-H的小
    -a 後面不接任何參數
    -c 當某進程發生錯誤時,系統可能將該進程在內存中的信息寫入文件
    -f 此shell可以創建的最大文件容量,單位爲KB
    -d 進程可以使用的最大斷裂內存容量
    -l 可以用於鎖定lock的內存量
    -t 可以使用的最大CPU時間,單位爲秒
    -u 單一用戶可以使用的最大進程數量
    [root@www~]#ulimit -a        <=========列出目前身份的所有限制數值
    core file size                 (blocks,-c)  0                  <==只要是0就代表沒有限制
    data seg size                (kbytes,-d)     unlimited
    scheduling priority        (-e)          0
    file size                         (blocks,-f)     unlimited      <==可以創建的單一文件的大小
    open files                      (-n)               <==同時可以打開的文件數量
    
    一般用戶如果以ulimit設置了-f文件大小,那麼他只能減少文件容量,不能增加文件容量。
  12. 變量內容的刪除、替代與替換
    • 變量內容的刪除
      ${variable#/*kerberos/bin:}
      variable是變量名稱
      #代表從變量內容最前面開始向右刪除,且僅刪除最短的那個,
      /*kerberos/bin: 代表要被刪除的部分,由於#代表由前面開始刪除,所以刪除的路徑從/開始寫。
      如果把上面的#替換爲##那麼就是從前面刪除匹配的最長的內容。
      那麼如果想從後面開始刪除,就把#替換爲%號。
    • 變量內容的替換
      ${path/sbin/SBIN}
      兩個斜線之間的是需要替換的字符,兩個最後那個字符是需要被替換的字符,但是隻會替換第一個符合的內容
      ${path//sbin/SBIN}
      如果是兩個斜線,就會變成符合的內容都會被替代
      變量設置方式 說明
      ${變量#關鍵字} 若變量內容從頭開始的數據符合"關鍵字",則將符合的最短數據刪除
      ${變量##關鍵字} 若變量內容從頭開始的數據符合"關鍵字",則將符合的最長數據刪除
      ${變量%關鍵字} 若變量內容從尾開始的數據符合"關鍵字",則將符合的最短數據刪除
      ${變量%%關鍵字} 若變量內容從尾開始的數據符合"關鍵字",則將符合的最長數據刪除
      ${變量/舊字符串/新字符串} 若將變量內容符合"舊字符串",則第一個舊字符串會被新字符串替換
      ${變量//舊字符串/新字符串} 若將變量內容符合"舊字符串",則所有舊字符串會被新字符串替換
    • 變量測試與內容替換
      當我們需要判斷某一個變量是否存在,如果存在就使用既有的設置,如果不存在就給予一個常用的設置。
      [root@www~]#username=${username-root}
      [root@www~]#echo $username
      root                 <==username因爲uername沒有設置,所以主動給給予名爲root的內容
      [root@www~]#username="an apple"
      [root@www~]#echo ${username-root}
      an apple         <==因爲username已經被設置了,所以不能被設置爲root
      
      但是上面的操作有一個問題,如果username裏面的值是空字符串,比如username="",那麼echo ${username-root}是沒有辦法給username設置內容的。
      [root@www~]#username=""
      [root@www~]#username=${username:-root}
      [root@www~]#echo username
      root
      
      在大括號內加上冒號後,被測試變量未被設置或是一已被設置爲空字符串,都能使用後面的內容來替換與設置。
      變量設置方式 str沒有設置 str爲空字符串 str已設置非爲空字符串
      var=${str-expr} var=expr var="" var=$str
      var=${str:-expr} var=expr var=expr var=$str
      var=${str+expr] var= var=expr var=expr
      var=${str:+expr} var= var= var=expr
      var=${str=expr} str=expr var=expr str="" var="" str不變 var=$str
      var=${str:=expr} var=expr str=expr str=expr var=expr str不變 expr=str
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章