在某些時刻我們常常需要『判斷』某個變數是否存在,若變數存在則使用既有的配置,若變數不存在則給予乙個常用的配置。 我們舉底下的例子來說明好了,看看能不能較容易被你所理解呢!
範例一:測試一下是否存在 username 這個變數,若不存在則給予 username 內容為 root<==由於出現空白,所以 username 可能不存在,也可能是空字串[root@sor_sys ~]# echo $username
[root@sor_sys ~]# username=$
[root@sor_sys ~]# echo $username
root<==因為 username 沒有配置,所以主動給予名為 root 的內容。
[root@sor_sys ~]# username="zhuying"
[root@sor_sys ~]# username=$
[root@sor_sys ~]# echo $username
zhuying<==因為 username 已經配置了,所以使用舊有的配置而不以 root 取代
[root@sor_sys ~]#
在上面的範例中,重點在於減號『 - 』
new_var=$
新的變數,主要用來取代舊變數。新舊變數名稱其實常常是一樣的
new_var=$
new_var=$
舊的變數,被測試的專案!
new_var=$
變數的『內容』,在本範例中,這個部分是在『給予未配置變數的內容』不過這還是有點問題!因為 username 可能已經被配置為『空字串』了!果真如此的話,那你還可以使用底下的範例來給予 username 的內容成為 root 喔!
範例二:若 username 未配置或為空字串,則將 username 內容配置為 root[root@sor_sys ~]# username=""
[root@sor_sys ~]# username=$
[root@sor_sys ~]# echo $username
[root@sor_sys ~]#
<==因為 username 被配置為空字串了!所以當然還是[root@sor_sys ~]# username=$保留為空字串!
[root@sor_sys ~]# echo $username
root<==加上『 : 』後若變數內容為空或者是未配置,都能夠以後面的內容替換!
[root@sor_sys ~]#
在大括號內有沒有冒號『 : 』的差別是很大的!加上冒號後,被測試的變數未被配置或者是已被配置為空字串時, 都能夠用後面的內容 (本例中是使用 root 為內容) 來替換與配置!這樣可以了解了嗎?除了這樣的測試之外, 還有其他的測試方法喔!
tips:
底下的例子當中,那個 var 與 str 為變數,我們想要針對 str 是否有配置來決定 var 的值喔! 一般來說, str: 代表『str 沒配置或為空的字串時』;至於 str 則僅為『沒有該變數』。
變數配置方式
str 沒有配置
str 為空字串
str 已配置非為空字串
var=$
var=expr
var=
var=$str
var=$
var=expr
var=expr
var=$str
var=$
var=
var=expr
var=expr
var=$
var=
var=
var=expr
var=$
str=expr
var=expr
str 不變
var=
str 不變
var=$str
var=$
str=expr
var=expr
str=expr
var=expr
str 不變
var=$str
var=$
expr 輸出至 stderr
var=
var=$str
var=$
expr 輸出至 stderr
expr 輸出至 stderr
var=$str
根據上面這張表,我們來進行幾個範例的練習吧! ^_^!首先讓我們來測試一下,如果舊變數 (str) 不存在時, 我們要給予新變數乙個內容,若舊變數存在則新變數內容以舊變數來替換,結果如下:
測試:先假設 str 不存在 (用 unset) ,然後測試一下減號 (-) 的用法:[root@sor_sys ~]# unset str; var=$
[root@sor_sys ~]# echo var="$var", str="$str"
var=newvar, str=<==因為 str 不存在,所以 var 為 newvar
[root@sor_sys ~]#
測試:若 str 已存在,測試一下 var 會變怎樣?:[root@sor_sys ~]# str="oldvar"; var=$
[root@sor_sys ~]# echo var="$var", str="$str"
var=oldvar, str=oldvar<==因為 str 存在,所以 var 等於 str 的內容
[root@sor_sys ~]#
關於減號 (-) 其實上面我們談過了!這裡的測試只是要讓你更加了解,這個
減號的測試並
不會影響到舊變數的內容。 如果你想要將舊變數內容也一起替換掉的話,那麼就使用等號 (=)吧!
測試:先假設 str 不存在 (用 unset) ,然後測試一下減號 (+) 的用法:
[root@sor_sys ~]# unset str; var=$
[root@sor_sys ~]# echo var="$var", str="$str"
var=, str=<==因為 str 不存在,所以 var 為空
[root@sor_sys ~]#
測試:若 str 已存在,測試一下 var 會變怎樣?:
[root@sor_sys ~]# str="oldvar"; var=$
[root@sor_sys ~]# echo var="$var", str="$str"
var=newvar, str=oldvar
[root@sor_sys ~]#<==因為 str 存在,所以 var 為newvar
測試:先假設 str 不存在 (用 unset) ,然後測試一下等號 (=) 的用法:[root@sor_sys ~]# unset str; var=$
[root@sor_sys ~]# echo var="$var", str="$str"
var=newvar, str=newvar
[root@sor_sys ~]#<==因為 str 不存在,所以 var/str 均為 newvar
測試:如果 str 已存在了,測試一下 var 會變怎樣?[root@sor_sys ~]# str="oldvar"; var=$
[root@sor_sys ~]# echo var="$var", str="$str"
var=oldvar, str=oldvar
[root@sor_sys ~]#<==因為 str 存在,所以 var 等於 str 的內容
那如果我只是想知道,如果舊變數不存在時,整個測試就告知我『有錯誤』,此時就能夠使用問號『 ? 』的幫忙啦! 底下這個測試練習一下先!
[root@sor_sys ~]# str="oldvar"; var=$
[root@sor_sys ~]# echo var="$var", str="$str"
var=oldvar, str=oldvar
基本上這種變數的測試也能夠透過 shell script 內的 if...then... 來處理, 不過既然 bash 有提供這麼簡單的方法來測試變數,那我們也可以多學一些嘛! 不過這種變數測試通常是在程式設計當中比較容易出現。
關於shell變數的測試與內容替換
參考資料 鳥哥的私房菜 linux基礎學習篇 第三版 在 鳥哥的私房菜 linux基礎學習篇 第三版 第11章中,鳥哥關於變數的測試與內容替換中,鳥哥最後用範例說明了變數替換中 三種特殊符號的用法。看完這些例程,給我最大的感受就是var 或者var 或者var 的變數替換就與c語言中唯一的三目運算子...
變數替換測試
語法說明 從變數開頭進行規則匹配,將符合最短的資料刪除 從變數開頭進行規則匹配,將符合最長的資料刪除 從變數尾部進行規則匹配,將符合最短的資料刪除 從變數尾部進行規則匹配,將符合最長的資料刪除 變數內容符合舊字串則,第乙個舊字串會被新字串取代 變數內容符合舊字串則,全部的舊字串會被新字串取代 mas...
shell中變數的測試與替換
var 與 str 為變數,我們想要針對 str 是否有配置來決定 var 的值喔!一般來說,str 代表 str 沒配置或為空的字串時 至於 str 則僅為 沒有該變數 變數配置方式 str 沒有配置 str 為空字串 str 已配置非為空字串 var var expr var var str v...