IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 二、shell脚本语言字符串处理 -> 正文阅读

[系统运维]二、shell脚本语言字符串处理

前一篇:一、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脚本语言的开发过程中会常使用字符串的处理的,希望可以帮助到大家,能帮助到大家记得点赞!!!

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章           查看所有文章
加:2022-05-11 16:45:38  更:2022-05-11 16:48:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 15:53:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码