bash功能特性一 变量

一、什么是shell

    shell是为了使用户能够操作应用程序的接口程序。如经常使用的图形界面及命令行界面都是shell。下面来介绍一下bash这个shell的功能。

二、变量的概念

    被命名的内存空间即为变量,Linux中内置了许多变量,我们可以通过修改这些变量的值还制定用户自己的bash环境。

    1、显示变量

1.png

    使用echo命令来读出变量的内容,PATH是变量的名称,在前面加上$表示读取变量的内容,否则只会显示字串本身,如下所示;

2.png

    也可以使用下面的方式来读取变量的内容;

3.png

    2、设置自定义变量

        我们也可以自己来设置自定义变量,通过“=”号即可实现;

4.png

    3、取消变量

8.png

三.变量的类型

    Linux存在多种不同类型的变量,下面逐一介绍。

    1、本地变量

        只对当前shell进程有效,对其它shell进程和当前shell进程的子进程无效的变量;

5.png

        变量的设置规则:

            变量的命名应遵循以下原则:

                1、只能包含字母语、数字和下划线,并且不能以数字开头;

                2、不应该跟系统中已有的环境变量重名;

                3、最好做到见名知义;

            变量中的引用:

                   "":弱引用,里面的变量会被替换;

6.png

                   '':强引用,里面的所有字符都是字面量,直接输出;

7.png

    2、环境变量

        环境变量是Linux系统中内置的变量,用于帮助用户设置提示符、文件查找的路径、语系等功能;环境变量作用于当前shell进程及其子进程,对其它的shell无效。

        1)查看当前系统上的环境变量

            (1)用evn查看环境变量

1.png

            上面的结果中有些常用的环境变量说明如下:

                HOSTNAME:主机名;

                SHELL:当前环境中使用的shell程序;

                HISTSIZE:记录历史命令的条数,默认为1000;

                USER:当前用户名;

                MAIL:当前用户的邮箱路径;

                PATH:命令查找路径;

                LANG:当前语系设置;

                HOME:当前用户的家目录。

            (2)使用export命令查看环境变量

2.png

            (3)使用printenv命令查看环境变量

3.png

            (4)使用set命令查看所有变量        1.png

            (5)将自定义变量转换成环境变量  

             脚本在执行时会启动一个子shell进程,而父进程就会处于睡眠状态,等子进程执行完成后再回到父进程继续执行;父进程处于睡眠状态时,子进程不会继承父进程的本地变量,只会继承环境变量,所以必须将脚本中涉及到的本地变量转换成环境变量才能顺利执行。

                使用export命令来导出自定义变量为环境变量;

5.png

                也可直接使用export命令来直接定义环境变量;

6.png

            (6)修改环境变量

                在命令行修改环境变量并不能永久生效,一旦退出shell修改就会失效。

                与自定义变量的定义方式相同,可以直接为环境变量赋值;

1.png

                也可以在环境变量后面追加内容; 

2.png

                自定义提示符  

3.png                 PS1定义了当前shell中的提示符信息,参数含义如下:

                    \u:当前用户名

                    \h:主机名

                    \H:FQDN,完整格式主机名

                    \w:当前工作目录的基名

                    \W:当前工作目录的绝对路径

                    \$:提示符

                    \t:显示时间

1.png

    3、局部变量

        对shell脚本中某代码片断有效:通常用于函数本地;

        定义方法:local VARNAME=VALUE

    4、位置变量

        $1,$2,…,${10}

    5、特殊变量

        $?:上一个命令的执行状态返回值

 

       $#:参数个数

       $*:参数列表

       $@:参数列表

    6、只读变量:

        readonly VARNAME

四、变量的删除与替换

    将路径赋值到变量p中;

1.png

    ${variable#word}:在variable中存储字串上,自左而右,查找第一次出现的word,删除字符开始至此word处的所有内容;

2.png

    上面的结果表示从左向右查找第一次出现的/,并将其删除;              

    ${variable##word}:在variable中存储字串上,自左而右,查找最后一次出现的word,删除字符开始至此word处的所有内容;

3.png

    上面的结果表示从左向右查找最后一次出现的/,前面的*代表任何字符;              

    ${variable%word}:在variable中存储字串上,自右而左,查找第一次出现的word,删除word开始到尾部的所有内容;

4.png

    上面的结果表示从右向左查找第一个/,并将其后面的内容删除;              

    ${variable%%word}:在variable中存储字串上,自右而左,查找最后一次出现的word,删除word开始到尾部的所有内容;

5.png

    上面的结果表示从右向左查找最后一个/s,并将其后面的内容删除。

    变量的查找替换:

       ${variable/pattern/substi}:将变量中第一次出现的pattern替换为substi;

1.png

        将第一次出现的123替换为321;

2.png

       ${variable//pattern/substi}:将变量中出现的所有的pattern替换为substi;

3.png

       ${variable/#pattern/substi}:将变量中位于行首的pattern替换为substi;

4.png

       上面的变量并没有被替换,因为23并是位于行首的字符;

5.png

       从上面的结果看出只替换了行首的字符;

       ${variable/%pattern/substi}:将变量中位于行尾的pattern替换为substi;

6.png

              pattern可以使用globbing中的元字符:*,?

7.png

    变量的查找删除:

       ${variable/pattern}:删除pattern第一次匹配到的字符串;

8.png

       ${variable//pattern}:删除pattern所有匹配到的字符串;

9.png

       ${variable/#pattern}:删除pattern匹配到的行首的字符串;

10.png

       ${variable/%pattern}:删除pattern匹配到的行尾字符串;

11.png

    大小写转换:

       小写转大写:${variable^^}

12.png

       大写转小写:${variable,,}

13.png

    变量赋值操作:

        ${parameter:-word}:如果parameter为空或未定义,则返回为“word";否则,返回parameter的值;

14.png

        因为变量p有值,直接显示变量p的的内容;

15.png

        将变量p撤消,即显示表达式后面的内容;

        ${parameter:+word}:如果parameter为空或未定义,则不做任何操作;否则,返回word的值;

16.png

        此表达式正上面的正好相反,将变量p赋值后显示表达式后面的字符,即tt;

        ${parameter:=word}:如果parameter为空或未定义,不但变量返回"word";而且将parameter赋值为word;

17.png

        变量p中有值时,直接显示变量p的值,变量p不存在时,将tt赋值给变量p;

        ${parameter:offset:length}:如果将parameter偏移offset个字符,并截取length长度的字符

18.png

        在上面的表达式中,设置了偏移3个字符,即从第4个字符开始显示,截取2个字符,所以结果为45;

        ${parameter:?word}:如果parameter为空或未定义,则将word做为错误信息显示,否则显示parameter的值;

19.png

        为脚本使用配置文件,并确保某变量有可用值的方式:

             variable=${variable:-default vaule}

原创文章,作者:petmaster,如若转载,请注明出处:http://www.178linux.com/2894

(0)
petmasterpetmaster
上一篇 2015-04-19
下一篇 2015-04-20

相关推荐

  • 8月3日课堂笔记

    课堂笔记 linux用户和组管理(非常非常重要)    用户管理和组管理各种相关的应用程序    简单的管理命令 安全上下文:   每次对主机操作都是以发起一个进程来完成的,进程代表着人来执行操作,进程以其发起者的身份来运行;所以开机时有很多守护类的进程,我们应该以普通身份来运行,普通用户通常都是系统用户;从来不用登陆系统的;进程对文件的访问权限,取决于发起…

    Linux干货 2016-08-04
  • 马哥教育网络班21期+第6周课程练习

    VIM基础知识 常用模式: 编辑模式–>命令模式 输入模式 末行模式:内置的命令行接口 模式转换: 编辑模式–>输入模式 i:在光标所在处前转换为输入模式; a:在光标所在后面转入输入模式; o:在当前光标所在行的下方打开一个新行,并转为输入模式; I:在当前光标所在行的行首输入; A:在当前光标所在行的行尾输入; O:在当前光标所在行的上方…

    Linux干货 2016-08-15
  • 高可用keepalived+haproxy实现动静分离

    高可用keepalived+haproxy: 实验环境: clientIP为:172.18.254.149 VIRROUTEIP为:172.18.61.5 keepalived+haproxy机器1IP为172.18.61.1 keepalived+haproxy机器2IP为172.18.61.2 server1IP为172.18.61.3 server2I…

    2017-05-17
  • N25-第七周作业

    第七周作业 — 1、创建一个10G分区,并格式为ext4文件系统; fdisk /dev/sdanp2enter+10Gwpartx -a /dev/sda(1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;mke2fs -t ext4 -b 2018 -m 2 -L “MYDATA” /…

    Linux干货 2017-02-25
  • 加密和解密技术基础(01) ~ 105分钟

    加密和解密技术基础(01) ~ 105分钟 讲课思路: 互联网通信机制 –> 网络协议模式(osi,tcp/ip模型) –> 数据通信安全  à 数据加密 –> 加密算法 –> OpenSSL是什么 à SSL通信原理 –> CA –> OpenSSL命令用法 à CA 自签及签证演示 1.1 &nbs…

    Linux干货 2016-09-19
  • 网络分层模型(OSI,TCP/IP)

    目前存在的两种网络分层模型:OSI模型和TCP/IP模型。 OSI模型一共分为七层 TCP/IP模型和OSI模型类似,但是只分为四层。 OSI模型 OSI的全程是Open Systems Interconncection,即开放系统互联,它由ISO(International Organization for Standardization)制定。 OSI是…

    2017-11-27

评论列表(1条)

  • stanley
    stanley 2015-04-20 21:48

    有图有文,每个练习结果均有图证,看得出其中的认真程度,赞。