cheun 发表于 2018-8-19 06:23:07

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的值不受影响
  变量值已存在的情况
  # echo $SCHOOL            //查看原变量值
  Tarena IT Group.
  # echo ${SCHOOL:-Tarena}      //因SCHOOL已存在,输出变量SCHOOL的值
  Tarena IT Group.
  # echo $SCHOOL            //原变量的值并不改变
  Tarena IT Group.
  变量值不存在的情况:
  # unset SCHOOL            //清除SCHOOL变量
  # echo ${SCHOOL:-Tarena}      //因SCHOOL已不存在,输出“Tarena”
  Tarena
  # echo $SCHOOL            //变量SCHOOL仍然不存在


页: [1]
查看完整版本: shell脚本基础二