shell腳本基礎二
1.字符串的截取
方法一,使用 ${}表達式
格式:${var:起始位置:長度}
Phone="13788768897"
# echo ${#Phone}
11
使用${}方式截取字符串時,起始位置是從0開始的(和數組下標編號類似)
echo ${Phone:1:6}
378876
方法二,使用 expr substr
格式:expr substr "$var" 起始位置 長度
使用expr substr截取字符串時,起始編號從1開始,這個要註意與${}相區分。
expr substr "$Phone" 1 6
137887
方式三,使用cut分割工具
格式:echo $var | cut -b 起始位置-結束位置
選項 -b 表示按字節截取字符,其中起始位置、結束位置都可以省略。當省略起始位置時,視為從第1個字符開始(編號也是從1開始,與expr類似),當省略結束位置時,視為截取到最後。
echo $Phone | cut -b 1-6
137887
# echo $phone | cut -b 2,4,6,8 不連續截取
7679
2.字符串的替換
只替換第1個子串
格式:${var/old/new}
SCHOOL="Tarena IT Group"
# echo ${SCHOOL/r/RRRR} TaRRRRena IT Group 替換全部子串
格式:${var//old/new}
echo ${SCHOOL//r/RRRR}
TaRRRRena IT GRRRRoup
3.字符串的匹配刪除
1)從左向右,最短匹配刪除
格式:${變量名#*關鍵詞}
刪除從左側第1個字符到最近的關鍵詞“oo”的部分,* 作通配符理解:
echo $MAIL //確認變量 MAIL的值
/var/spool/mail/root
echo ${MAIL#*/}
var/spool/mail/root
2)從左向右,最長匹配刪除
格式:${變量名##*關鍵詞}
刪除從左側第1個字符到最遠的關鍵詞“oo”的部分:
echo ${MAIL##*oo}
t
# echo ${MAIL##*/}
root
3)從右向左,最短匹配刪除
格式:${變量名%關鍵詞*}
刪除從右側最後1個字符到往左最近的關鍵詞“oo”的部分,* 做通配符理解
echo ${MAIL%oo*}
/var/spool/mail/r
# echo ${MAIL%/*}
/var/spool/mail
4)從右向左,最長匹配刪除
格式:${變量名%%關鍵詞*}
刪除從右側最後1個字符到往左最遠的關鍵詞“oo”的部分:
echo ${MAIL%%oo*}
var/sp
4.字符串初值的處理
只取值,${var:-word}
若變量var已存在且非Null,則返回 $var 的值;否則返回字串“word”,原變量var的值不受影響
變量值已存在的情況
[root@svr5 ~]# echo $SCHOOL //查看原變量值
Tarena IT Group.
[root@svr5 ~]# echo ${SCHOOL:-Tarena} //因SCHOOL已存在,輸出變量SCHOOL的值
Tarena IT Group.
[root@svr5 ~]# echo $SCHOOL //原變量的值並不改變
Tarena IT Group.
變量值不存在的情況:
[root@svr5 ~]# unset SCHOOL //清除SCHOOL變量
[root@svr5 ~]# echo ${SCHOOL:-Tarena} //因SCHOOL已不存在,輸出“Tarena”
Tarena
[root@svr5 ~]# echo $SCHOOL //變量SCHOOL仍然不存在
shell腳本基礎二