Linux中的字符串操作

快捷查看指令 ctrl+f 进行搜索会直接定位到需要的知识点和命令讲解(如有不正确的地方欢迎各位小伙伴在评论区提意见,博主会及时修改)

字符串操作

字符串截取
#		 从开头删除匹配最短 pcabcabc [p*c] -----> abcabc
## 		 从开头删除匹配最长 pab6666666c [p*c] -----> 空
% 		 从结尾删除匹配最短 pcabcapbc [p*c] -----> pcabca
%%		 从结尾匹配删除最长 pcabcapbc [p*c] ----> 空
${变量名/匹配模式/新值} 		用新值替换第一个满足匹配模式的子字符串
${变量名//匹配模式/新值} 	    用新值代替所有满足匹配模式的子字符串
// 指定匹配内容截取
a*c 匹配开头是 a 中间任意个字符 结尾是 c 的字符串  例如:ac abc a123456c
测试数据:
str1=1234568765432112

案例1. ${#变量名}
[root@centos-128 ~]# echo ${#str1}
16

案例2. ${变量名:start}
[root@centos-128 ~]# echo ${str1:5}
68765432112

案例3. ${变量名:start:length}
[root@centos-128 ~]# echo ${str1:3:5}
45687

案例4. # 与 ## 演示
[root@centos-128 ~]# echo ${str1#1*3}
4568765432112
[root@centos-128 ~]# echo ${str1##1*3}
2112

案例5. %%% 演示
[root@centos-128 ~]# echo ${str1%3*2}
12345687654
[root@centos-128 ~]# echo ${str1%%3*2}
12

案例6. /// 演示
[root@centos-128 ~]# echo ${str1/12/a}
a34568765432112
[root@centos-128 ~]# echo ${str1//12/a}
a345687654321a

统计字符串长度
测试数据:
str1=1234568765432112

方法1:	${#变量名}  ---- 效率最高
[root@centos-128 ~]# time echo ${#str1}  #获取指令执行时长
16

real    0m0.000s
user    0m0.000s
sys     0m0.000s

方法2:
[root@centos-128 ~]# time echo ${str1} | wc -L
16

real    0m0.001s
user    0m0.001s
sys     0m0.000s

方法3:
[root@centos-128 ~]# time expr length ${str1}
16

real    0m0.002s
user    0m0.000s
sys     0m0.001s

方法4:
[root@centos-128 ~]# time echo ${str1} | awk '{print length ($0) }'
16

real    0m0.002s
user    0m0.001s
sys     0m0.001s

time指令 , 统计某条指令的执行时长

#shell编程,尽量使用linux内置的命令,内置的操作,内置的函数 效率最高 尽可能减少 管道符的操作#

shell扩展变量
使用变量: a,z(初始值为空)
扩展变量1:	result={param:-word}  #此处result param 均为自定义变量,无特殊含义
如果param变量中保存的值为空,则word 赋值给result; param变量中有值,返回param的值
[root@centos-128 ~]# a=${z:-123456}
[root@centos-128 ~]# echo $a  # a 的值为123456 
123456
[root@centos-128 ~]# echo $z  # z的值为空

扩展变量2:	result={param:=word}
如果param变量中保存的值为空 则 word 赋值给 param 同时 赋值给 result;param变量中有值,返回param的值
[root@centos-128 ~]# a=${z:=123456}
[root@centos-128 ~]# echo $a
123456
[root@centos-128 ~]# echo $z
123456

扩展变量3:	${param:?word}
如果param变量中保存的值为空,将word当做标准错误输出 否则 输出 param的变量值
[root@centos-128 ~]# a=${z:?123456} 
-bash: z: 123456
[root@centos-128 ~]# z=567
[root@centos-128 ~]# a=${z:?123456}
[root@centos-128 ~]# echo $a
567

扩展变量4:	${param:+word}
如果param变量中保存的值为空,什么都不做;如果有值 将 word返回
[root@centos-128 ~]# a=${z:+123456}
[root@centos-128 ~]# echo $a  # a的值为空
[root@centos-128 ~]# echo $z  # z的值为空
[root@centos-128 ~]# z=567
[root@centos-128 ~]# a=${z:+123456}
[root@centos-128 ~]# echo $a
123456
父子shell

:查看父子shell的关系

  1. pstree

  2. ps -ef

-f 展示 UID PID PPID

-e 列处所有进程信息

ps -ef --forest

在这里插入图片描述

假设不开启子shell
# 脚本根据业务需求,需要填充大量的、复杂的、耗时的指令操作
cd ~;ls;pwd;echo "小黑";.........
## 业务要求的复杂shell组合 在执行结束前 父shell在窗口中只能等待

shell的进程列表 : 需要使用 () 将这组指令包括进去 ------- 这种方式就称之为 进程列表

(cd ~;ls;pwd;echo "小黑";.........) --- 这些指令是交给多个 子 shell执行

检测是否在子shell环境中

linux默认的有关shell的变量
	BASH_SUBSHELL
该变量的值的特点
	如果是 0 就处于当前shell环境中执行 否则 就是开辟了子shell去执行
[root@bai ~]# (cd ~;ls;pwd;echo "小黑黑");echo $BASH_SUBSHELL
anaconda-ks.cfg baizhi cronDemo.sh
/root
小黑黑
0
## 一个父shell下开启多个平行的子shell去执行指令执行以后,自行回到父shell

子shell嵌套运行

[root@bai ~]# (pwd;(pwd;(echo $BASH_SUBSHELL)))
/root
/root
3

在这里插入图片描述

利用括号,开启子shell 。在shell脚本的开发中,使用子shell进行多线程的处理,提高程序的并发效率

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

寂冄

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值