shell处理字符串
概念
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。
单引号声明字符串
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字符串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
双引号声明字符串
- 双引号里可以有变量
- 双引号里可以出现转义字符
示例:
#单引号和双引号使用变量的区别
root@master:~$ name='huangSir'
root@master:~$ echo '$name'
$name
root@master:~$ echo "$name"
huangSir
#单引号中嵌套单引号
root@master:~$ echo ''hello world''
hello world
#双引号中嵌套单引号
root@master:~$ echo "'hello world'"
'hello world'
#单引号和双引号使用转义字符的区别
root@master:~$ echo '\"hello world\"'
\"hello world\"
root@master:~$ echo "\"hello world\""
"hello world"
字符串的各种操作
在 Shell 脚本中,字符串是常见的数据类型,可以通过多种方式对字符串进行处理,包括拼接、截取、替换、比较等操作。
字符串拼接
字符串拼接可以直接拼接,中间无需任何特殊字符
root@master:~$ str1="hello"
root@master:~$ str2="world"
root@master:~$ str3="$str1 $str2"
root@master:~$ echo $str3
hello world
root@master:~$ str3="${str1} like ${str2}"
root@master:~$ echo $str3
hello like world
获取字符串长度 ${#str}
统计字符长度(变量中有多少个字符)
#空格也算字符
root@master:~$ str="I Like Shell"
root@master:~$ echo ${#str}
12
截取字符串 ${str:index:index}
root@master:~$ str="hello world"
# 从索引下标为5开始,向后截取,索引下标为5的舍弃
root@master:~$ echo ${str:5}
world
# 从索引下标为2开始,向后截取5个字符
root@master:~$ echo ${str:2:5}
llo w
# 从索引下标为2开始,截取到倒数第6个字符
root@master:~$ echo ${str:2:-6}
llo
从索引下标为2开始,截取到倒数第7个字符
root@master:~$ echo ${str:2:-7}
ll
字符串替换
${str/newStr/oldStr}
将newStr替换为oldStr,仅替换第一个遇到的oldStr
root@master:~$ str="hello world"
root@master:~$ echo ${str/l/o}
heolo world
${str//newStr/oldStr}
将newStr替换为oldStr,替换所有的oldStr
root@master:~$ str="hello world"
root@master:~$ echo ${str//l/o}
heooo worod
字符串大小写转换
需要bash4+的版本
大写转换:${str^^}
root@master:~$ str="hello world"
root@master:~$ echo ${str^^}
HELLO WORLD
小写转换:${str,,}
root@master:~$ str="HELLO WORLD"
root@master:~$ echo ${str,,}
hello world
字符串分割为数组
root@master:~$ str="apple:banana:orange"
#按照:分割
root@master:~$ IFS=':' read -ra arr <<< "$str"
root@master:~$ echo ${arr[0]}
apple
root@master:~$ echo ${arr[1]}
banana
删除前缀或后缀
${str#word}:从变量左边开始删除,按照最短匹配删除${str##word}:从变量左边开始删除,按照最长匹配删除${str%word}:从变量右边开始删除,按照最短匹配删除${str%%word}:从变量右边开始删除,按照最长匹配删除
示例:
root@master:~$ str="file.txt.tar.gz"
root@master:~$ echo ${str#*.}
txt.tar.gz
root@master:~$ echo ${str##*.}
gz
root@master:~$ echo ${str%.*}
file.txt.tar
root@master:~$ echo ${str%%.*}
file
判断是否包含子串
if [[ $str == *World* ]]; then
echo "包含World"
fi
# 或使用正则表达式
if [[ $str =~ .*World.* ]]; then
echo "匹配成功"
fi
判断字符串是否为空
[[ -z "$str" ]]:为空返回真
[[ -n "$str" ]]:非空返回真
root@master:~$ name=
root@master:~$ [[ -z "$name" ]] && echo true || echo false
true
root@master:~$ [[ -n "$name" ]] && echo true || echo false
false
判断两个字符串是否相等
[[ $str1 == $str2 ]]:相等判断
[[ $str1 != $str2 ]]: 不等判断
root@master:~$ [[ "hello" == "hello" ]] && echo true || echo false
true
root@master:~$ [[ "hello" != "hello" ]] && echo true || echo false
false
shell处理字符串的更多相关文章
- Linux Shell 截取字符串
Linux Shell 截取字符串 shell中截取字符串的方法很多 ${var#*/} ${var##*/} ${var%/*} ${var%%/*} ${var:start:len} ${var: ...
- shell截取字符串的方法
参考文献: linux中shell截取字符串方法总结 [Linux]如何在Shell脚本中计算字符串长度? 截取字符串的方法一共有八种,主要为以下方法 shell中截取字符串的方法有很多中, ${ex ...
- shell 判断字符串是否为数字
本篇文章主要介绍了"shell 判断字符串是否为数字",主要涉及到shell 判断字符串是否为数字方面的内容,对于shell 判断字符串是否为数字感兴趣的同学可以参考一下. #!/ ...
- shell基础——字符串处理(转载)
Shell的字符串处理 1 得到长度 %x="abcd" #方法一 %expr length $x 4 # 方法二 %echo ${#x} ...
- shell 分割字符串存至数组
shell 分割字符串存至数组 shell编程中,经常需要将由特定分割符分割的字符串分割成数组,多数情况下我们首先会想到使用awk但是实际上用shell自带的分割数组功能会更方便.假如a=”one,t ...
- Linux shell去除字符串中所有空格
Linux shell去除字符串中所有空格 echo $VAR | sed 's/ //g'
- shell切分字符串到数组
shell切分字符串到数组 问题: 对于’aa,bb,cc,dd,ee’这样的字符串输出采用,分隔开的aa bb cc dd ee aa:bb is ok:/home/work按照":&qu ...
- 用Shell判断字符串包含关系的方法小结
这篇文章主要给大家介绍了关于用Shell判断字符串包含关系的几种方法,其中包括利用grep查找.利用字符串运算符.利用通配符.利用case in 语句以及利用替换等方法,每个方法都给出了详细的示例代 ...
- Linux shell 获得字符串所在行数及位置
shell 获得字符串所在行数及位置 01 获取字符串所在的行数 方式一:用grep -n [root@root]# cat test apple bit create delect exe flow ...
- 【shell比较字符串】
if [ 'AAA' = 'ABC' ]; then echo "the same" else echo "not the same" fi shell比较字符 ...
随机推荐
- Hadoop 概述(二)
shell定时上传linux日志信息到hdfs 从标题可以分析出来,我们要使用到shell,还要推送日志信息到hdfs上. 定义出上传的路径和临时路径,并配置好上传的log日志信息.这里我使用了上一节 ...
- C#数据结构与算法入门实战指南
前言 在编程领域,数据结构与算法是构建高效.可靠和可扩展软件系统的基石.它们对于提升程序性能.优化资源利用以及解决复杂问题具有至关重要的作用.今天大姚分享一些非常不错的C#数据结构与算法实战教程,希望 ...
- Linux配置Golang 依赖包安装
Linux Golang安装 安装版本查看,可自行选择 https://studygolang.com/articles/13957?fr=sidebar 此次选择 go1.14.2.linux-am ...
- Collection的子接口之一:List 接口
List 接口概述: 鉴于Java中数组用来存储数据的局限性,我们通常使用List替代数组 List集合类中 元素有序.且可重复,集合中的每个元素都有其对应的顺序索引. List容器中的元素都对 ...
- android studio编译flutter项目
1创建flutter项目:如下图 2选择 flutter application 3 出现flutter SDK没有发现:但是自己又是安装了的 如果,忘记自己flutter安装在哪里的同学. 可以先找 ...
- OSI七层经典模型架构以及网络的基本概念
在大.中型网络中,通常通过模块化方式将网络功能结构进行分解.但是在各个模块内部,还是存在结构的扩展和弹性问题. 譬如一个园区网络需要接入大量用户等,这个问题一般通过网络的层次化来解决. 传统的网络采用 ...
- 国际认可!天翼云合规领域影响力up!
近日,天翼云科技有限公司成功通过ISO 37301合规管理体系双认证(GB/T 35770-2022/ISO 37301:2021 & CTS GHMS001-2024),标志着公司合规管理和 ...
- Python pika消费Rabbit MQ数据,慢消费引起的connection reset问题
问题描述 使用python pika框架,从Rabbit MQ消费数据时,遇到了connection reset的错误,错误内容如下: Traceback (most recent call last ...
- Nessus 扫描Web服务
Nessus 扫描Web服务 1.点击 New Scan,选择 Web Application Tests 2.填写扫描名称和扫描目标 3.点击 Discovery ,选择 Scan Type 为全端 ...
- 并发编程 - 线程同步(九)之信号量Semaphore
前面对自旋锁SpinLock进行了详细学习,今天我们将学习另一个种同步机制--信号量Semaphore. 01.信号量是什么? 在 C# 中,信号量(Semaphore)是一种用于线程同步的机制,能够 ...