1、定义变量的规则

在定义变量时,有一些规则需要遵守

  • 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如果变量名是2name则是错误的。
  • 在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必修指定变量类型为数值型。
  • 变量用等号连接值,等号左右两侧不能有空格。
    [root@localhost ~]# name = cangls
    -bash: name: command not found
  • 变量的值如果有空格,需要使用单引号或双引号包括。如:test="hello world!"。其中双引号括起来的内容$\和反引号都拥有特殊含义,而单引号括起来的内容都是普通字符。
  • 在变量的值中,可以使用“\”转义符。
  • 如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含"$变量名"或用${变量名}包含变量名(就相当于Java中字符串连接)。例如:
    #叠加变量 test,变量值变成了123456
    [root@localhost ~ ] # test=123
    [root@localhost ~ ] # test="$test"456
    [root@localhost ~ ] # echo $test
    123456 #再叠加变量 test,变量值变成了123456789
    [root@localhost ~ ] # test=${test}789
    [root@localhost ~ ] # echo $test
    123456789

    总结:变量值的叠加可以使用两种格式:"$变量名"${变量名}

  • 如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$( )包含命令。之前说过,例如:
    [root@localhost ~ ] # test=$(date)
    [root@localhost ~ ] # echo $test
    2018年 10月 21日 星期一 20:27:50 CST
  • 环境变量名建议大写,便于和命令区分。

2、变量的分类

Shell中变量的分类并不是安装变量的类型进行分类的。

  • 用户自定义变量:这种变量是最常见的变量,由用户自由定义变量名和变量的值。(只在当前Shell中生效,子Shell中不生效)
  • 环境变量:这种变量中主要保存的是和系统操作环境相关的数据,比如当前登录用户,用户的家目录,命令的提示符等。环境变量的变量名可以自由定义,但是一般对系统起作用的环境变量的变量名是系统预先设定好的。

    说明:环境变量分为两种,一种是允许用户自定义的,还有一种是系统定义好的。用户定义的这种环境变量,对整个操作系统的环境来说作用不是很大,唯一的作用就是,在父子Shell中都生效(这个以后再说)。而系统定义的环境变量,会对我们的操作环境产生一定影响。对系统定义的环境变量,我们不能修改变量的名称和作用,只能修改变量的属性值。系统定义的环境变量主要就是在几个重要的环境变量配置文件中的变量,如/etc/profile文件中的变量。

    ...

    提示:环境变量的作用域是整个系统都生效,包括父Shell子Shell。在这种情况下,为了避免和系统命令产生冲突,建议环境变量的名称都是大写(主要是自定义的环境变量,系统定义的环境变量一般都是大写的,也不能改),因为Linux系统中所有的系统命令都是小写(只有大写的命令选项),这样就可以避免混淆了。

  • 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
  • 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。(位置参数变量其实就是预定义变量中的一个类型)

说明:预定义变量和位置参数变量一共就几种,需要记住(以后详细讲)。

『忘了再学』Shell基础 — 11、变量定义的规则和分类的更多相关文章

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

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

  2. 『忘了再学』Shell基础 — 16、位置参数变量

    目录 1.位置参数变量$n 2.位置参数变量$*和$@ 3.位置参数变量$# 位置參数变量的作用主要用于脚本的传参. 位置參数变量的名称和作用都是确定不能改变的,但是该变量的内容是可以更改的,也就是变 ...

  3. 『忘了再学』Shell基础 — 20、Shell中的运算符

    目录 1.Shell常用运算符 2.Shell中数值运算的方法 (1)方式一 (2)方式二 (3)方式三(推荐) 1.Shell常用运算符 Shell中常用运算符如下表: 优先级数值越大优先级越高,具 ...

  4. 『忘了再学』Shell基础 — 29、AWK内置变量

    目录 1.AWK内置变量 2.练习说明 (1)$n变量练习 (2)FS变量练习 (3)NF变量和NR变量练习 3.总结: 1.AWK内置变量 AWK内置变量如下表: awk内置变量 作用 $0 代表目 ...

  5. 『忘了再学』Shell基础 — 5、Bash基本功能(命令的别名和常用快捷键)

    目录 1.给命令设置别名 (1)设置别名的命令格式 (2)命令别名永久生效 (3)别名的优先级 2.Bash常用快捷键 1.给命令设置别名 Linux系统的命令别名我们之前已经说过了,这里再过一边. ...

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

    目录 1.变量定义 2.变量调用 3.变量的修改 4.查看变量 (1)-u选项说明: (2)-x选项说明: (3)set命令说明: 5.变量删除 1.变量定义 变量正确定义. 格式:变量名=" ...

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

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

  8. 『忘了再学』Shell基础 — 17、预定义变量

    目录 1.预定义变量$? 2.预定义变量$$和$! 我们之前说过,Shell中的变量不是按照变量值的类型来进行分类的,而是按照Linux系统中定义的变量类别来分类的. 预定义变量就是,事先把变量的名称 ...

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

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

随机推荐

  1. sqlmap的常用tamper脚本

    sqlmap下的tamper目录存放绕过WAF脚本 使用方法 --tamper 脚本名称,脚本名称 多个tamper脚本之间用空格隔开 apostrophemask.py 用utf8代替引号 equa ...

  2. FPGA设计流程

    今天学习了FPGA设计流程的视频,我理解要做一个完整的FPGA系统,所要经历的步骤,先将它简单总结如下: 我在对上面的流程图进行解释: 第一:设计定义就是我们这个FPGA系统或者FPGA设计所要实现的 ...

  3. C249: 'DATA': SEGMENT TOO LARGE“解决方法 | keilC51设置编译模式:SMALL,COMPACT,LARGE

    "Keil Cx51编译器提供三条编译模式控制命令:SMALL,COMPACT,LARGE,它们对变量存储器空间的影响如下. SMALL:所有变量都被定义在8051单片机的片内RAM中,对这 ...

  4. AFO以后的机房游记

    2019.8.6~8.8 周老师让我讲插头DP,理所当然地到机房备课(tuifei) dl24来了足足19个人.只可惜lsy没来,我们的phy,ljx去了首师附.看不到神仙打架了[哭] 插头DP这玩意 ...

  5. Python的安装与开发环境的选用

    2021快要结束了,这一年我依旧深耕于python的广阔土壤,将重点放在机器人和传感器的角度.也收获了一大批正在学习和期望学习python的朋友. 正在学习的暂且不言,这篇主要是写给期望学习的朋友,同 ...

  6. Python 字典(键值对)

    Python 字典(键值对) 创建字典 特性:字典中的键不能变,而且唯一 格式:变量名={"键1":值1,"键2":值2} 函数 作用 dict() 强制转换为 ...

  7. java继承:extends

    继承:extends 1.java只支持单继承,不支持多继承 2.java支持多层继承(继承体系) 3.子类不能继承父类所有非私有的成员(成员方法和成员变量) 4.子类不能继承父类的构造方法,但是可以 ...

  8. python 装饰器函数基础知识

    1.装饰器的本质--一个闭包函数 2.装饰器的功能--在不改变原函数及其调用方式情况下对原函数功能进行拓展 3.带参数和返回值的装饰器 def timer(func): @wraps(func) #使 ...

  9. Java堆空间的划分:新生代、老年代

    参考链接:Java堆空间的划分:新生代.老年代

  10. java中的修饰符和基本数据类型

    1.java中的修饰符 java中的修饰符主要是用来对类资源进行一个权限控制,上面表格表现的很清晰,无需多言. 2.java中的基本数据类型 java中的数据类型分为引用类型和基本类型.基本数据类型有 ...