歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

shell字符串處理

字符串操作(長度,讀取,替換)
表達式 含義 ${#string} $string的長度 ${string:position} 在$string中, 從位置$position開始提取子串 ${string:position:length} 在$string中, 從位置$position開始提取長度為$length的子串 ${string#substring} 從變量$string的開頭, 刪除最短匹配$substring的子串 ${string##substring} 從變量$string的開頭, 刪除最長匹配$substring的子串 ${string%substring} 從變量$string的結尾, 刪除最短匹配$substring的子串 ${string%%substring} 從變量$string的結尾, 刪除最長匹配$substring的子串 ${string/substring/replacement} 使用$replacement, 來代替第一個匹配的$substring ${string//substring/replacement} 使用$replacement, 代替所有匹配的$substring ${string/#substring/replacement} 如果$string的前綴匹配$substring, 那麼就用$replacement來代替匹配到的$substring ${string/%substring/replacement} 如果$string的後綴匹配$substring, 那麼就用$replacement來代替匹配到的$substring
字符串操作舉例:
1. 長度
$ string=linuxeye
$ echo ${#string}
8

2. 截取字串
$ string=linuxeye
$ echo ${string:5}
eye
$ echo ${string:0:5} #默認從0開始,可省略,如下
linux
$ echo ${string::5}
linux

3. 字符串刪除
$ redis_file=c:/windows/src/redis-2.8.4.tar.gz
$ echo ${redis_file#/}
c:/windows/src/redis-2.8.4.tar.gz
$ echo ${redis_file#*/}
windows/src/redis-2.8.4.tar.gz
$ echo ${redis_file##*/}
redis-2.8.4.tar.gz
echo ${redis_file%/*}
c:/windows/src
$ echo ${redis_file%%/*}
c:

${變量名#substring正則表達式}從字符串開頭開始配備substring,刪除匹配上的表達式。
${變量名%substring正則表達式}從字符串結尾開始配備substring,刪除匹配上的表達式。
注意:${redis_file##*/},${redis_file%/*} 分別是得到文件名,或者目錄地址最簡單方法。 

4. 字符串替換
$ echo ${redis_file/\//\\}
c:\windows/src/redis-2.8.4.tar.gz
$ echo ${redis_file//\//\\}
c:\windows\src\redis-2.8.4.tar.gz
${變量/查找/替換值} 一個"/"表示替換第一個,"//"表示替換所有,當查找中出現了:"/"請加轉義符"\/"表示。

判斷讀取字符串值
表達式 含義 ${var} 變量var的值, 與$var相同 ${var-DEFAULT} 如果var沒有被聲明, 那麼就以$DEFAULT作為其值 ${var:-DEFAULT} 如果var沒有被聲明, 或者其值為空, 那麼就以$DEFAULT作為其值,判斷var變量是否沒有定義 ${var=DEFAULT} 如果var沒有被聲明, 那麼就以$DEFAULT作為其值 ${var:=DEFAULT} 如果var沒有被聲明, 或者其值為空, 那麼就以$DEFAULT作為其值 ,判斷var變量是否沒有定義,並確保變量始終有值 ${var+OTHER} 如果var聲明了, 那麼其值就是$OTHER, 否則就為null字符串 ${var:+OTHER} 如果var被設置了, 那麼其值就是$OTHER, 否則就為null字符串 ${var?ERR_MSG} 如果var沒被聲明, 那麼就打印$ERR_MSG ${var:?ERR_MSG} 如果var沒被設置, 那麼就打印$ERR_MSG ${!varprefix*} 匹配之前所有以varprefix開頭進行聲明的變量 ${!varprefix@} 匹配之前所有以varprefix開頭進行聲明的變量
判斷讀取字符串值舉例:
$ output=${FILE:-UNSET}
$ echo $output
UNSET
$ FILE=/root/lnmp
$ output=${FILE:-UNSET}
$ echo $output
/root/lnmp

對變量的路徑進行操作時,最好先判斷路徑是否為非空,如下path變量沒有定義,則取/tmp,防止變量沒定義誤刪除:
$ find ${path-/tmp} -name *.tar.gz -type f | xargs rm -f
原文:http://blog.linuxeye.com/390.html
Copyright © Linux教程網 All Rights Reserved