1. 程式人生 > >shell指令碼之shell內部變數和環境變數

shell指令碼之shell內部變數和環境變數

這篇部落格介紹:

1、部分常用的內部變數

2、環境變數

變數的分類可以參考:點選開啟連結

1、部分常用的內部變數:

    ⑴ #

        說明:$#變數是命令列引數或位置引數的數量

    ⑵ -

        說明:$-變數是傳遞給shell指令碼的執行標誌

    ⑶ ?

        說明:$? 變數是最近一次執行的命令或shell指令碼的出口狀態

    ⑷ $

        說明:$$ 變數是shell腳本里面的程序ID。Shell指令碼經常使用 $$ 變數組織臨時檔名,確保檔名的唯一性。

    ⑸ _

        說明:$_ 變數是一個特殊的變數,在shell開始執行時,變數的初始值為shell或其執行的shell指令碼的絕對路徑名,之後就是最近執行的命令的最後一個選項或引數等。

    ⑹ !

        說明:&! 變數的值是最近執行的一個後臺程序PID

    ⑺ *

        說明:$* 變數的值表示所有的位置引數,其值是所有位置引數的值。

    ⑻ @

        說明:[email protected] 變數的值類似於$*,表示所有的位置引數,其值也是所有位置引數的值。

    ⑼ LINENO

        調測用。用於顯示指令碼中當前執行的命令的行號。

    ⑽ OLDPWD

        利用cd命令改換到新目錄之前所在的工作目錄。

        用法:cd $OLDPWD  (切換到之前的工作目錄,和cd - 功能一樣)

        注意

1:變數用$引用,注意2:linux下區分大小寫

    ⑾ OPTARG

        getopts命令已經處理的前一個選項引數

        getopts命令見Shell內部命令

    ⑿ OPTIND

    ⒀ PPID

        是當前程序的父程序的PID

    ⒁ PWD

        當前工作目錄。

        注意:這是一個變數,變數值等同於命令pwd的輸出

    ⒂ RANDOM

        隨機數變數。每次引用這個變數會得到一個0~32767的隨機數。

    ⒃ REPLY

        read命令,如果沒有被指定變數。即通過read讀入的資料,如果沒有對應的變數進行賦值,則可以把REPLY變數用作read命令的預設變數,接收read命令讀入的引數。

    ⒄ SECONDS

        指令碼已經執行的時間(以秒為單位)

2、環境變數 

⑴ 簡介:

    環境變數是在作業系統中一個具有特定名字的物件,它包含了一個或多個應用程式將使用到的資訊。Linux是一個多使用者的作業系統,每個使用者登入系統時都會有一個專用的執行環境,通常情況下每個使用者的預設的環境都是相同的。這個預設環境就是一組環境變數的定義。每個使用者都可以通過修改環境變數的方式對自己的執行環境進行配置。

      變數分類可以參考:點選開啟連結

⑵ 分類:

    根據環境變數的生命週期我們可以將其分為永久性環境變數和臨時性變數;根據使用者等級的不同又可以將其分為系統級變數和使用者級變數。

            以下的三種環境變數:所有使用者可使用的環境變數、特定使用者可使用的環境變數、臨時環境變數

            這三種環境變數的設定,只是在不同的地方進行設定,所以作用範圍不一樣。

        ① 對所有使用者生效的永久性變數(系統級)

    這類變數對系統內的所有使用者都生效,所有使用者都可以使用這類變數。作用範圍是整個系統。 
    設定方式: vim在/etc/profile檔案中新增我們想要的環境變數。 
    當然,這個檔案只有在root(超級使用者)下才能修改。我們可以在etc目錄下使用ls -l檢視這個檔案的使用者及許可權。 

    利用vim開啟/etc/ profile檔案,用export指令新增環境變數。 

    【注意】:新增完成後新的環境變數不會立即生效,除非你呼叫source /etc/profile 該檔案才會生效。否則只能在下次重進此使用者時才能生效。

        使用演示:

        第一步:切換到root賬戶:命令:sudo -i  然後會提示讓你輸入密碼

        第二步:vi /etc/profile,並進行新增


         第三步:使配置檔案生效:source /etc/profile

         第四步:使用


        ② 對單一使用者生效的永久性變數(使用者級)

    該類環境變數只對當前的使用者永久生效。也就是說假如使用者A設定了此類環境變數,這個環境變數只有A可以使用。而對於其他的B,C,D,E….使用者等等,這個變數是不存在的。

    設定方法:在使用者主目錄”~”下的隱藏檔案 “.bashrc”中新增自己想要的環境變數。 
    檢視隱藏檔案: 首先切目錄:cd ~    然後檢視:echo .*   (參考:點選開啟連結

     利用vim開啟.bashrc檔案,利用export新增環境變數。與上相同。同樣注意,新增完成後新的環境變數需要呼叫source ./.bashrc 該檔案才會生效。否則只能在下次重進此使用者時才能生效。

    注意,系統中可能存在兩個檔案,.bashrc和.bash_profile(有些系統中只有其中一個)。原則上來說設定此類環境變數時在這兩個檔案任意一個裡面新增都是可以的。

    ~/.bash_profile是互動式login方式進入bash shell執行。 
    ~/ .bashrc是互動式non-login方式進入bash shell執行。

    二者設定大致相同。通俗點說,就是.bash_profile檔案只會在使用者登入的時候讀取一次,而.bashrc在每次開啟終端進行一次新的會話時都會讀取。

    ③ 臨時有效的環境變數(只對當前shell有效)

    此類環境變數只對當前的shell有效。當我們退出登入或者關閉終端再重新開啟時,這個環境變數就會消失。是臨時的。

    設定方法:直接使用export指令新增。 

⑶ 設定環境變數常用的幾個指令

    ① echo

         檢視顯示環境變數,變數使用時要加上符號“$”例:echo $PATH

    ② export

        設定新的環境變數 
             export 新環境變數名=內容 
        例:export MYNAME=”LLZZ”

    ③ 修改環境變數

        修改環境變數沒有指令,可以直接使用環境變數名進行修改。 
        例:MYNAME=”ZZLL”

    ④ env

            檢視所有環境變數

    ⑤ set

        檢視本地定義的所有shell變數

    ⑥ unset

        刪除一個環境變數 
        例 unset MYNAME

   ⑦ readonly

        設定只讀環境變數。 
        例:readonly MYNAME

⑷ 常用的幾個環境變數(都為大寫)

    ① PATH

    指定命令的搜尋路徑。通過設定環境變數PATH可以讓我們執行程式或指令更加方便。 
       echo $PATH 檢視環境變數PATH。 

    每一個冒號都是一個路徑,這些搜尋路徑都是一些可以找到可執行程式的目錄列表。當我們輸入一個指令時,shell會先檢查命令是否是內部命令,不是的話會再檢查這個命令是否是一個應用程式。然後shell會試著從搜尋路徑,即PATH中尋找這些應用程式。如果shell在這些路徑目錄裡沒有找到可執行檔案。則會報錯。若找到,shell內部命令或應用程式將被分解為系統呼叫並傳給Linux核心。

    舉個例子: 
    現在有一個c程式test.c通過gcc編譯生成的可執行檔案a.out(功能:輸出helloworld)。我們平常執行這個a.out的時候是使用 
      ❶ 相對路徑呼叫: ./a.out  (”.”代表當前目錄,”/”分隔符)。 
      ❷ 絕對路徑呼叫:/home/lzk/test/a.out 
      ❸ 通過設定PATH環境變數,直接用檔名呼叫: a.out (只要可以通過PATH中路徑找得到這個可執行檔案)
 

    如何新增PATH中的路徑:

    使用export指令,將a.out的路徑新增到搜尋路徑當中

       命令:export PATH=$PATH:路徑   (PATH中路徑是通過冒號“:”進行分隔的,把新的路徑加在最後就OK) 

    ② HOME

    指定使用者的主工作目錄,即為使用者登入到Linux系統中時的預設目錄,即“~”。

    ③ HISTSIZE

    指儲存歷史命令記錄的條數。我們輸入的指令都會被系統儲存下來,這個環境變數記錄的就是保持指令的條數。一般為1000。 

    這些歷史指令都被儲存在使用者工作主目錄“~”下的隱藏檔案.bash_profile中。 

    我們可以通過指令history來檢視。 

    ④ LOGNAME

        指當前使用者的登入名

    ⑤ HOSTNAME

        指主機的名稱。

    ⑥ SHELL

     指當前使用者用的是哪種shell

    ⑦ LANG/LANGUGE

        和語言相關的環境變數,使用多種語言的使用者可以修改此環境變數。

    ⑧ MAIL

        指當前使用者的郵件存放目錄

    ⑨ PS1

     第一級Shell命令提示符,root使用者是#,普通使用者是$

    ⑩ PS2

     第二級命令提示符,預設是“>”

    ⑪ PS3

        第三級命令提示符。主要用於select迴圈控制結構的選單選擇提示符 :【等待一個連結】

    ⑫ TMOUT

        使用者和系統互動過程的超時值。

        系統與使用者進行互動時,系統提示讓使用者進行輸入,但使用者遲遲沒有輸入,時間超過TMOUT設定的值後,shell將會因超時而終止執行。

⑸ 總結

    環境變數是和shell緊密相關的,使用者登入系統後就啟動了一個shell,對於Linux來說一般是bash(Bourne Again shell,Bourne shell(sh)的擴充套件),也可以切換到其他版本的shell。

        bash有兩個基本的系統級配置檔案:/etc/bashrc和/etc/profile。這些配置檔案包含了兩組不同的變數:shell變數和環境變數。shell變數是區域性的,而環境變數是全域性的。環境變數是通過shell命令來設定。設定好的環境變數又可以被所以當前使用者的程式使用。

相關推薦

shell指令碼shell內部變數環境變數

這篇部落格介紹:1、部分常用的內部變數2、環境變數變數的分類可以參考:點選開啟連結1、部分常用的內部變數:    ⑴ #         說明:$#變數是命令列引數或位置引數的數量    ⑵ -         說明:$-變數是傳遞給shell指令碼的執行標誌    ⑶ ?

shell指令碼程式中的部分常用環境變數引數變數的說明以及簡單shell指令碼示例

環境變數 $HOME 當前使用者的家目錄$PATH 以冒號分隔的用來搜尋命令的目錄列表$PS1 命令提示符,通常是$字元,但在bash中,可以使用一些更復雜的值。例如,字串[\[email protected]\h\w]$就是一個流行的預設值,它給出使用者名稱/機

shell指令碼一次性配置Linux中java環境變數

只需bash一下,很輕鬆有木有QAQ詳見程式碼:#!bin/bash nowLoad=`pwd` goalPath="/usr/java" #我們把jdk放在這兒 environmentPath="/home/kzl/.bash_profile" #kzl是我的使用者名

Java基礎學習總結(114)——System系統變數環境變數

環境變數這個概念不陌生,就是作業系統的環境變數。系統變數就是Java本身維護的變數。 通過 System.getProperty 的方式獲取。對於不同的作業系統來說, 環境變數的處理可能會有一些不統一

linux shell “永久環境變數”、“臨時環境變數"普通變數"完全解讀

        這個年代, 大家寫點書, 也無非就是為了搞點錢, 基本都是羅列一些知識點, 基本都是寫給已經會了的人看的。 真正用心寫書的人, 不多。 如果真正用心寫書, 且站在讀者的角度去寫, 那就少之又少了。         關於linux shell環境變數, 我看

2.shell指令碼變數

1.變數命名法則 1、不能使程式中的保留字:例如if, for 2、只能使用數字、字母及下劃線,且不能以數字開頭 3、見名知義 4、統一命名規則:駝峰命名法 5、=前後不要帶空格 6、字串建議加" " :如name=“chenjuxni” 變數引用: 語法:$

AIX_環境SHELL指令碼設定成crontab排程手動執行的某些不同

有些時候,寫好的shell指令碼手工執行很正常,但一旦把其配置在crontab上排程就會出現這樣或那樣的問題。本人就遇到到如下幾種情況。 1、在呼叫oracle的sqlplus、sqlldr等命令工具

shell指令碼限制日誌檔案大小行數

背景: 專案server在後端持續執行,日誌檔案不斷變大,需及時進行清空。 解決方案:編輯sh指令碼,指定時間間隔輪詢;將超出限制的日誌檔案,先備份,再清空原日誌檔案內容。 清空日誌檔案內容的方法有:             1

shell指令碼中的for迴圈while迴圈

基礎for迴圈有三種:         ①直接寫-------例如:for  i   in  1,2,3,4(注:i 是變數; in是在什麼地方;do和done之間是迴圈體)         &n

Shell程式設計-03-Shell中的特殊變數擴充套件變數

特殊變數     在Shell中的特殊變數主要分別兩種位置引數變數、狀態變數兩種。 位置引數變數     Shell中的位置引數變數主要是指$0、$1、$#等,主要用於從命令列、函式或指令碼執行等地方傳遞引數。詳細說明如下所示: $0:獲取當前執行的Shell指令碼的檔名,如指令碼中包含路徑,則

[一天幾個linux命令] shell指令碼正則表示式

shell指令碼之正則表示式 原文連結:Linux–shell指令碼之正則表示式 概念及特點 概念 正則表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定的字元、及這些特定字元的組合,組成一個"規則字串",這個"規則字串"用來表達對字串的一種過濾邏輯。規定一些特殊語

Shell 指令碼中的檔名匹配命令執行

理解下 shell 指令碼中的檔名匹配和命令執行的順序與結果。我們學習這個的目的是可以熟悉的在 shell 指令碼中寫出快速的找到檔案的命令。它可以匹配檔名中的任何字串,匹配檔名中的單個字元以及匹配檔名中的字母或數字符號。         首先我們來看看匹配檔案的符號

linux Vim編輯器、shell指令碼、流程控制語句計劃任務

本章主要講解shell指令碼,vim編輯器 1. 強制儲存退出 wq! 2. 查詢主機名稱 hostname 3. 在vim中常用的命令 dd刪除游標所在行;5dd刪除自游標所在行開始往下數五行;yy複製游標所在行;5yy複製自游標所在行開始往下數5行內容;n顯示搜尋命令定位到下一個字串

shell指令碼 對於 非ssh expect 免密登陸問題

背景:一般為了安全hadoop生產叢集與公司其他伺服器不能ping,不能互相ssh免密登入的。絕大多數是hadoop叢集伺服器可以有賬號密碼可以登入到其他伺服器,但其他伺服器,不可以登入到公司hadoop叢集伺服器。業務需要 從一臺非業務伺服器上scp拉取資料,這時用到 expect遠端登入

shell學習shell變數

shell指令碼 shell是一個用c語言編寫的程式,是使用者用來操作linux系統的語言,俗稱命令列。 我的第一個shell指令碼 新建一個文字,將其命名為test.sh。在文字中編寫程式碼: #!/bin/bash echo “hello wang” 在test.s

Shell指令碼等腰三角形

指令碼內容: #!/bin/bash # 等腰三角形 read -p "Please input the length: " n #請輸入長度: for i in `seq 1 $n` do for ((j=$n;j>i;j--)) do

Shell指令碼俄羅斯方塊

指令碼內容: #!/bin/bash # Tetris Game # 10.21.2003 xhchen<[email][email protected][/email]> #APP declaration APP_NAME="${0##*[\\/]}"

Shell指令碼for語句

在shell語句中的for有兩種的格式,具體的使用help  for 命令來檢視幫助    for迴圈語句的主要的格式有: 格式一:   for  x  in   do  command  do

Shell指令碼while 語句

在shell指令碼中的while語句在linux上的使用help  while來檢視其基本的用法    從圖上可以看出while語句的基本格式是    while   command   ; do  co

shell指令碼基礎

Linux之shell指令碼 Shell就是一個命令列直譯器,它的作用就是遵循一定的語法將輸入的命令加以解釋並傳給系統。開啟文字編輯器(可以使用vi/vim命令來建立檔案),新建一個檔案test.sh,副檔名為sh(sh代表shell)。