變數的測試與內容替換

2021-05-27 12:47:55 字數 4868 閱讀 2264

在某些時刻我們常常需要『判斷』某個變數是否存在,若變數存在則使用既有的配置,若變數不存在則給予乙個常用的配置。 我們舉底下的例子來說明好了,看看能不能較容易被你所理解呢!

範例一:測試一下是否存在 username 這個變數,若不存在則給予 username 內容為 root

[root@sor_sys ~]# echo $username

<==由於出現空白,所以 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...