Linux中shell的變數類型

來源:互聯網
上載者:User

(轉載)

shell中的變數類型有:本地變數、環境變數、位置變數、標準變數、特殊變數。

    2.1.本地變數在shell指令碼的生存周期中使用的變數(也就是登入一個shell到退出,這個shell為生存周期)設定一個本地變數格式為:變數 名=變數,顯示一個變數:echo ${變數名}也可以不要大括弧,顯示本地所有變數:set就可以,本地變數還可以設定為唯讀:readonly 變數名,這時的變數就具有唯讀屬性,如果在shell下運行命令readonly,就會顯示當前環境下所有的唯讀變數。
   
    2.2.環境變數用於所有的使用者進程(也就shell下所有的子進程),這個就有點像windows中的環境變數了(系統–>進階–>環境變 量),環境變數一般儲存在$HOME/.bash_profile和/etc/profile中,前者是只適用於目前使用者,後者適用於所有使用者佈建一個環 境變數用export,比喻我們這裡設定一個環境變數:export pagename=”ghostwwl”這樣就設定了一個叫做pagename的環境變數,我們可以通過env這個命令來查看,還有就是可以直接通過運行 export來查看。

    2.3.位置變數也就相當於程式中的參數(也就相當於C中的argv),在shell中位置變數一般允許$0-$9一共10個,超過10個的,嘿嘿就必須使用其他方式了。很顯然這裡$0就是指令碼的名字了,從$1開始就是後面的參數了。說白了也就是那個argv了。
我們這裡舉個小例子,比喻有shell程式aa.sh於下:
    #!/bin/bash
    #named aa
    echo “程式名為: $0″
    echo “姓名為: $1″
    echo “年齡為: $2″
    echo “所屬省分為: $3″
    echo “所在城市為: $4″
    echo “第五個參數為: $5″

我們運行這個指令碼 ./aa.sh ghostwwl 24 Hubei Wuhan 顯示結果為:
    程式名為: ./aa.sh
    姓名為: ghostwwl
    年齡為: 24
    所屬省分為: Hubei
    所在城市為: Wuhan
    第五個參數為:
可以看出因為第五個參數沒有所以就為空白了
當然我們可以在指令碼中系統命令傳遞參數,比喻下面一句:
find /usr/share/realpaly -name $1 -print
這個指令碼語句就可以在指令碼中對檔案目錄/usr/share/realplay中檔案名稱為第一個參數的檔案進行尋找。
說這麼多他*的就是參數,搞半天。
  
    2.4.標準變數,也就是bash環境建立的一些標準環境的標量,他會自動去解析,基本都在/etc/profile中定義了有EXINIT,HOME,IFS,LOGNAME,MAIL,MAILCHECK等。
    EXINIT 是vi編輯器初始化啟動並執行一些參數
    HOME 這個傻子都知道,就是偶們的主目錄
    IFS 一個個欄位域之間用什麼隔開的理論上可以任一字元,比喻/usr/bin;/usr/sbin
這裡的IFS就是”;”了。
    LOGNAME 看名字就知道 是登入名稱可以用 echo $LOGNAME 來查看
    MAIL 表示當使用者的郵箱路徑
    MAILCHECK 表示每間隔多少秒檢查一次收件匣
還有一堆標準變數PATH,tz,PS1,PS2,PWD等等,我這裡就不全部寫了,自己去找資料看,相信應該蠻好找的。

    2.5.特殊變數
$# 表示傳遞到指令碼的參數列表
$* 以一個字串顯示所有向指令碼傳遞的參數,跟位置變數不同的是這裡參數可超過9個。
$$ 表示當前運行指令碼的進程ID號
$! 表示後台啟動並執行一個進程的ID號
$@ 與$#相同,但是使用時加引號,並在引號中返回每一個參數
$- 顯示shell使用的當前選項,與set命令相同
$? 顯示最後命令啟動並執行推出狀態,0表示沒有錯誤,其他任何值表示有錯誤 

3.shell中的變數替換

    這裡說一下變數替換這個經常用到,其實就是用變數的值替 換他的名字,顯示變數的時候就是這個,可以用:
為了實驗我們先定義一個變數haha=”**** you”
     a.${變數名}來搞定(這裡的大括弧可要可不要,不過偶一般都加)
     b.${變數名:+變數值}這個表示如果前面的變數值不為空白,則顯示變數值,否則置空,比喻echo ${name:+”ghostwwl”}這樣可不管你以前有沒有對name賦過值都會顯示這裡的”ghostwwl”
     c.${變數名:?錯誤資訊}這個表示當變數名存在,就是變數的值,不存在就顯示問號後面的錯誤資訊比喻echo ${age:+”No defined variable age”}這個因為age不存在所以它會顯示錯誤資訊age:No defined variable age
     d.${變數名:-變數值}這個表示如果如果變數名沒有設定,就用這裡給出變數值來代替,顯然如果設定了肯定就是返回原來設定的值:比喻echo ${age:-24}因為age變數沒有設定,所以它會用24去代替,如果是echo ${haha:-”hello”}這裡會顯示原來所賦的值”**** you”記得不要跟b中的情況搞混。
     e.${變數名:=變數值}表示如果沒有設定變數名這個變數,就設定它的值,比喻echo ${age:=24}因為沒有設定age這個值,所以運行這句的時候會賦值並顯示。當然這樣賦值以後就可以把age當正常變數用了,也就是這時我們有 haha和age這兩個變數了。

    就這五種了(當然如果把第一種去掉大括弧,就6種了),開始可能並不習慣,用多了就習慣了,啊哈哈!

4.清除變數(unset)
    能定義變數當然也就能刪除變數了,比喻我們要刪除那個haha,因為值為”**** you”不太文明,我們可以用:unset haha 從這裡就可以看出清除變數用unset 變數名。
    這裡我們要注意,設定了readonly的唯讀變數不能取消也不能重新設定值。

我們這裡再來把前面個例子改一下:
    #!/bin/bash
    #named aa
    echo “程式名為: $0″
    echo “姓名為: $1″
    echo “年齡為: $2″
    echo “所屬省分為: $3″
    echo “所在城市為: $4″
    echo “參數個數為: $#”
    echo “指令碼參數為: $*”
    echo “指令碼進程ID為: $$”
我們再來運行這個指令碼 ./aa.sh ghostwwl 24 hubei wuhan 結果為:
    程式名為: ./aa.sh
    姓名為: ghostwwl
    年齡為: 24
    所屬省分為: hubei
    所在城市為: wuhan
    指令碼參數個數為: 4
    指令碼參數為: ghostwwl 24 hubei wuhan
    指令碼進程ID為: 212

5.影響變數的一些命令
    5.1 declare 建立或顯示變數
        參數-f 只顯示函數名
        參數-r 建立唯讀變數(typeset也可以)
        參數-x 建立轉出變數
        參數-i 建立整數變數
        如果參數中使用+來代替-,表示選項的含義相反。
    
    5.2 export 建立環境變數
        參數– 表明選項結束,所有後面的參數都是實參
        參數-f 表示在”變數-值”對照中的變數是一個函數名
        參數-n 表示把全域變數轉換成局部變數(也就是本地變數)。
        參數-p 顯示全域變數列表
 
    5.3 readonly 建立或顯示唯讀變數
        參數– 表示選項結束
        參數-f 建立唯讀變數

    5.4 set 設定或者重設各種shell
    5.5 shift [n] 用來移動或調整位置變數,使$4賦給$3(也就是全都向前面移動一次),這個裡面的n表示移動幾位,預設是移動一位。
    5.6 typeset 這個就跟declare相同了
    5.7 unset 清除變數的定義
        參數– 表示選項結束
        參數-f 刪除唯讀變數,但是不能sehll環境中制定的變數和函數。

6.shell的運算子
   6.1 位元運算 ~,>>,<<,&,|,^ 一看就知道分別是取反,左移,右移,與,或,異或。
   6.2 $[]表示對[]中的運算式求值和$(())相等的。
   6.3 邏輯運算子 &&,||,>,<,==,!= 是人都看得懂跟C裡一樣的。 

   6.4 賦值運算子 =,+=,-=,*=,/=,%=,&=,|=,<<=,>>=,^= 跟其他語言差不多一看就明白的。當然運算式賦值let $a=$b+$c這種形式。

   6.5 運算子的優先順序我就不想廢話了,都跟其他語言差不多。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.