二、shell脚本语言字符串处理

本文详细介绍了Shell脚本中的字符串处理功能,包括获取字符串长度、字符串切片、替换处理、截取以及变量状态赋值。通过实例展示了如何进行字符串操作,并讲解了颜色打印在脚本开发中的应用。这些技巧在日常运维工作中非常实用。
摘要由CSDN通过智能技术生成

前一篇:一、shell脚本语言基础

目录

背景:

一、字符串功能讲解

1、获取字符串的长度

2、字符串切片

3、字符串替换处理 

4、字符串截取

5、变量状态赋值 

6、字符串颜色


背景:

之前shell脚本语言文章中讲解了${}变量的引用,本文介绍的${}的另一个重要的功能,就是文本处理,单行文本基本上 可以满足日常运维工作的基本需求。

一、字符串功能讲解

1、获取字符串的长度

实例:

[root@node mnt]# cat test.sh 
#!/bin/bash
VAR='hello world!' 
echo $VAR 
echo ${#VAR}

执行效果:

[root@node mnt]# sh test.sh 
hello world!
12

这里大家可能有一个疑问了,这里加上标点符号也是11占位符,但是这里需要加入空格也是一个字符位的,所以这里是12位字符串长度。

2、字符串切片

字符串切片,简单的理解就从一个段字符串中安装一定的规则截取到我们想要的内容,有可能是前多少位的,也可以后多少位,或者是多少位到多少位的内容等等。

字符串切片的格式和基础的切片的格式是类似的,如下:

格式:

${parameter:offset}

${parameter:offset:length}

截取从 offset 个字符开始,向后 length 个字符,这里的offset和length都是数字的形式存在的,默认是从0开始的。

实例:

[root@node mnt]# cat test.sh 
#!/bin/bash
VAR='hello world!'
echo "源参数值VAR=hello world!" 
echo ${VAR}
echo "截取 hello 字符串"
echo ${VAR:0:5}
echo "截取 wo 字符"
echo ${VAR:6:2}
echo "截取 world!字符串"
echo ${VAR:5}
echo "截取最后一个字符"
echo ${VAR:(-1)}
echo "截取最后二个字符"
echo ${VAR:(-2)} 
echo "截取从倒数第 3 个字符后的 2 个字符"
echo ${VAR:(-3):2}

 执行效果:

[root@node mnt]# sh test.sh 
源参数值VAR=hello world!
hello world!
截取 hello 字符串
hello
截取 wo 字符
wo
截取 world!字符串
world!
截取最后一个字符
!
截取最后二个字符
d!
截取从倒数第 3 个字符后的 2 个字符
ld

这里可以发现一个规律就是正向的取值是按照0 1 2 3这样的格式的,反向取值,就是-1 -2 -3的格式形式的,这个取值最好是按照正向取值的好点,但是有些情况是反向取值好点的,就是在对变量进行取值的时候,无法判断变量的字符串的长度的时候反向取值是最好的。

这里有一个点需要注意一下,就是格式一直都是安装 offset:length,如果没有就是默认到了最大的长度值的。

3、字符串替换处理 

 格式:${parameter/pattern/string}

实例:

[root@node mnt]# cat test.sh 
#!/bin/bash
VAR='hello world world!'
echo "将第一个 world 字符串替换为 WORLD"
echo ${VAR/world/WORLD}
echo "将全部 world 字符串替换为 WORLD"
echo ${VAR//world/WORLD}
echo "替换正则匹配为空"
VAR=123abc
echo "将不是数字的字符串去空"
echo ${VAR//[^0-9]/}
echo "将是数字的字符串去空"
echo ${VAR//[0-9]/}

执行效果:

[root@node mnt]# sh test.sh 
将第一个 world 字符串替换为 WORLD
hello WORLD world!
将全部 world 字符串替换为 WORLD
hello WORLD WORLD!
替换正则匹配为空
将不是数字的字符串去空
123
将是数字的字符串去空
abc

 注意:patterm 前面开头一个正斜杠为只匹配第一个字符串,两个正斜杠为匹配所有字符,^在这里的表示非数字的字符匹配。

4、字符串截取

格式:

${parameter#word}   # 删除匹配前缀

${parameter##word}  

${parameter%word}   # 删除匹配后缀

${parameter%%word}

# 去掉左边,最短匹配模式,##最长匹配模式。

% 去掉右边,最短匹配模式,%%最长匹配模式。  

 实例:

[root@node mnt]# cat test.sh 
#!/bin/bash
URL="http://www.baidu.com/baike/user.html.htpp://www.xinlang.com/junshi/index.html" 
echo $URL
echo "1.以//为分隔符截取右边字符串"
echo ${URL#*//}

echo "2.以//为分隔符截取右边字符串"
echo ${URL##*//}

echo "3.以/为分隔符截取右边字符串"
echo ${URL##*/}

echo "4.以/为分隔符截取右边字符串"
echo ${URL#*/}

echo "5.以//为分隔符截取左边字符串"
echo ${URL%%//*}

echo "6.以//为分隔符截取左边字符串"
echo ${URL%//*}

echo "7.以/为分隔符截取左边字符串"
echo ${URL%/*}

echo "8.以/为分隔符截取左边字符串"
echo ${URL%%/*}

echo "9.以.为分隔符截取左边"
echo ${URL%.*}

echo "10.以.为分隔符截取左边"
echo ${URL%%.*}

echo "11.以.为分隔符截取右边"
echo ${URL#*.}

echo "12.以.为分隔符截取右边"
echo ${URL##*.}

执行效果:

[root@node mnt]# sh test.sh 
http://www.baidu.com/baike/user.html.htpp://www.xinlang.com/junshi/index.html
1.以//为分隔符截取右边字符串
www.baidu.com/baike/user.html.htpp://www.xinlang.com/junshi/index.html
2.以//为分隔符截取右边字符串
www.xinlang.com/junshi/index.html
3.以/为分隔符截取右边字符串
index.html
4.以/为分隔符截取右边字符串
/www.baidu.com/baike/user.html.htpp://www.xinlang.com/junshi/index.html
5.以//为分隔符截取左边字符串
http:
6.以//为分隔符截取左边字符串
http://www.baidu.com/baike/user.html.htpp:
7.以/为分隔符截取左边字符串
http://www.baidu.com/baike/user.html.htpp://www.xinlang.com/junshi
8.以/为分隔符截取左边字符串
http:
9.以.为分隔符截取左边
http://www.baidu.com/baike/user.html.htpp://www.xinlang.com/junshi/index
10.以.为分隔符截取左边
http://www
11.以.为分隔符截取右边
baidu.com/baike/user.html.htpp://www.xinlang.com/junshi/index.html
12.以.为分隔符截取右边
html

  注:

# 去掉左边,取右边的值的内容,取值的顺序是从左往右去匹配的,

#最短匹配模式,简单的理解就是第一个匹配的值,开始截取的;

##最长匹配模式,简单的理解就是最后一个匹配的值,开始截取的。

% 去掉右边,截取左边的内容,取值的顺序是从右往左去匹配,

%最短匹配模式,简单的理解就是第一个匹配的值,开始截取,

%%最长匹配模式。,简单的理解就是最后一个匹配的值,开始截取。

5、变量状态赋值 

 ${VAR:-string}  如果 VAR 变量为空则返回 string

${VAR:+string}  如果 VAR 变量不为空则返回 string

${VAR:=string}  如果 VAR 变量为空则重新赋值 VAR 变量值为 string

${VAR:?string}  如果 VAR 变量为空则将 string 输出到 stderr 

实例:

[root@node mnt]$ cat test.sh 
#!/bin/bash
echo "如果变量为空就返回 hello world!" 
VAR_a=
echo ${VAR_a:-'hello world!'}

echo "如果变量不为空就返回 hello world!"
VAR_b="hello"
echo ${VAR_b:+'hello world!'}

echo "如果变量为空就重新赋值" 
VAR_c=
echo ${VAR_c:=hello}
echo $VAR_c

echo "如果变量为空就将信息输出 stderr" 
VAR_d=
echo ${VAR_d:?value is null}

 执行效果:

[root@node mnt]$ sh test.sh 
如果变量为空就返回 hello world!
hello world!
如果变量不为空就返回 hello world!
hello world!
如果变量为空就重新赋值
hello
hello
如果变量为空就将信息输出 stderr
test.sh: line 17: VAR_d: value is null

注:最后的输入stderr,是执行输出报错信息 

6、字符串颜色

在日常的shell脚本开发的过程有一个场景就是讲报错的信息按照颜色进行打印显示的,如下就是讲解怎么打印字符串的颜色。

字体颜色字体背景颜色显示方式
颜色数字表示颜色颜色数字表示颜色
30黑色40黑色0:终端默认设置 
1:高亮显示 
4:下划线 
5:闪烁 
7:反白显示 
8:隐藏 
31红色41深红
32绿色42绿色
33黄色43黄色
34蓝色44蓝色
35紫色45紫色
36深绿46深绿
37白色47白色
格式: 
\033[1;31;40m  # 1 是显示方式,可选。31 是字体颜色。40m 是字体背景颜色。 
\033[0m        # 恢复终端默认颜色,即取消颜色设置

实例:

[root@node mnt]# cat test.sh 
#!/bin/bash
echo "打印字体颜色"
for i in {31..37}
do
    echo -e "\033[$i;40mHello world!\033[0m"
done
echo "打印背景颜色" 
for i in {41..47}
do
    echo -e "\033[47;${i}mHello world!\033[0m"
done
echo "显示方式" 
for i in {1..8}
do
    echo -e "\033[$i;31;40mHello world!\033[0m"
done

执行效果:

 

注:这里就是字符串的颜色打印 ,


总结:以上就是shell的字符串相关的讲解了,在shell脚本语言的开发过程中会常使用字符串的处理的,希望可以帮助到大家,能帮助到大家记得点赞!!!

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jiang0615csdn

你对鼓励是我最大的动力来源

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值