1、獲取字符串長度
[root@ chenc01 ~]# VAR='hello world!'
[root@ chenc01 ~]# echo $VAR
hello world!
[root@ chenc01 ~]# echo ${#VAR}
12
2、字符串切片
格式:
${parameter:offset}
${parameter:offset:length}
截取從offset個字符開始,向後length個字符。
截取hello字符串:
[root@ chenc01 ~]# VAR='hello world!'
[root@ chenc01 ~]# echo ${VAR:0:5}
hello
# 截取wo字符
[root@ chenc01 ~]# echo ${VAR:6:2}
wo
# 截取world!字符串
[root@ chenc01 ~]# echo ${VAR:5}
world!
# 截取最後一個字符
[root@ chenc01 ~]# echo ${VAR:(-1)}
!
# 截取最後二個字符
[root@ chenc01 ~]# echo ${VAR:(-2)}
d!
# 截取從倒數第3個字符後的2個字符
[root@ chenc01 ~]# echo ${VAR:(-3):2}
ld
3、替換字符串
格式:${parameter/pattern/string}
[root@ chenc01 ~]# VAR='hello world world!'
# 將第一個world字符串替換爲WORLD
[root@ chenc01 ~]# echo ${VAR/world/WORLD}
hello WORLD world!
# 注意: 原來的變量var並沒有改變
# 將全部world字符串替換爲WORLD
[root@ chenc01 ~]# echo ${VAR//world/WORLD}
hello WORLD WORLD!
# 替換正則匹配爲空
[root@ chenc01 ~]# VAR=123abc
[root@ chenc01 ~]# echo ${VAR//[^0-9]/}
123
[root@ chenc01 ~]# echo ${VAR//[0-9]/}
abc
# patterm前面開頭一個正斜槓爲只匹配第一個字符串,兩個正斜槓爲匹配所有字符。
4、字符串截取
格式:
${parameter#word} # 刪除匹配前綴
${parameter##word}
${parameter%word} # 刪除匹配後綴
${parameter%%word}
# 去掉左邊,最短匹配模式,##最長匹配模式。
% 去掉右邊,最短匹配模式,%%最長匹配模式。
# 以//爲分隔符截取右邊字符串
[root@ chenc01 ~]# echo ${URL#*//}
www.baidu.com/baike/user.html
# 以/爲分隔符截取右邊字符串
[root@ chenc01 ~]# echo ${URL##*/}
user.html
# 以//爲分隔符截取左邊字符串
[root@ chenc01 ~]# echo ${URL%%//*}
http:
# 以/爲分隔符截取左邊字符串
[root@ chenc01 ~]# echo ${URL%/*}
http://www.baidu.com/baike
# 以.爲分隔符截取左邊
[root@ chenc01 ~]# echo ${URL%.*}
http://www.baidu.com/baike/user
# 以.爲分隔符截取右邊
[root@ chenc01 ~]# echo ${URL##*.}
html
5、變量狀態賦值
${VAR:-string} 如果VAR變量爲空則返回string
${VAR:+string} 如果VAR變量不爲空則返回string
${VAR:=string} 如果VAR變量爲空則重新賦值VAR變量值爲string
${VAR:?string} 如果VAR變量爲空則將string輸出到stderr
# 如果變量爲空就返回hello world!
[root@ chenc01 ~]# VAR=
[root@ chenc01 ~]# echo ${VAR:-'hello world!'}
hello world!
# 如果變量不爲空就返回hello world!
[root@ chenc01 ~]# VAR="hello"
[root@ chenc01 ~]# echo ${VAR:+'hello world!'}
hello world!
# 如果變量爲空就重新賦值
[root@ chenc01 ~]# VAR=
[root@ chenc01 ~]# echo ${VAR:=hello}
hello
[root@ chenc01 ~]# echo $VAR
hello
# 如果變量爲空就將信息輸出stderr
[root@ chenc01 ~]# VAR=
[root@ chenc01 ~]# echo ${VAR:?value is null}
-bash: VAR: value is null
${}主要用途大概就這麼多了,另外還可以獲取數組元素,在後面章節會講到。
6、字符串顏色
再介紹下字符串輸出顏色,有時候關鍵地方需要醒目,顏色是最好的方式:
字體顏色 | 字體背景顏色 | 顯示方式 |
---|---|---|
30:黑31:紅32:綠33:黃34:藍色35:紫色36:深綠37:白色 | 40:黑41:深紅42:綠43:黃色44:藍色45:紫色46:深綠47:白色 | 0:終端默認設置1:高亮顯示4:下劃線5:閃爍7:反白顯示8:隱藏 |
格式:\033[1;31;40m # 1是顯示方式,可選。31是字體顏色。40m是字體背景顏色。\033[0m # 恢復終端默認顏色,即取消顏色設置。 |
示例:
#!/bin/bash
[root@ chenc01 ~]# cat a.sh
#!/bin/bash
# 字體顏色
for i in {31..37}; do
echo -e "\033[$i;40mHello world!\033[0m"
done
# 背景顏色
for i in {41..47}; do
echo -e "\033[47;${i}mHello world!\033[0m"
done
# 顯示方式
for i in {1..8}; do
echo -e "\033[$i;31;40mHello world!\033[0m"
done