shell基础语法
1 变量替换
| 语法 | 说明 |
|---|---|
| ${变量名#匹配规则} | 从变量开头进行匹配,将符合最短的数据删除 |
| ${变量名##匹配规则} | 从变量开头进行匹配,将符合最长的数据删除 |
| ${变量名%匹配规则} | 从变量尾部进行规则匹配,将符合最短的数据删除 |
| ${变量名%%匹配规则} | 从变量尾部进行规则匹配,将符合最长的数据删除 |
| ${变量名/旧字符串/新字符串} | 变量内容符合旧字符串,则第一个旧字符串会被新字符串取代 |
| ${变量名//旧字符串/新字符串} | 变量内容符合旧字符串,则全部的旧字符串会被新字符串取代 |
#代码实践
var1="May you have enough happiness to make you sweet,enough trials to make you strong,enough sorrow to keep you human,enough hope to make you happy? "
var2=${var1#*enough} #表示删除从左侧匹配到的第一个*enough及其左侧的内容,*表示任意多个字符
var3=${var1##*enough} #表示删除从左侧匹配到的最后一个*enough及其左侧的内容,*表示任意多个字符
var4=${var1%enough*} #表示删除从右侧匹配到的第一个*enough及其右侧的内容,*表示任意多个字符
var5=${var1%%enough*} #表示删除从右侧匹配到的最后一个*enough及其右侧的内容,*表示任意多个字符
var6=${var1/enough/ENOUGH} # 变量替换,将从左侧匹配到的第一个enough替换为ENOUGH
var7=${var1//enough/ENOUGH} # 变量替换,将从左侧匹配到的全部enough替换为ENOUGH
echo $var2
====>
happiness to make you sweet,enough trials to make you strong,enough sorrow to keep you human,enough hope to make you happy?
echo $var3
===>
hope to make you happy?
echo $var4
===>
May you have enough happiness to make you sweet,enough trials to make you strong,enough sorrow to keep you human,
echo $var5
===>
May you have
echo $var6
===>
May you have ENOUGH happiness to make you sweet,enough trials to make you strong,enough sorrow to keep you human,enough hope to make you happy?
echo $var7
===>
May you have ENOUGH happiness to make you sweet,ENOUGH trials to make you strong,ENOUGH sorrow to keep you human,ENOUGH hope to make you happy?
字符串处理
1 计算字符串长度
一、 ${
#str}
str="hello"
echo ${
#str}
===>
5
二、 expr length "$str"
str="hello world"
echo `expr length "$str"`
===>
11
2 获取字串中某个字符在字符串中的索引位置
expr index $str $substr # 当字符串中带空格时需要使用引号包裹,否则会报错,使用expr使,索引下标是从1开始的
str="hello world"
echo `expr index "$str" or`
===>
5
echo `expr index "$str" a`
===>
0
echo `expr index "$str" th`
====>
1
3 计算从头匹配上的子串长度
expr match $str substr
str="this is a book"
echo `expr match "$str" book`
===>
0 #没匹配上
echo `expr match "$str" *.is`
====>
0
echo `expr match "$str" this`
===>
4
echo `expr match "$str" this.*`
===>
14
4 抽取字串
1 ${str:position} 从str中的position开始到最后,索引从0开始
str="hadoop java scala mapreduce spark"
echo ${str:10}
===>
a scala mapreduce spark
2 ${str:position:length} 从position开始,截取长度为length,索引从0开始
str="hadoop java scala mapreduce spark"
echo ${str:7:4}
===>
java
3 ${str: -position} 从右边开始的position位置开始截取,索引从0开始,字符串和position之间需要有一个空格,右边第一个字符的索引是-1
str="hadoop java scala mapreduce spark"
echo ${str: -5}
===>
spark
4 ${str:(position)} 从右边开始的position位置开始截取,索引从0开始,该方法与3同样的效果
str="hadoop java scala mapreduce spark"
echo ${str:(-5)}
===>
spark
5 expr substr $str position length 从position开始,匹配长度为length,使用expr,字符串索引从1开始
str="hadoop java scala mapreduce spark"
echo `expr substr "$str" 13 5`
===>
scala
5 需求描述
变量str="Bigdata process framework is Hadoop.Hadoop is an open source project"
执行脚本后,打印输出str字符串变量,并给出用户以下选项:
1 打印str长度
2 删除字符串中所有的Hadoop
3 替换第一个Hadoop为Mapreduce
4 替换全部Hadoop为Mapreduce
用户输入数字1,2,3,4,可以执行对应项的功能,输入q|Q则退出交互模式
代码实践
脚本名 str_test.sh
#! /bin/bash
str="Bigdata process framework is Hadoop.Hadoop is an open source project"
echo "原字符串为 ${str}"
case $1 in
1)
echo "${
#str}";;
2)
str=${str//Hadoop/};;
3)
str=${str/Hadoop/Mapreduce};;
4)
str=${str//Hadoop/Mapreduce};;
q)
exit 0;;
Q)
exit 0;;
esac
echo "处理后的字符串为: ${str}"
str_test.sh 1
===>
原字符串为 Bigdata process framework is Hadoop.Hadoop is an open source project
68
处理后的字符串为: Bigdata process framework is Hadoop.Hadoop is an open source project
str_test.sh 2
Shell脚本基础与高级应用解析

最低0.47元/天 解锁文章
495

被折叠的 条评论
为什么被折叠?



