——來自《鳥哥的Linux私房菜》測試
——總結作方便查閱之用spa
變量的取用: echo3d
echo $variable
echo $PATH
echo ${PATH}blog
變量的配置守則
1.變量與變量內容以一個等號『=』來連結,以下所示:
『myname=VBird』ci
2.等號兩邊不能直接接空格符,以下所示爲錯誤:
『myname = VBird』或『myname=VBird Tsai』字符串
3.變量名稱只能是英文字母與數字,可是開頭字符不能是數字,以下爲錯誤:
『2myname=VBird』io
4.變量內容如有空格符可以使用雙引號『"』或單引號『'』將變量內容結合起來,但
雙引號內的特殊字符如 $ 等,能夠保有本來的特性,以下所示:
『var="lang is $LANG"』則可得『lang is en_US』
單引號內的特殊字符則僅爲通常字符 (純文本),以下所示:
『var='lang is \$LANG‘』則得『lang is \$LANG』table
5.可用跳脫字符『 \ 』將特殊符號(如 [Enter], $, \, 空格符, '等)變成通常字符;class
6.在一串命令中,還須要藉由其餘的命令提供的信息,能夠使用反單引號『`命令`』或 『$(命令)』。特別注意,那個 ` 是鍵盤上方的數字鍵 1 左邊那個按鍵,而不是單引號! 例如想要取得核心版本的配置:
『version=\$(uname -r)』再『echo \$version』可得『2.6.18-128.el5』變量
7.若該變量爲擴增變量內容時,則可用"\$變量"或\${變量} 累加內容,以下所示:
『PATH="$PATH":/home/bin』
PS.我通常用\${變量},在變量拼接的時候尤爲重要,name=\$nameyes,name的內容是\$nameyes 這個變量;name=\${name}yes,能夠把\$name和yes拼接起來
8.若該變量須要在其餘子程序運行,則須要以 export 來使變量變成環境變量:
『export PATH』
9.一般大寫字符爲系統默認變量,自行配置變量能夠使用小寫字符,方便判斷 (純粹依照使用者興趣與嗜好) ;
10.取消變量的方法爲使用 unset :『unset 變量名稱』例如取消 myname 的配置:
『unset myname』
變量內容的刪除、取代與替換
範例一:先讓小寫的 path 自定義變量配置的與 PATH 內容相同
path=${PATH}
echo $path
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
範例二:假設要將前兩個目錄刪除掉,如何顯示?
echo ${path#/*kerberos/bin:}
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
解釋:
範例三:我想要刪除前面全部的目錄,僅保留最後一個目錄
echo ${path##/*:}
/root/bin
多加了一個 # 變成 ## 以後,變成『刪除掉最長的那個數據』
若是想要『從後面向前刪除變量內容』呢? 這個時候就得使用百分比 (%) 符號了
範例四:我想要刪除最後面那個目錄,亦即從 : 到 bin 爲止的字符串
echo ${path%:*bin}
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
範例五:那若是我只想要保留第一個目錄呢?
echo ${path%%:*bin}
/usr/kerberos/sbin
瞭解了刪除功能後,接下來談談取代吧
範例六:將 path 的變量內容內的 sbin 取代成大寫 SBIN:
echo ${path/sbin/SBIN}
/usr/kerberos/SBIN:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
這個部分就容易理解的多了!關鍵詞在於那兩個斜線,兩斜線中間的是舊字符串,後面的是新字符串
echo ${path//sbin/SBIN}
/usr/kerberos/SBIN:/usr/kerberos/bin:/usr/local/SBIN:/usr/local/bin:/SBIN:/bin:/usr/SBIN:/usr/bin:/root/bin
若是是兩條斜線,那麼就變成全部符合的內容都會被取代
總結
變量配置方式 | 說明 |
${變量#關鍵詞} ${變量##關鍵詞} |
若變量內容從頭開始的數據符合『關鍵詞』,則將符合的最短數據刪除 若變量內容從頭開始的數據符合『關鍵詞』,則將符合的最長數據刪除 |
${變量%關鍵詞} ${變量%%關鍵詞} |
若變量內容從尾向前的數據符合『關鍵詞』,則將符合的最短數據刪除 若變量內容從尾向前的數據符合『關鍵詞』,則將符合的最長數據刪除 |
${變量/舊字符串/新字符串} ${變量//舊字符串/新字符串} |
若變量內容符合『舊字符串』則『第一個舊字符串會被新字符串取代』 若變量內容符合『舊字符串』則『所有的舊字符串會被新字符串取代』 |
變量的測試與內容替換
在某些時刻咱們經常須要『判斷』某個變量是否存在,若變量存在則使用既有的配置,若變量不存在則給予一個經常使用的配置。
範例一:測試一下是否存在 username 這個變量,若不存在則給予 username 內容爲 root
echo $username
<==因爲出現空白,因此 username 可能不存在,也多是空字符串
username=${username-root}
echo $username
root <==由於 username 沒有配置,因此主動給予名爲 root 的內容。
username="vbird tsai" <==主動配置 username 的內容
username=${username-root}
echo $username
vbird tsai <==由於 username 已經配置了,因此使用舊有的配置而不以 root 取代
範例二:若 username 未配置或爲空字符串,則將 username 內容配置爲 root
username=""
username=${username-root}
echo $username
<==由於 username 被配置爲空字符串了!因此固然仍是保留爲空字符串!
username=${username:-root}
echo $username
root <==加上『 : 』後若變量內容爲空或者是未配置,都可以之後面的內容替換!
變量配置方式 | str 沒有配置 | str 爲空字符串 | str 已配置非爲空字符串 |
var=${str-expr} | var=expr | var= | var=$str |
var=${str:-expr} | var=expr | var=expr | var=$str |
var=${str+expr} | var= | var=expr | var=expr |
var=${str:+expr} | var= | var= | var=expr |
var=${str=expr} | str=expr var=expr |
str 不變 var= |
str 不變 var=$str |
var=${str:=expr} | str=expr var=expr |
str=expr var=expr |
str 不變 var=$str |
var=${str?expr} | expr 輸出至 stderr | var= | var=$str |
var=${str:?expr} | expr 輸出至 stderr | expr 輸出至 stderr | var=$str |