Shell 字符串
字符串是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
查找子字符串
查找字符 "i 或 s" 的位置:
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 字符串