變量

變量

    在shell腳本中,單獨的字符或者命令只能引用一次,對于變量,我們可以多次引用,且對變量的賦值修改方便。對于一條很長的命令或者頻繁使用的路徑等,我們可以賦值給一個變量,比如獲得系統中所有用戶的uid,要輸入很長的一段命令,我們如果每次使用都輸入命令是件很麻煩的事情,如果賦值變量,那么就會很方便。設置變量useruid

    useruid= `cat /etc/passwd|cut -d: -f3|sort -n`使用時直接echo “$useruid”,超級方便,接下來具體介紹一下變量,今天具體介紹一下本地變量和環境變量


目  錄

1、變量的命名法則

2、變量類型

3、bash變量種類

4、本地變量

5、環境變量


1、變量的命名規則

1)不能使程序中的保留字:例如if, for

2)只能使用字母、數字及下劃線,且不能以數字開頭

3)見名知義

4)統一命名規則:駝峰命名法

2、變量類型:

        wKiom1mGykOS2ouNAABHp7SeMxk473.png

3、bash變量種類

根據變量的生效范圍等標準可分為。

  (1)本地變量:生效范圍為當前shell進程;對當前shell之外的其它shell進程,包括當前shell    的子shell進程均無效

         當我們進入linux下,會自動進入一個bash ,在本地聲明的變量,只能在當前bash下使用,        再進入子bash中,便不能使用了稱為本地變量

         SHLVL: 顯示當前SHELL是幾級bash  用法:echo $SHLVL

         pstree 顯示進程樹

                                          -p 同時顯示進程的PID

                 $:顯示當前的PID   (運用為 echo $$)

   wKioL1mHGCqT52fsAAAnPGweIS4074.png

   wKiom1mHGOWgsk8DAAAja6_6nx0151.png

   可以看出本地變量僅對當前shell有效,當前shell的子shell進程

      接下來我們看一下對同級的shell是否有效。              

wKiom1mHHFPjdfklAABJV3UcHZs071.png

 wKioL1mHHGPTml8rAAAYgXBae_I861.png

     可以看出本地聲明的變量對同級的bash下也不能使用 

    總結:對當前shell之外的其它shell進程,包括當前shell的子shell進程均無效

  (2)環境變量:生效范圍為當前shell進程及其子進程,父進程什么情況都無效

 wKioL1mHHjLRRnb5AABqC_rTQFE356.png

  結論:環境變量僅對其子shell有效,對父shell無效。        

wKioL1mHIRixVUmuAABVj59B8H4013.png

 wKioL1mHISiC-EYtAAAVYzdk8ME995.png

       結論:環境變量僅對其子shell有效,對其他無效。

  (3)局部變量:生效范圍為當前shell進程中某代碼片斷(通常指函數)

  (4)位置變量: $1, $2, …來表示,用于讓腳本在腳本代碼中調用通過命令行傳遞給它的參數

  (5)特殊變量: $?, $0, $*, $@, $#,$$

 

4、本地變量

1)變量的賦值

   單獨一個無值變量的意義不大,對于一個變量,往往是先賦值后引用

    varname=’value’

   wKiom1mG37zgyp2KAAAX-cYW7xs350.png       

    可以使用引用value:

 (1) 可以是直接字串; A=”hello Hi”

 wKioL1mG4cDjCiWMAAAbg4McJg0163.png

 (2) 變量引用: A=”$USER”

 wKiom1mG4wCjVDVIAAAcq7OhVu4429.png

  USER 是bash的內部變量,表示當前用戶 

 (3) 命令引用: A=`COMMAND` varname=$(COMMAND)

     useruid= `cat /etc/passwd|cut -d: -f3|sort -n`

wKioL1mG5ejzZ-hgAAAtVe2bHvw228.png

對于變量的賦值大家可能很清楚,但是對于變量的引用,為什么有時加雙引號,有時不加引號,接下來具體講一下變量的引用

2)變量的引用

         變量的引用主要用$

  (1) $varname

         主要在數字和一般字符串

   (2)”$varname”   可以確定界限

   (3) ${varname}   可以確定界限        

    當變量值當中包含換行符,如果希望引用出的值同樣包含換行符,只能使用”$varname”

    就像上面的useruid一樣,由于獲得的用戶UID中每行都含有換行符,所以必須用””,如果不用         就會出現下列情況

wKioL1mG6JGh98b4AAAkaWAKUAE758.png

  所有UID排成的一行,因為不識別換行符,所以一定要使用”” ,才可以獲得自己所需的信息

(4)特殊情況:

   “”:弱引用,其中的變量引用會被替換為變量值  

   ”:強引用,其中的變量引用不會被替換為變量值,而保持原字符串

      例如將A=abc  ,當引用A是我們比較一下

wKiom1mG-OOR6kcNAAAy-UAsVss195.png    

 所以當在使用引號時,要注意自己是否引用了變量等

 例如在使用一些特殊字符時,雙引號就不可以實現

 wKiom1mG-vniYDwqAABGEPMSHxI724.png

總結:

     \ 完全轉譯  

     ” 完全轉譯

     “”部分轉譯,對于這四種不能轉移 斜杠\ 反引號`  嘆號! $不能轉,雙引號不能用,大家可        以嘗試一下,之后我會寫一篇博客專門介紹

3)變量的查看

           set 既顯示本地變量也顯示環境變量

      wKioL1mHDHjQ1qMJAABNmY1P_pg988.png

5、環境變量

1)變量的賦值

              (1) vaname=123

                        export varname 

       wKiom1mHD1PAvfpHAAAmDCbSges967.png


       wKiom1mHDtziSHtSAAA0MYXCofE298.png

2)export varname=value

可以直接給便量賦值

wKioL1mHD8SijxnwAAAnFDvzkrg427.png

(3)declare -x varname=value

wKioL1mHEIbz2HHJAAAxVrgAtZQ665.png 

2)變量的引用

               同本地變量的用法一樣

3)變量的查看  

     (1) set 可以查看本地變量和環境變量         

     (2)env    

             (3)printenv 

              在上面的已經看到了env的作用,看一下printenv ,這兩種的用法一樣

       wKioL1mHElGD485AAAAlk0MLD-c955.png

                              (4)export  

                               wKioL1mHE9_gVMK2AAA4V_eGJSg647.png

                             (5) declare –x   

                               wKiom1mHE_-j0JZjAABQhyhsJjo536.png     

                                 比較四種用法:

                              wKiom1mHEyLSLHFMAAAidYSj4YU001.png       

       總結:可以看出env 和printenv顯示的結果一樣,export 和 declare -x 顯示結果一樣 ,四種結果都會顯示出環境變量的數量一樣??梢噪S意選擇其中一種使用

4)變量的銷毀

           環境變量和本地變量的銷毀方式一樣,unset varname

            wKioL1mHFVWC_4RBAAApFyl2Obg615.png

          在平時的使用變量時,或者在寫腳本時,隨手寫一個命令,釋放A變量。畢竟變量的設置也會占用內存,積少成多。

 

原創文章,作者:guanman,如若轉載,請注明出處:http://www.www58058.com/84077

(0)
guanmanguanman
上一篇 2017-08-06
下一篇 2017-08-06

相關推薦

  • python裝飾器1

    簡單介紹裝飾器(注意格式)

    Linux干貨 2017-10-22
  • 文件的查找工具find

    有的時候我們需要快速查找一些文件,但是我們卻不知道這個文件在哪的時候,就急切的需要一個工具來幫助我們,這時候find就誕生了。Find能實現精確查找,雖然速度略慢,但是并不妨礙我們使用,下面就介紹一下find的使用方法。(一) 基于時間戳的查找          假如需要查看七天前的文件,但是總不能一一的去看…

    2017-08-13
  • 集中管理利器-puppet快速入門-上

    帶著問題來學習 ?  從如下內容來看,如何自定義安裝用戶想要的東西呢?                                        …

    Linux干貨 2015-04-22
  • lamp的搭建

    方法一編譯安裝amp:   1.系統環境:CentOS 6,7       CentOS6:apr,apr-util的版本為1.3.9,不適合httpd-2.4    CentOS7:apr,apr-util的版本為1.4+2.開發環境需要安裝:    Developm…

    Linux干貨 2016-10-16
  • ntp時間服務器搭建實例

    ntp時間服務器采用stratum分級架構來處理時間同步;舉例說明:你搭建了一臺ntp服務器,然后同步的server為stratum-1,你的ntp則為stratum-2,你的下級ntp則為tratum-3。依此類推,最多為15層。 1.ntp server安裝: [root@localhost ~]# yum -y …

    Linux干貨 2015-11-10
  • 馬哥教育網絡班22期第一周課程練習1-3天

    1.描述計算機組成及其功能 CPU:  運算器  控制器  寄存器  緩存 存儲器:  RAM(隨機訪問存儲器)  I/O設備:               i:下指令,提供數據 如:鍵鼠     &…

    Linux干貨 2016-08-15
欧美性久久久久