博客
关于我
我的shell编程进阶(一)-变量
阅读量:662 次
发布时间:2019-03-15

本文共 2014 字,大约阅读时间需要 6 分钟。

变量替换及字符串操作

一、变量替换规则

在Shell脚本中,$前面的变量可以通过特殊字符进行操作。这些字符用于字符串替换和删除,常见的有井号#、百分号%、斜杠/和其他特殊符号。

1. 从左到右删除或替换变量

  • ${变量名#匹配规则}

    • 从变量开头开始匹配,将符合最短的数据删除。
    • 示例:var1=${variable#ov} 将从variable中删除最短的以ov结尾的数据。
    • 示例:var2=${variable##ov} 将从variable中删除最长的以ov结尾的数据。
  • ${变量名%匹配规则}

    • 从变量尾部开始匹配,将符合最短的数据删除。
    • 示例:var5=${variable_2%to*} 将从variable_2中删除最短的以to开头的数据。

2. 从左到右替换变量

  • ${变量名/旧字符串/新字符串}

    • 如果变量内容符合旧字符串,则第一个旧字符串会被新的字符串取代。
    • 示例:var6=${PATH/bin/BIN} 将将PATH中的第一个bin替换为BIN
  • ${变量名//旧字符串/新字符串}

    • 如果变量内容符合旧字符串,则全部旧字符串会被新的字符串取代。
    • 示例:var7=${PATH//bin/BIN} 将将PATH中的所有bin替换为BIN

3. 删除环境变量

在实际应用中,可以使用unset命令删除环境变量:

unset var1unset var2

二、字符串操作

1. 获取字符串长度

  • 方法一:expr length "$string"
    • 示例:var2="I love you ,Do you love me"; len=$(expr length "$var2"); echo $len
    • 结果值为字符串的字符数,注意在包含空格的情况下需要加上引号。
  • 方法二:${#string}
    • 示例:len=${#var1}; echo $len
    • 适用于不包含空格的字符串。

2. 提取子串

通过expr indexexpr match命令,结合substr函数,可以提取字符串的特定子串。

  • 从左到右提取子串

    • expr index "$string" start 返回子串的起始位置。
    • expr match "$string" pattern substr: 从头开始匹配pattern,提示提取特定的子串。
    • 示例:
      var3="Quickstart is a app"; ind=$(expr index "$var3" start); echo $ind

      ind的值为6

  • 从右到左提取子串

    • 使用expr index "$string" -length获取字符串长度。
    • 示例:
      var5="hello boby,come on"; substr_3=$(expr index "$var5" -length 5); echo $substr_3

      结果为me on

3. 替换字符串中的子串

  • 替换第一个匹配项

    • expr replace "$string" from(旧字符串) to(新字符串)
    • 示例:
      var6=${PATH/bin/BIN}

      bin替换为BIN

  • 替换所有匹配项

    • 使用//符号进行替换。
    • 示例:
      var7=${PATH//bin/BIN}

      PATH中的所有bin替换为BIN

三、用户需求脚本设计

假设用户输入一个初始字符串string="Bigdata process framework is Hadoop,Hadoop is an open source project"

脚本提供以下交互功能:

  • 打印字符串长度。
  • 删除所有Hadoop
  • 替换第一个HadoopMapreduce
  • 替换所有HadoopMapreduce
  • 脚本结构如下:

    #!/bin/bashwhile true do  echo "当前字符串认知:$string"  echo "可选提示(输入1-4或q/Q退出):   1. 打印字符串长度  2. 删除所有Hadoop  3. 替换第一个Hadoop为Mapreduce  4. 替换所有Hadoop为Mapreduce  q. 退出循环"  read -p "请输入你的选择:" choice  case $choice in  1|1)    echo "${#string}"    ;;  2|2)    echo "${string//Hadoop/}"    ;;  3|3)    echo "${string/Hadoop/Mapreduce}"    ;;  4|4)    echo "${string//Hadoop/Mapreduce}"    ;;  q|Q)    exit  *)    echo "输入错误,请从选项中选择"    ;;  esacdone

    通过以上脚本,可以实现对字符串的多种操作,满足实际应用需求。

    转载地址:http://sramz.baihongyu.com/

    你可能感兴趣的文章
    Mysql之备份与恢复
    查看>>
    mysql之子查询
    查看>>
    MySQL之字符串函数
    查看>>
    mysql之常见函数
    查看>>
    Mysql之性能优化--索引的使用
    查看>>
    mysql之旅【第一篇】
    查看>>
    Mysql之索引选择及优化
    查看>>
    mysql之联合查询UNION
    查看>>
    mysql之连接查询,多表连接
    查看>>
    mysql乐观锁总结和实践 - 青葱岁月 - ITeye博客
    查看>>
    mysql也能注册到eureka_SpringCloud如何向Eureka中进行注册微服务-百度经验
    查看>>
    mysql乱码
    查看>>
    Mysql事务。开启事务、脏读、不可重复读、幻读、隔离级别
    查看>>
    MySQL事务与锁详解
    查看>>
    MySQL事务原理以及MVCC详解
    查看>>
    MySQL事务及其特性与锁机制
    查看>>
    mysql事务理解
    查看>>
    MySQL事务详解结合MVCC机制的理解
    查看>>
    MySQL事务隔离级别:读未提交、读已提交、可重复读和串行
    查看>>
    MySQL事务隔离级别:读未提交、读已提交、可重复读和串行
    查看>>