平常運維的Shell腳本中截取字符串的作法

 

在平常運維工做中,常常會碰到須要在一個字符串中截取咱們須要的某些字符的需求,以前介紹了Shell腳本中數組的使用方法,這裏介紹下基於字符串的截取的方法。在shell中截取字符串的方法有下面集中:
${var#*/}
${var##*/}
${var%/*}
${var%%/*}
${var:start:len}
${var:start}
${var:0-start:len}
${var:0-start}html

1) 得到字符串的長度
語法:${#var}   shell

[root@kevin~]# cat test.sh
#!/bin/bash
str="http://www.kevin.com/shibo/anhuigrace"
echo "string: [${str}]"

length=${#str}
echo "length: [${length}]"

執行結果爲:
[root@kevin~]# sh test.sh 
string: [http://www.kevin.com/shibo/anhuigrace]
length: [37]

2)使用 # 和 ## 獲取尾部子字符串 (*號在分隔符的前面,就去掉其以前的字符)
2.1) # 最小限度從前面截取word
語法:${parameter#*word} , 即截取 "第一個分隔符word及其以前的字符所有刪掉"後的字符數組

[root@kevin~]# cat test.sh
#!/bin/bash
str="http://www.kevin.com/shibo/anhuigrace"
echo "string: [${str}]"

#分割符爲'/'
substr=${str#*/}
echo "substr: [${substr}]"

執行結果爲:
[root@kevin~]# sh test.sh 
string: [http://www.kevin.com/shibo/anhuigrace]
substr: [/www.kevin.com/shibo/anhuigrace]

2.2) ## 最大限度從前面截取word
語法:${parameter##*word},即截取 "最後一個分隔符word及其以前的字符所有刪掉"後的字符tomcat

[root@kevin~]# cat test.sh  
#!/bin/bash
str="http://www.kevin.com/shibo/anhuigrace"
echo "string: [${str}]"

#分割符爲'/'
substr=${str##*/}
echo "substr : [${substr}]"

執行結果爲:
[root@kevin~]# sh test.sh  
string: [http://www.kevin.com/shibo/anhuigrace]
substr : [anhuigrace]

3) 使用 % 和 %% 獲取頭部子字符串 (*在分隔符的後面,就去掉其以後的字符)
3.1) % 最小限度從後面截取word
語法:${parameter%word*},即截取 "最後一個分隔符word及其以後的字符所有刪掉"後的字符bash

[root@kevin~]# cat test.sh
#!/bin/bash
str="http://www.kevin.com/shibo/anhuigrace"
echo "string: [${str}]"

substr=${str%/*}
echo "substr : [${substr}]"

執行結果爲:
[root@kevin~]# sh test.sh
string: [http://www.kevin.com/shibo/anhuigrace]
substr : [http://www.kevin.com/shibo]

3.2) %% 最大限度從後面截取word
語法:${parameter%%*word},即截取 "第一個分隔符word及其以後的字符所有刪掉"後的字符運維

[root@kevin~]# cat test.sh
#!/bin/bash
str="http://www.kevin.com/shibo/anhuigrace"
echo "string: [${str}]"

substr=${str%%/*}
echo "substr : [${substr}]"

執行結果爲:
[root@kevin~]# sh test.sh
string: [http://www.kevin.com/shibo/anhuigrace]
substr : [http:]

4)使用 ${var:} 模式獲取子字符串
4.1) 指定從左邊第幾個字符開始以及子串中字符的個數
語法:${var:start:len}ui

[root@kevin~]# cat test.sh
#!/bin/bash
str="http://www.kevin.com/shibo/anhuigrace"
echo "string: [${str}]"

#其中的 0 表示左邊第一個字符開始,7 表示子字符的總個數。
substr=${str:0:7}
echo "substr : [${substr}]"

執行結果爲:
[root@kevin~]# sh test.sh
string: [http://www.kevin.com/shibo/anhuigrace]
substr : [http://]

4.2) 從左邊第幾個字符開始一直到結束
語法:${var:7}spa

[root@kevin~]# cat test.sh
#!/bin/bash
str="http://www.kevin.com/shibo/anhuigrace"
echo "string: [${str}]"

#其中的7表示左邊第8個字符開始  (若是是${str:7:5},就表示從左邊第8個字符開始截取,截取5個字符)
substr=${str:7}
echo "substr : [${substr}]"

執行結果爲:
[root@kevin~]# sh test.sh
string: [http://www.kevin.com/shibo/anhuigrace]
substr : [www.kevin.com/shibo/anhuigrace]

4.3) 從右邊第幾個字符開始以及字符的個數
語法:${var:0-start:len};即${var:0-8,3} 和 ${var:2-10:3} 和 ${var:5:13:3} 是同樣的,即從右邊第8個開始截取,截取3個字符。 即8-0=10-2=13-5=8 htm

[root@kevin~]# cat test.sh
#!/bin/bash
str="http://www.kevin.com/shibo/anhuigrace"
echo "string: [${str}]"

#其中的 0-23 表示右邊算起第23個字符開始,5 表示字符的個數
substr=${str:0-23:5}
echo "substr : [${substr}]"

執行結果爲:
[root@kevin~]# sh test.sh
string: [http://www.kevin.com/shibo/anhuigrace]
substr : [in.co]

4.4) 從右邊第幾個字符開始一直到結束
語法:${var:0-start}blog

[root@kevin~]# cat test.sh
#!/bin/bash
str="http://www.kevin.com/shibo/anhuigrace"
echo "string: [${str}]"

#其中的 0-6 表示右邊算起第6個字符開始
substr=${str:0-6}
echo "substr : [${substr}]"

執行結果爲:
[root@kevin~]# sh test.sh
string: [http://www.kevin.com/shibo/anhuigrace]
substr : [igrace]

======================再來看一例=========================

[root@bzacbsc01ap2001 ~]# hostname 
bzacbsc01ap2001

主機名中第3到第6字符是本機的業務模塊名稱,也就是cbs。下面腳本中的表示從a字符串左邊的第4個字符開始截取,截取3個字符(即3:3)
[root@bzacbsc01ap2001 ~]# cat test.sh
#!/bin/bash
a=$(hostname)
b=${a:3:3}
APP=$(echo ${b})

echo "本機tomcat的安裝目錄爲: /opt/${APP}/tomcat"

執行結果爲:
[root@bzacbsc01ap2001 ~]# sh test.sh 
本機tomcat的安裝目錄爲: /opt/cbs/tomcat
相關文章
相關標籤/搜索