1. 程式人生 > >Shell 字符串

Shell 字符串

logs 除了 運算符 替換 mailto 數據類型 求字符串長度 header 最長

字符串是shell編程中最常用最有用的數據類型(除了數字和字符串,也沒啥其它類型好用了),字符串可以用單引號,也可以用雙引號,也可以不用引號。單雙引號的區別跟PHP類似,輸出語句echo和PHP也挺像。

單引號

str='this is a string'

單引號字符串的限制:

  • 單引號裏的任何字符都會原樣輸出,單引號字符串中的變量是無效的;
  • 單引號字串中不能出現單引號(對單引號使用轉義符後也不行)。

雙引號

your_name='qinjx'
str="Hello, I know your are \"$your_name\"! \n"

雙引號的優點:

  • 雙引號裏可以有變量
  • 雙引號裏可以出現轉

反引號

 反引號用於將系統命令的輸出到變量

字符串的值

表達式 含義
${var} 變量var的值, 與$var相同
${var-DEFAULT} 如果var沒有被聲明, 那麽就以$DEFAULT作為其值 *
${var:-DEFAULT} 如果var沒有被聲明, 或者其值為空, 那麽就以$DEFAULT作為其值 *
${var=DEFAULT} 如果var沒有被聲明, 那麽就以$DEFAULT作為其值 *
${var:=DEFAULT} 如果var沒有被聲明, 或者其值為空, 那麽就以$DEFAULT作為其值 *
${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開頭進行聲明的變量

拼接字符串

your_name="abc"
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1

獲取字符串長度

string="abcd"
echo ${#string} #輸出 4

查找子字符串

查找字符 "is" 的位置:

string="runoob is a great company"
echo `expr index "$string" is`  # 輸出 8    "`" 是反引號,而不是單引號 "'"

字符串截取

假設有變量 var=http://blog.csdn.net/Liveor_Die

1. # 號截取,刪除左邊字符,保留右邊字符。

echo ${var#*//}

其中 var 是變量名,# 號是運算符,*// 表示從左邊開始刪除第一個 // 號及左邊的所有字符

即刪除 http://

結果是 :blog.csdn.net/Liveor_Die

2. ## 號截取,刪除左邊字符,保留右邊字符。

echo ${var##*/}  #  #、## 表示從左邊開始刪除。一個 # 表示從左邊刪除到第一個指定的字符;兩個 # 表示從左邊刪除到從右邊第一個/及左邊的所有字符。

##*/ 表示從左邊開始刪除最後(最右邊)一個 / 號及左邊的所有字符

即刪除http://blog.csdn.net/

結果是Liveor_Die

3. %號截取,刪除右邊字符,保留左邊字符

echo ${var%/*}

%/* 表示從右邊開始,刪除第一個 / 號及右邊的字符

結果是:http://blog.csdn.net

4. %% 號截取,刪除右邊字符,保留左邊字符

echo ${var%%/*}

%%/* 表示從右邊開始,刪除最後(最左邊)一個 / 號及右邊的字符

結果是:http:

5. 從左邊第幾個字符開始,及字符的個數

echo ${var:0:5}

其中的 0 表示左邊第一個字符開始,5 表示字符的總個數。

結果是:http:

6. 從左邊第幾個字符開始,一直到結束。

echo ${var:7}

其中的 7 表示左邊第8個字符開始,一直到結束。

結果是 :blog.csdn.net/Liveor_Die

7. 從右邊第幾個字符開始,及字符的個數

echo ${var:0-7:3}

其中的 0-7 表示右邊算起第七個字符開始,3 表示字符的個數。

結果是:ero

8. 從右邊第幾個字符開始,一直到結束。

echo ${var:0-7}

表示從右邊第七個字符開始,一直到結束。

結果是:eor_Die

註:(左邊的第一個字符是用 0 表示,右邊的第一個字符用 0-1 表示)

字符串替換

用replace替換字符串中的子串substring

格式:${str/substring/replace}或者${str//substring/replace}

替換字符串中第一個abc

echo ${str/abc/TEST}  echo ${str/abc/TEST}  

替換字符串中所有的abc

echo ${str//abc/TEST}  

**從str開頭匹配,用TEST替換最長的a*c**

echo ${str/#a*c/TEST}

**從str結尾匹配,用TEST替換最長的b*l**

echo ${str/%b*l/TEST}

expr操作字符串

對於上面的一些操作,如果改用expr執行,能簡化一些。

str='hello world!'  
#求字符串長度  
length=`expr length $str`  
echo $length  

#截取字符串  
substr=`expr substr $str 1 4`  
echo $substr  


#求字符串中元素的下標索引,如果元素不存在輸出0(因為此時索引從1開始)  
index=`expr index $str "l"`  
echo $index  

Shell 字符串