1. 程式人生 > >shell腳本基礎二

shell腳本基礎二

輸出 處理 替換 echo 長度 輸出變量 使用 結束 spool

字符串的處理
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腳本基礎二