1、变量定义

  • 变量正确定义。

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

2、变量调用

调用变量用$符号。

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

3、变量的修改

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

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

4、查看变量

命令格式:

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

选项:

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

(1)-u选项说明:

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

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

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

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

#直接执行`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选项,会在每个命令执行之前,先把命令输出一次

[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、变量删除

[root@localhost ~]# unset 变量名

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

『忘了再学』Shell基础 — 12、用户自定义变量的更多相关文章

  1. 『忘了再学』Shell基础 — 11、变量定义的规则和分类

    目录 1.定义变量的规则 2.变量的分类 1.定义变量的规则 在定义变量时,有一些规则需要遵守 变量名称可以由字母.数字和下划线组成,但是不能以数字开头.如果变量名是2name则是错误的. 在Bash ...

  2. 『忘了再学』Shell基础 — 21、变量的测试与内容置换

    目录 1.什么是变量的测试与内容置换 2.变量的测试与内容置换 3.示例 例1: 例2: 例3: 1.什么是变量的测试与内容置换 我们之前说过,在Shell中,一个变量未定义,和一个变量为空值的输出效 ...

  3. 『忘了再学』Shell基础 — 10、Bash中的特殊符号(二)

    提示:本篇文章接上一篇文章,主要说说()小括号和{}大括号的区别与使用. 8.()小括号 ():用于一串命令执行时,()中的命令会在子Shell中运行.(和下面大括号一起说明) 9.{}大括号 {}: ...

  4. 『忘了再学』Shell基础 — 13、环境变量(一)

    目录 1.用户自定义的环境变量 (1)环境变量设置 (2)查询自定义环境变量 (3)删除自定义环境变量 2.系统自带的环境变量--PATH环境变量 (1)PATH环境变量 (2)PATH环境变量的作用 ...

  5. 『忘了再学』Shell基础 — 19、使用declare命令声明变量类型

    目录 1.declare命令介绍 2.声明数组变量类型 3.声明变量为环境变量 4.声明只读属性 5.补充: 1.declare命令介绍 Shell中所有变量的默认类型是字符串类型,如果你需要进行特殊 ...

  6. 『忘了再学』Shell基础 — 22、主要的环境变量配置文件说明

    目录 1.source命令 2.Linux系统中环境变量配置文件 (1)登录时生效的环境变量配置文件 (2)/etc/profile环境变量配置文件 (3)/etc/profile.d/*.sh环境变 ...

  7. 『忘了再学』Shell基础 — 3、echo命令的介绍与使用

    目录 1.echo命令的作用 2.echo命令的基本用法 3.echo命令的-e选项用法 4.echo命令一些特殊用法 (1)输出字符带有字体颜色 (2)输出字符带有背景颜色 在讲Shell脚本之前, ...

  8. 『忘了再学』Shell基础 — 24、Shell正则表达式的使用

    目录 1.正则表达式说明 2.基础正则表达式 3.练习 (1)准备工作 (2)*练习 (3).练习 (4)^和$练习 (5)[]练习 (6)[^]练习 (7)\{n\}练习 (8)\{n,\}练习 ( ...

  9. 『忘了再学』Shell基础 — 25、扩展正则表达式

    目录 1.扩展正则表达式说明 2.练习 (1)+和?练习 (2)|和()练习 3.注意(重点) 1.扩展正则表达式说明 熟悉正则表达式的童鞋应该很疑惑,在其他的语言中是没有扩展正则表达式说法的,在Sh ...

随机推荐

  1. springboot实现热部署的几种方式

    原理:使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在 ...

  2. 简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别 ?

    MyISAM: 第 134 页 共 485 页不支持事务,但是每次查询都是原子的: 支持表级锁,即每次操作是对整个表加锁: 存储表的总行数: 一个 MYISAM 表有三个文件:索引文件.表结构文件.数 ...

  3. 数据库MySql的学习(1)--基本操作

    转自 博客园-hoojo-http://www.cnblogs.com/hoojo/archive/2011/06/20/2085390.html 一.数据库简单介绍 1. 按照数据库的发展时间顺序, ...

  4. IDEA 创建javaWeb以及Servlet

    1.新建项目 2.Web工程设置:点击项目名称,按F4 (1)配置sources:在WEB-INF下新建两个文件夹classes和lib (2)配置path:刚刚创建的classes文件夹路径 (3) ...

  5. Jedis 与 Redisson 对比有什么优缺点?

    Jedis 是 Redis 的 Java 实现的客户端,其 API 提供了比较全面的 Redis 命令 的支持:Redisson 实现了分布式和可扩展的 Java 数据结构,和 Jedis 相比,功能 ...

  6. 学习saltstack (二)

    saltstack使用教程: 1.安装: 需要epel的yum源,没有的话把下面的复制并新建个文件 /etc/yum.repos.d/epel.repo 粘贴即可: [epel] name=Extra ...

  7. SpringDataJpa备忘录

    单向多对一关系 //产品类型 一的一方 @Entity public class ProductDir { @Id @GeneratedValue private Long id; private S ...

  8. BUG战斗史 —— 日期格式与字符串之间的转换

    说在前面 最近在公司实习,接触了一个中小型的后台管理系统,不得不说,项目的目录结构比我平时做的"课程设计"要来得复杂,于是我先去看了Github上一些后台管理系统的模板项目 在gu ...

  9. Windows常用快捷操作

    Windows操作系统作为目前最广泛使用的PC端OS,掌握一些快捷键,方便快速在Windows系统下进行操作. 下面收集整理了一些常用的快捷操作: Ctrl + A   全选 Ctrl + C   复 ...

  10. C++中初始化列表的使用(总结)

    原文链接 https://www.cnblogs.com/dishengAndziyu/p/10906081.html 参考链接:https://www.cnblogs.com/laiqun/p/57 ...