Shell 字符串處理

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章