shell进阶—bash变量扩展

shell变量扩展

字符串搜索与替换

替换参数值匹配指定模式的子字符串
/ 表示只替换一个
// 替换所有
没有指定替换的字符,代表删除

[root@xieqc test]# mystring="this is  used  for  replacong  string  or  removing  string"
[root@xieqc test]# echo ${mystring/string/characyers}
this is used for replacong characyers or removing string
//从左往右只替换第一个
[root@xieqc test]# echo ${mystring//string/characyers}
this is used for replacong characyers or removing characyers
//重点看变量扩展中的变化,多了一个/  表示全部替换
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
[root@xieqc test]# echo ${mystring/string/}
this is used for replacong or removing string
[root@xieqc test]# echo ${mystring//string/}
this is used for replacong or removing
//看这里,不指定被替换的字符,代表删除!
  • 1
  • 2
  • 3
  • 4
  • 5

*求字符串长度
直接上代码

#var=1234567abcd
#echo   ${#var}
11
//字符串的长度就被求出来了!
//注意:赋值变量时,一个空格占一个字符的量,当然,敲两个空格,就多了两个字符数量
  • 1
  • 2
  • 3
  • 4
  • 5

*子字符串截取
命令格式:
${变量名:截取字符串从第几位开始:截取字符串的长度}
上代码

[root@xieqc test]# var=123456789
[root@xieqc test]# echo  ${var:4:2}
56
//注意,位数是从第0位开始数,并且一个空格算一位!
  • 1
  • 2
  • 3
  • 4

*如果不指定截取的长度,会发生什么?
上代码:

[root@xieqc test]# echo  ${var:4}
56789
//从第四位开始,全部截取
  • 1
  • 2
  • 3

使用默认值
这种扩展方式 ,如果你没定义参数,或者为空,使用手动定义的默认值
使用格式:
${变量名:-默认值} //变量为空或者变量未定义,使用默认值 ${变量名-默认值} //只有变量未定义时,使用默认值 //注意:为空和未定义是两个概念。 #var=“” //这叫为空 #unset var //这叫未定义(变量名根本不存在的一种情况)
举个栗子:

[root@xieqc test]# unset  var 
//unset  命令将一个变量名删除,相当于未定义
[root@xieqc test]# echo $var

[root@xieqc test]# echo ${var:-1234}
1234
[root@xieqc test]# var=abc
[root@xieqc test]# echo ${var:-1234}
abc

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

*指定默认值
先来看命令格式
${变量名:=默认值} ${变量名=默认值} //与使用默认值类似,区别在于,会直接把默认值赋给变量
啥也不说了,上代码:

[root@xieqc test]# echo  ${var:=123456}
123456
[root@xieqc test]# echo  $var
123456
//可以看到,变量被默认值直接赋值了。
  • 1
  • 2
  • 3
  • 4
  • 5

使用替代值
命令格式:
${变量名:+替代值} ${变量名+替代值}
与上面两个正好相反。
1.如果变量未定义或为空,不使用替代值
2.如果变量定义了,才使用替代值。替代一词尤为关键,重点思考。
上代码:

[root@xieqc test]# var=""
[root@xieqc test]# echo  ${var:+ Note:see  you  tomorrow}

[root@xieqc test]# var=124
[root@xieqc test]# echo ${var:+ Note:see you tomorrow}
Note:see you tomorrw

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Bash 内部变量

[root@xieqc test]# echo  $HOME
/root
//内部变量HOME  当前用户的家目录
[root@xieqc test]# echo  $IFS
  (这里有个空格。。。)
//内部变量IFS,定义了内部字段分隔符的缩写
[root@xieqc test]# echo  $OSTYPE   
linux-gnu
//内部变量OSTYPE,操作系统的版本
[root@xieqc test]# echo  $SECONDS
7714
//内部变量SECONDS,脚本已经运行的秒数
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

看下面这个 脚本,理解下$SECONDS变量
#vim About_SECONDS.sh

#!/bin/bash
#=========================================
#       FILENAME:About_SECONDS.sh
#       AUTHOR: Xie Qichao xieqc@tedu.cn
#       CREAtED: 14/03/2019  16:17
#=========================================
TIME_LIMIT=10
INTERVAL=1

echo
echo “Hit Control-C to exit before $TIME_LIMIT seconds.”
echo

while [ “SECONDS"le"SECONDS" -le "TIME_LIMIT” ]
do
if [ “SECONDS"eq"SECONDS" -eq "INTERVAL” ];then
untils=second
else
untils=seconds
fi
echo “this script has been running $SECONDS $untils”
sleep $INTERVAL
done

exit 0

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

输出结果:

[root@xieqc test]# vim  About_SECONDS.sh
[root@xieqc test]# sh About_SECONDS.sh

Hit Control-C to exit before 10 seconds.

this script has been running 0 seconds
this script has been running 1 second
this script has been running 2 seconds
this script has been running 3 seconds
this script has been running 4 seconds
this script has been running 5 seconds
this script has been running 6 seconds
this script has been running 7 seconds
this script has been running 8 seconds
this script has been running 9 seconds
this script has been running 10 seconds

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

可以看到,$SECONDS是脚本运行的时间。
是的,就是为了验证这句话。
好,这篇文章就先到这,未完待续。。。

                                </div>
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-b6c3c6d139.css" rel="stylesheet">
                                            <div class="more-toolbox">
            <div class="left-toolbox">
                <ul class="toolbox-list">
                    
                    <li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true">
                        <use xlink:href="#csdnc-thumbsup"></use>
                    </svg><span class="name">点赞</span>
                    <span class="count">1</span>
                    </a></li>
                    <li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{&quot;mod&quot;:&quot;popu_824&quot;}"><svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-csdnc-Collection-G"></use>
                    </svg><span class="name">收藏</span></a></li>
                    <li class="tool-item tool-active is-share"><a href="javascript:;" data-report-click="{&quot;mod&quot;:&quot;1582594662_002&quot;}"><svg class="icon" aria-hidden="true">
                        <use xlink:href="#icon-csdnc-fenxiang"></use>
                    </svg>分享</a></li>
                    <!--打赏开始-->
                                            <!--打赏结束-->
                                            <li class="tool-item tool-more">
                        <a>
                        <svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg>
                        </a>
                        <ul class="more-box">
                            <li class="item"><a class="article-report">文章举报</a></li>
                        </ul>
                    </li>
                                        </ul>
            </div>
                        </div>
        <div class="person-messagebox">
            <div class="left-message"><a href="https://blog.csdn.net/xie_qi_chao">
                <img src="https://profile.csdnimg.cn/B/F/6/3_xie_qi_chao" class="avatar_pic" username="xie_qi_chao">
                                        <img src="https://g.csdnimg.cn/static/user-reg-year/1x/2.png" class="user-years">
                                </a></div>
            <div class="middle-message">
                                    <div class="title"><span class="tit"><a href="https://blog.csdn.net/xie_qi_chao" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}" target="_blank">解启超</a></span>
                                        </div>
                <div class="text"><span>发布了357 篇原创文章</span> · <span>获赞 54</span> · <span>访问量 3万+</span></div>
            </div>
                            <div class="right-message">
                                        <a href="https://im.csdn.net/im/main.html?userName=xie_qi_chao" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-letter">私信
                    </a>
                                                        <a class="btn btn-sm attented bt-button personal-watch" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}">已关注</a>
                                </div>
                        </div>
                </div>
</article>
发布了323 篇原创文章 · 获赞 301 · 访问量 9594
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览