shell編程中的變量擴展

在bashshell中$符號會觸發3種擴展,包括變量擴展,命令替換及算術擴展。其中變量擴展內容最爲豐富,本節我們就來具體介紹一下$是如何實現變量擴展的。
變量擴展的基本格式是${}.
1. 變量擴展:測試存在性及空值
a.測試變量“存在與否與是否爲空”的基本語法
${待測變量:-默認值}
意義爲:若待測變量不存在或爲空值,那麼返回一默認值,否則返回待測變量的值。
${待測變量:=默認值}
意義爲:若待測變量不存在或空值時,給變量賦值爲默認值,否則待測變量值維持原狀。
這裏要注意區別返回值與賦值的區別。若變量不存在或爲空時,返回值後變量仍爲空或不存在,所以這裏一般會使用“變量名稱=${待測變量:-默認值}”形式;但賦值後變量便有了值。
${待測變量:?提示信息}
意義爲:若待測變量值爲空或不存在時,返回變量名稱+提示信息,並立即中斷shell腳本的運行,用來防止變量值爲空時會對以後的程序運行造成傷害。
b.測試變量的存在性
${待測變量:+真值}
意義爲:若變量存在且其值非空時,傳回“真值”;若不然,傳回空值。
2.變量擴展:取字符串切片、字符串長度
a.取字符串切片
字符串的第一個字符,編號爲0,依次增加1
取字符串切片有兩個主要的語法:
語法1:${變量:位置起點}
意義爲:由指定的位置開始,截取字符串到字符串結束
語法2:${變量:位置起點:長度}
意義爲:由指定的位置開始,截取長度爲“長度”的子字符串
例如:利用shell程序判斷分割字符變量IFS內容包括“空格”,“TAB”及“換行字符”
解: echo "_${IFS:0:1}_"
echo "_${IFS:1:1}_"
echo "_${IFS:2:1}_"
輸除分別爲“空格”,“tab個空格”“換行”
這裏之所以用_是因爲這些輸出都是空白的,用_ _夾住用來查看輸出的正確與否。
b.計算字符串長度
語法爲:${#變量} :個人這個超級好用,也很簡單,關鍵是要牢記
3.變量擴展: 對比樣式
a.由字符串前面對比,刪除相符者
語法一:${變量#樣式}
意義爲:從變量前面開始對比,刪除與樣式相符的最短者
例如:
filename="/usr/sbin/ntpdate"
r=${filename#/*/}
echo $r
輸出爲:sbin/ntpdate
語法二:${變量##樣式}
意義爲:由字符串前面對比,刪除與樣式相符的最長者
例:
r=${filename##/*/}
echo $r
輸出爲ntpdate
這一命令等同於basename{filename}
b、由字符串後面對比,刪除相符者
同樣存在兩種語法
語法1.${變量%樣式}
意義爲:由字符串後面開始對比,刪除最短相符者
語法2.${變量%%樣式}
意義爲:由字符串後面開始對比,刪除最長相符者
c.取代或刪除部分字符串
替換第一個符合樣式的字符串
語法:${變量/樣式/替換字符串}
替換全部符合樣式的字符串
語法:${變量//樣式/替換字符串}
例如:
act="mail:x:8:8"
r1=${act/:/,} 輸出爲:mail,x:8:8
r2=${act//:/,} 輸出爲:mail,x,8,8
若替換字符串爲空,則代表把符合樣式的刪掉
4變量擴展:取變量名稱列表、數組及索引列表
a.取變量名稱列表
語法爲:${!開頭字符串@}或${!開頭字符串*}
意義爲:把所有以指定字符串開頭的變量名稱列出,各變量之間,用$IFS定義的第一個分隔符隔開。
例:
filename="ntpdate"
dir="/usr/sbin"
dir_file="$dir/$filename"
echo ${!dir@}
輸出爲:dir dir_file
注意這裏取的是變量名稱的列表,而不是取的變量值
b.取數組索引列表
語法爲:${!數組變量[@]}或${!數組變量[*]}
例如:
ar={a b c}
r=${!ar[@]}
輸出爲0 1 2

轉載自:http://wbwk2005.blog.51cto.com/2215231/441680
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章