1. 程式人生 > >shell指令碼學習第三彈-變數的使用

shell指令碼學習第三彈-變數的使用

shell指令碼學習第三彈-變數的使用


一、什麼是變數
相信大家聽到變數這個詞語很敏感吧,我們的C語言中也有所謂的變數,變數即在程式執行過程中它的值是允許改變的量。
也可以這麼說,變數的本質是一種鍵值對,舉個例子來說:str=“123456”,“12345”就是鍵值對中的Value,str就是鍵值對中的Key值。


二、shell變數的使用
1.變數名以英文字母或者下劃線開頭,但是不能以數字開頭
2.變數名區分大小寫
3.變數名與等號之間,等號與變數值之間不要有空格
4.只有在使用變數的值的時候,才在變數名之前加

,其他情況,比如刪除、賦值、迴圈迭代都不用加

5.如果一行只有一條命令,則每一行不用以分號結尾,每一條命令以換行分隔
6.如果一行有多條命令,則每一條命令以分號分隔,但建議每行只有一條命令
7.當賦值的內容中包含空格,要加引號


三、shell變數的分類
shell變數分為三類,分別為環境級變數,使用者級變數,系統級變數;
(1)環境級變數只在當前shell中生效,shell關閉變數丟失,
(2)使用者級變數只針對當前使用者有效,
(3)系統級變數被寫在系統的配置檔案/etc/profile中
注意: 變數是儲存在程式執行的記憶體中的,所以shell變數不能永久的儲存在系統中。


四、實踐
首先說明:echo是輸出文字
來看一個例子:

  1 #!/bin/bash
  2 
  3 var="hello shell"
  4 
  5 echo $var
  6 var='123'
  7 echo $var
  #這個是一個簡化的寫法,原型是 echo ${var}

結果:

hello shell
123

我們再來看一組例子:

  1 #!/bin/bash
  2 
  3 var=132
  4 echo $var
  5 echo "$var"
  6 echo '$var'

結果:

132
132
$var

咦,神奇,為什麼會出現這個問題?
很顯然,我們會發現一個是單引號,另外一個是雙引號,單引號的變數替換被禁止掉了;這之間的區別我就得說道說道了。
單引號為強引用,雙引號為弱引用,即弱引用,引用的是變數值,而”即強引用,引用的是變數本身的值。這麼簡明的說法想必大家都懂了吧!!!
兩者的區別在於, ““弱引用不能轉譯 “”,”`”,"!","$"
來看一個例子:

  1 #!/bin/bash
  2 
  3 echo "\\"
  4 echo '\\'

結果:

\
\\


五、區域性變數
在shell中,區域性變數是要宣告的——local
例子:

  1 #!/bin/bash
  2 
  3 b=5
  4 fun1()
  5 {
  6 b=3 
  7 echo $b
  8 }
  9 
 10 fun2()
 11 {
 12 local b=1
 13 echo $b
 14 }
 15 echo $b
 16 fun1
 17 echo $b
 18 fun2
 19 echo $b

結果:

5
3
3
1
3

由此可見,區域性變數不會影響全域性變數。


六、刪除變數
通常我們刪除變數是用unset函式,比如

  1 #!/bin/bash
  2 
  3 var="hello shell"
  4 unset var
  5 echo $var

我們會發現結果是空,成功刪除了var環境變數。