- 变量子串
- ${#parameter}
#基础用法
[root@manager ~]# oldboy=oldbing
[root@manager ~]# echo ${oldboy}
oldbing
[root@manager ~]# echo ${#oldboy}
7
#企业面试题 ##4.3-1面试题: I am oldboy linux,welcome to our training. 显示这串字符中 单词字符数大于6的单词
##分析:
###1.通过for循环 取出每个单词
###2.判断 字符数 > 6 ?
###1)大于6显示
###2)不大于 继续 读取下1个单词
[root@manager ~]# vim /server/scripts/2.5-3-word.sh
#!/bin/bash
#author oldboy
str="I am oldboy linux,welcome to our training. "
for n in $str
do
if [ ${#n} -gt 6 ] #great than
then
echo ${#n} $n
fi
done
[root@manager ~]# vim /server/scripts/2.5-3-word.sh
#!/bin/bash
#author oldboy
str="I am oldboy linux,welcome to our training. "
for n in $str
do
if [ ${#n} -gt 6 ] #great than
then
echo ${#n} $n
fi
done
[root@manager ~]# echo I am oldboy linux,welcome to our training. I am oldboy linux,welcome to our training.
[root@manager ~]#
[root@manager ~]# echo I am oldboy linux,welcome to our training.|
> awk -vRS="[ ,.]" 'length()>6'
> welcome
> training
2)变量截取
[root@manager ~]# oldboy=oldboyedu.com
[root@manager ~]# #echo ${oldboy:起始点:一共取多少个字符} [root@manager ~]#
[root@manager ~]# echo ${oldboy:4:3}
oye
#截取功能字符是从0开始
[root@manager ~]# echo ${oldboy:3:3}
boy
[root@manager ~]# echo ${oldboy:3}
boyedu.com
3)删除
#简单使用
[root@manager ~]# test='I am oldboy teacher'
[root@manager ~]# echo ${test#I}
am oldboy teacher
[root@manager ~]# echo ${test#o}
I am oldboy teacher
[root@manager ~]# echo ${test#I am o}
ldboy teacher
[root@manager ~]# echo ${test#*o}
ldboy teacher
[root@manager ~]# echo ${test##*o}
y teacher
[root@manager ~]# test='I am oldboy teacher'
[root@manager ~]#
[root@manager ~]#
[root@manager ~]# echo ${test%r}
I am oldboy teache
[root@manager ~]# echo ${test%er}
I am oldboy teach
[root@manager ~]# echo ${test%o*}
I am oldb
[root@manager ~]# echo ${test%%o*}
I am
#应用
##简单 sed 比较麻烦 使用 变量子串里面删除功能
[root@manager ~]# net='/etc/sysconfig/networkscripts/ifcfg-eth0' [root@manager ~]#
[root@manager ~]# echo ${net##*/}
ifcfg-eth0
[root@manager ~]# echo ${net%%/*}
[root@manager ~]# echo ${net%/*}
/etc/sysconfig/network-scripts
[root@manager ~]#
[root@manager ~]# dirname /etc/sysconfig/networkscripts/ifcfg-eth0
/etc/sysconfig/network-scripts
[root@manager ~]# basename /etc/sysconfig/networkscripts/ifcfg-eth0
ifcfg-eth0
#使用linux命令 效率 比 变量子串 低
root@manager ~]# time for n in {1..10000} ;do echo ${#n} &>/dev/null ; done
real 0m0.154s
user 0m0.097s
sys 0m0.056s
[root@manager ~]# time for n in {1..10000} ;do echo ${n}|wc -L &>/dev/null ; done
real 0m20.
292s user 0m8.
485s sys 0m11.692s
- 小结:
- 变量子串删除部分 主要用来在脚本中删除路径 里面的名字 或路径部分
4) 替换
[root@manager ~]# export LANG=C
[root@manager ~]#
[root@manager ~]# test='I am oldboy teacher'
[root@manager ~]# echo ${test/[a-z]/oldboy}
I oldboym oldboy teacher
[root@manager ~]# echo ${test//[a-z]/oldboy}
I oldboyoldboy oldboyoldboyoldboyoldboyoldboyoldboy oldboyoldboyoldboyoldboyoldboyoldboyoldboy
[root@manager ~]#
[root@manager ~]# test='I am oldboy teacher'
[root@manager ~]# echo ${test//oldboy/}
I am teacher
[root@manager ~]# echo ${test/oldboy/} #把oldboy替换为空 即删除
I am teacher
5) 变量子串小结