
我的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 index
和expr 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
。Hadoop
为Mapreduce
。Hadoop
为Mapreduce
。脚本结构如下:
#!/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
通过以上脚本,可以实现对字符串的多种操作,满足实际应用需求。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月23日 06时26分41秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
简易计算器案例
2019-03-07
在Vue中使用样式——使用内联样式
2019-03-07
Explore Optimization
2019-03-07
解决数据库报ORA-02289:序列不存在错误
2019-03-07
map[]和map.at()取值之间的区别
2019-03-08
【SQLI-Lab】靶场搭建
2019-03-08
【Bootstrap5】精细学习记录
2019-03-08
Struts2-从值栈获取list集合数据(三种方式)
2019-03-08
参考图像
2019-03-09
设计模式(18)——中介者模式
2019-03-09
推荐几篇近期必看的视觉综述,含GAN、Transformer、人脸超分辨、遥感等
2019-03-09
【专题3:电子工程师 之 上位机】 之 【46.QT音频接口】
2019-03-09
一文理解设计模式--命令模式(Command)
2019-03-09
VTK:可视化之RandomProbe
2019-03-09
block多队列分析 - 2. block多队列的初始化
2019-03-09
Java时间
2019-03-09