• 『忘了再学』Shell基础 — 12、用户自定义变量


    1、变量定义

    • 变量正确定义。
      格式:变量名="变量值"
      shell
      # 两种方式都可以
      [root@localhost ~]# name=zhenniubi
      
      [root@localhost ~]# name="zhen niubi"
    • 变量名不能用数字开头。
      shell
      [root@localhost ~]# 2name="zhen niubi"
      -bash:2name=zhen niubi:command not found
    • 等号左右两侧不能有空格。
      shell
      [root@localhost ~]# name = "zhenniubi"
      -bash:name:command not found
    • 变量的值如果有空格,必须用引号包含。
      shell
      [root@localhost ~]# name=zhen niubi
      -bash:niubi:command not found

    2、变量调用

    调用变量用$符号。

    shell
    #定义变量name
    [root@localhost ~ ] # name="zhen niubi"
    
    #输出变量name的值
    [root@localhost ~ ] # echo $name
    zhen niubi

    3、变量的修改

    Shell中变量值的修改,是以覆盖的形式完成的,以后最后一次对该变量的赋值为准。

    shell
    #之前定义好的变量
    [root@localhost ~]# name=ailin
    [root@localhost ~]# 
    [root@localhost ~]# echo $name
    ailin
    
    #修改后的变量值
    [root@localhost ~]# name=cangls
    [root@localhost ~]# 
    [root@localhost ~]# echo $name
    cangls

    4、查看变量

    命令格式:

    shell
    [root@localhost ~]# set [选项]

    选项:

    • -u:如果设定此选项,调用未声明变量时会报错(默认无任何提示)(很常用)。
    • -x:如果设定此选项,在命令执行之前,会把命令先输出一次。(不建议使用)

    (1)-u选项说明

    在当前系统下从没有定义过age字段(变量),直接输出age变量的值,如下图可以看到没有任何值。

    image

    如果我给age字段定义一个空值,在查看age字段,如下图,可以看到依旧没有任何输出。

    image

    那么综上所述,查看一个变量时没有任何输出,是有两种可能的。一种是age变量不存在,一种是age变量的值为空。在Java中,变量没有被定义和变量值为空完全是两个不同的概念,在Shell中也一样,我们一定要对此进行区分。

    如果我执行了set -u命令,就可以对上面两种情况进行区分。

    shell
    #直接执行`set -u`命令
    [root@localhost ~ ] # set -u
    
    #输出一个未定义变量,显示addr变量不存在。
    [root@localhost ~]# echo $addr
    -bash: addr: unbound variable
    
    #给addr变量定义一个空值,
    #在查看变量,可以看到变量的值为空。
    [root@localhost ~]# addr=""
    [root@localhost ~]# echo $addr
    
    [root@localhost ~]# 

    注意:在命令行中执行set -u命令,这种方式是临时生效的,需要永久生效,就需要写入环境变量配置文件中。(如何配置,看以后的环境变量配置内容)

    总结:当设置了-u选项后,如果调用没有设定的变量会有报错。默认是没有在何输出的。

    (2)-x选项说明

    就字面意思,如果设定了-x选项,会在每个命令执行之前,先把命令输出一次

    shell
    [root@localhost ~ ] # set -x
    [root@localhost ~ ] # ls
    + ls --color=auto 
    anaconda-ks.cfg install.log install.log.syslog sh tdir test testfile

    如果不新登陆系统,会一直这样,因为上面说了,在命令行中直接执行是临时生效的。并不推荐执行此选项,命令结果看起来很乱。

    (3)set命令说明

    直接使用set命令,不加任何选项,会查询系统中所有的变量,包含用户自定义变量和环境变量。(其实是一部分)

    系统的另一部分变量,用env命令来查看。两个命令看到的变量会有重叠,但是env命令查看不到自定义变量的。(查了一下,网上介绍的也很模糊,就是两个命令就能够查到系统中全部的变量,set多用于查看系统的用户自定义变量,env多用于查询系统的环境变量。)

    总结:

    • set:用来显示当前Shell的变量,包括当前用户的变量。
      每个Shell有自己特有的变量,这个和用户变量是不同的,当前用户变量和你用什么Shell无关,不管你用什么Shell,每个Shell都有自定义的Shell,也就是自己Shell的变量。这种变量不同Shell是不同的,这些变量只有set才会显示,是bash特有的。这种变量也只对本Shell有效, 不能传递给子Shell。(就相当于Java中的局部变量)。
    • env:用来显示环境变量,也叫显示当前用户的变量,环境变量可传递给子Shell。(就相当于Java中的全局变量)

    5、变量删除

    shell
    [root@localhost ~]# unset 变量名

    不需要在变量名前加$符号,只有在调用变量值的时候需要在变量名前加$符号。


    __EOF__

  • 本文作者: 繁华似锦的博客
  • 本文链接: https://www.cnblogs.com/liuyuelinfighting/p/16279947.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    DNA脱氧核糖核酸修饰四氧化三铁|DNA修饰氧化锌|使用方法
    Vu3中样式穿透不生效处理
    opencv c++ 霍夫圆检测
    如何扩大电脑c盘分区,c盘空间不足怎么扩容
    [Python]Pipenv虛擬環境的嘗試與Bug解除
    Spring Boot 2 (六):使用 Docker 部署 Spring Boot 开源软件云收藏
    【Linux成长史】Linux编辑器-gcc/g++使用
    「PAT甲级真题解析」Advanced Level 1006 Sign In and Sign Out
    自制操作系统日志——第二十天
    MyBatis—Spring 动态数据源事务的处理
  • 原文地址:https://www.cnblogs.com/liuyuelinfighting/p/16279947.html