子串案例
shell截取字符串通常由两种方式:从指定位置开始截取和从指定字符开始截取
-
从指定位置开始截取:这种方式需要两个参数,除了指定的起始位置,还需要截取长度,才能确定要截取的字符串。既然需要指定其实位置,到底是从字符串的左边开始计数,还是从字符串右边开始计数,答案是shell同时支持两种计数方式
-
从字符串的左边开始计数;格式如下
$(string:start:length)
~~~bash [root@localhost ~]# name="Mrxu160abcbbcacd" [root@localhost ~]# echo ${name} Mrxu160abcbbcacd [root@localhost ~]# echo${#name} bash: echo16: 未找到命令... [root@localhost ~]# echo ${#name} 16 [root@localhost ~]# echo ${name:6』 > ^C [root@localhost ~]# echo ${name:6} 0abcbbcacd [root@localhost ~]# echo ${name:6:3} 0ab
其中,string是要截取的字符串,start是起始位置(从左边开始,从0开始计数),length是要取的长度(省略的话表示直到字符串的末尾)
- 方法2
-
案例2 计算变量长度的各种玩法
-
多种统计长度的命令
###方法1 用wc命令 [root@localhost ~]# echo $name Mrxu160abcbbcacd [root@localhost ~]# echo ${#name} 16 [root@localhost ~]# echo ${name} |wc -l ### -l 输出行数 1 [root@localhost ~]# echo ${name} |wc -L #### -L统计最长的那一行并统计其长度 16 [root@localhost ~]# ##方法2 用expr 的length函数统计 [root@localhost ~]# expr length ${name} 16 [root@localhost ~]# ###方法3 用awk的统计长度,length函数 [root@localhost ~]# echo "${name}" |awk '{print length($0)}' 16 [root@localhost ~]# ###方法4 ,内置命令最快 [root@localhost ~]# echo ${#name} 16 [root@localhost ~]#
-
统计命令执行时长
字符串长度的统计方法这么多,谁最快?
time 命令 ,统计命令执行时长
for 变量 in 序列 1~100
do
执行的程序
done
写在一行的形式
#写在一行的形式要用分号隔开 [root@localhost tmp]# for i in {1..10} ; do echo $i; done 1 2 3 4 5 6 7 8 9 10 [root@localhost tmp]#
生成序列 命令seq
[root@localhost tmp]# seq 3 #默认换行分隔符 1 2 3 [root@localhost tmp]# seq -s ";" 3 #-s 指定分隔符 1;2;3 [root@localhost tmp]#
#简单方法1 [root@localhost tmp]# for num in {1..3} ; do var=`seq -s ":" $num`; echo $var ;done 1 1:2 1:2:3 [root@localhost tmp]#
###案例1;通过置命令来统计长度结算时长 ### &>/dev/null 将输出信息置入黑洞文件 [root@localhost tmp]# time for num in {1..100} ; do var=`seq -s Mrxu 100`; echo ${#var} &>/dev/null;done real 0m0.118s ###表示实际运行的时间 user 0m0.042s ###用户态执行的时间 sys 0m0.045s ###内核态态执行的时间 [root@localhost tmp]# ###案例2;通过wc命令统计;因为用到管道符,效率肯定慢了 [root@localhost tmp]# time for num in {1..100} ; do var=`seq -s Mrxu 100`; echo ${var}|wc -L &>/dev/null;done real 0m0.291s user 0m0.122s sys 0m0.135s [root@localhost tmp]# ###案例3通过expr命令的length函数统计 [root@localhost tmp]# time for num in {1..100} ; do var=`seq -s Mrxu 100`; expr length ${var} &>/dev/null;done real 0m0.212s user 0m0.092s sys 0m0.087s [root@localhost tmp]# ###案例4 awk命令处理统计长度 [root@localhost tmp]# time for num in {1..100} ; do var=`seq -s Mrxu 100`;echo ${var}|awk '{print length($0)}' &>/dev/null;done real 0m0.297s user 0m0.124s sys 0m0.136s [root@localhost tmp]#
shell编程,尽量使用Linux内置的命令,内置的操作,和内置函数,因为这些是C语言开发,效率最高;尽可能的减少管道符的操作。