shell脚本中字符串常用操作整理

shell中常用字符串操作整理

shell脚本中常用字符串操作如下:
1. 字符串的比较
2. 字符串的长度
3. 截取字符串
4. 字符串的替换

下面分别讲解这些操作的用法。

1. 字符串的比较

1.1. 等于和不等于

user=zabbix
# 这是最常用的
if [ "$user" == "zabbix" ]
# 也可以这样
if [[ "$user" == "zabbix" ]]

我们把这种一个一个字符比较过去的方式叫做字符匹配,那有的就说了,如果我只想判断字符串是否符合我的一些条件,像是以什么结尾、以什么开头或包含哪些字符,就可以用下面的方法实现:

path=/home/zabbix/etc
# 以"/"开头,判断是不是绝对路径
if [[ "$path" == /* ]]
# 是否包含字符(串)
if [[ "$path" == *za* ]]
# 是否以字符(串)结尾
if [[ "$path" == *tc ]]

我们把上面的方式称为模式匹配
等于(==)和(!=)用法相同,不再单独介绍;为了增加程序的可读性,我一般会把”=”当作赋值用,==在比较的时候用,两个在比较的时候没啥差别。

1.2. 判断字符串是否为空
方法如下:

user=zabbix
# 最简单的,判断是否非空,和C的用法类似
if [ "$user" ]
# 判断是否为空
if [ ! "$user" ]
# 用-z也可以判断是否为空
if [ -z "$user" ]
# 用-n判断是否不为空
if [ -n "$user" ]
#也可以用最笨的方法,1.1节中讲的
if [[ "$user" == "" ]]

细心的读者已经看到,上面所有关于字符串的操作都用”“引起来了,没有“裸奔”,这样做是为了规范和安全,我给大家举一个裸奔不安全的反例。

string="a == b"
if [ $string ]
then
    echo "string is not null"
else
    echo "string is null"
fi

2. 字符串的长度

我只说最常用的一种:${#string},举例如下:

string1=hello
length_of_string1=${#string}
echo "$length_of_string1" # 结果是5

3. 截取字符串

3.1. 提取子串

格式作用
${string:position}在string中从位置position开始提取子串
${string:position:length}从位置position提取length长度的子串

示例如下:

string2=helloworld
echo "${string2:0}"    # helloworld
echo "${string:5}"     # world
echo "${string2:5:2}"  # wo
echo "${string2: -3}"  # rld 

position为负数的时候表示从字符串的末尾提取长度为n的子串;如果将length作为前面获取子串的再一次操作,那么length为正就截取前lenth个字符,如果length为负数,就去掉后面的length个字符。
示例如下:

string3=helloworld
echo "${string3:5}"             # world
echo "${string3:5:2}"           # wo 截取world的前两个字符
echo "${string3:5:-2}"          # wor 删除world的后两个字符

3.2. 删除子串

格式作用
${string#substring}删除掉左边最小匹配的子串
${string##substring}删除掉左边最大匹配的子串
${string%substring}删除掉右边最小匹配的子串
${string%%substring}删除掉右边最大匹配的子串

示例如下:

string4=abcABC123ABCabc
echo "${string4#a*C}"       # 123ABCabc
echo "${string4##a*C}"      # abc
echo "${string4%b*c}"       # abcABC123ABCa
echo "${string4%%b*c}"      # a

4. 子串替换

格式作用
${string/substring/replacement}使用replacement替换第一个匹配的子串
${string//substring/replacement}使用replacement替换全部匹配的子串

示例如下:

string5=abcABC123ABCabc
echo "${string5/abc/xyz}"     # xyzABC123ABCabc
echo "${string5//abc/xyz}"     # xyzABC123ABCxyz
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值