shell脚本基础二

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的值不受影响
变量值已存在的情况
[[email protected] ~]# echo $SCHOOL //查看原变量值
Tarena IT Group.
[[email protected] ~]# echo ${SCHOOL:-Tarena} //因SCHOOL已存在,输出变量SCHOOL的值
Tarena IT Group.
[[email protected] ~]# echo $SCHOOL //原变量的值并不改变
Tarena IT Group.
变量值不存在的情况:

[[email protected] ~]# unset SCHOOL //清除SCHOOL变量
[[email protected] ~]# echo ${SCHOOL:-Tarena} //因SCHOOL已不存在,输出“Tarena”
Tarena
[[email protected] ~]# echo $SCHOOL //变量SCHOOL仍然不存在

以上是关于shell脚本基础二的主要内容,如果未能解决你的问题,请参考以下文章

Linux Bash-脚本基础

shell 脚本 片段

用于确保在任何给定时间仅运行一个 shell 脚本的 shell 片段 [重复]

shell脚本基础之详解基本脚本的构建

Linux Shell脚本编程-基础2

shell脚本基础三(循环篇)