我的shell编程进阶(一)-变量
发布日期:2021-05-18 09:32:18 浏览次数:12 分类:精选文章

本文共 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

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

    上一篇:我的shell脚本(二)-命令替换
    下一篇:windows 安装系统快速启动键大全

    发表评论

    最新留言

    留言是一种美德,欢迎回访!
    [***.207.175.100]2025年04月23日 06时26分41秒