Shell中常用的变量处理、字符串操作

时间:2022-07-24
本文章向大家介绍Shell中常用的变量处理、字符串操作,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

变量赋值

[root@linux /]# curl='www.endvv.com'
[root@linux /]# echo $curl
www.endvv.com

获取变量长度

[root@linux /]# echo ${#curl}
13

截取变量

从指定位置开始截取字符串

[root@linux /]# echo ${curl:4}  # :4 表示从curl变量值的第4个字符开始,截取到变量值的末尾
endvv.com

从倒数第4个字符开始截取,截取到字符串的末尾

[root@linux /]# echo ${curl:0-4}
.com

[root@linux /]# echo ${curl: -4}
.com

从指定位置开始截取字符串,并且指定截取字符的长度

从变量的第4个字符开始截取,截取5个字符的长度

[root@linux /]# echo ${curl:4:5}
endvv

0-9:5表示从倒数第9个字符开始,向后截取5个字符

[root@linux /]# echo ${curl:0-9:5}
endvv

0-9:-4表示从倒数第9个字符开始,向后截取所有字符,当同时指定截取长度为":-4"时,表示从倒数第9个字符向后截取所有字符以后,删除截取以后的字符的最后4个字符,也可以理解成截取最后9个字符的前5个字符。

[root@linux /]# echo ${curl:0-9:-4}
endvv

变量删除

从左往右删除

使用 "#*." 即可删除字符串中从左向右数第一个 "." 以及其左侧的全部字符

[root@linux /]# echo ${curl#*.}
endvv.com

把上面的 . 替换成其他字符也可以

[root@linux /]# echo ${curl#*e}   "#*e"表示删除字符串中从左向右第一个遇到的e,以及其左侧的字符
ndvv.com

"##*." 表示删除字符串中从左向右最后一个遇到的 "." ,以及其左侧的字符

[root@linux /]# echo ${curl##*.}
com

从右往左删除

"%/*"表示删除字符串中从右向左第一个遇到的 "/" ,以及其右侧的字符

[root@linux /]# test="/www/server/nginx/sbin/nginx" 
[root@linux /]# echo ${test%/*}
/www/server/nginx/sbin

也可以将上面的"/"替换成别的字符

[root@linux /]# curl="www.endvv.com"
[root@linux /]# echo ${curl%.*}
www.endvv

下面的"%%.*"表示删除字符串中从右向左最后一个遇到的 "." ,以及其右侧的字符

[root@linux /]# echo ${curl%%.*}
www

替换变量中的字符串

将curl变量中的www替换成end,但是上例中的写法,只能替换字符串中第一个遇到的www,如果字符串中包含多个"www",只有第一个"www"会被替换,其他"www"不会被替换

[root@linux /]# curl="www.endvv.com"=
[root@linux /]# echo ${curl/www/end}
end.endvv.com

如果我们想要将字符串中的所有www都替换成end,则可以使用如下语法

[root@linux /]# curl="www.www.www"
[root@linux /]# echo ${curl//www/end}
end.end.end

两种方法针对行首的字符串进行替换和针对行尾的字符串进行替换

[root@linux /]# echo ${curl/#www/end}  #针对行首的字符串进行替换
end.www.www

[root@linux /]# echo ${curl/%www/end}  #针对行尾的字符串进行替换
www.www.end

删除变量中的字符串

删除curl变量中的end字符串

[root@linux /]# curl="www.endvv.www"
[root@linux /]# echo ${curl/end}
www.vv.www

刚才的示例中,我们只删除了字符串中的end,如果我们想要删除字符串中的所有的"." ,则可以使用如下语法

[root@linux /]# curl="www.endvv.www"
[root@linux /]# echo ${curl//.}
wwwendvvwww