shell脚本编程实战

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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值