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. 类型转换Java day8

    类型转换自动类型转换 从同种类型的低字节类型值直接转换到高类型字节值的转换可自动转换 类型自动转换示例 byte a = 20; int b = a;//不报错可正常转换 有些类型它在计算时默认以指定 ...

  2. 半吊子菜鸟学Web开发3 --Html css学习1

    1创建一个html文件,用vscode打开 首先输入一个! 然后就可以开始编辑html文件了 2 整体结构 <!DOCTYPE HTML><html>    <head& ...

  3. promethues常用的函数

    prometheus函数常用 时数据 (Instant vector): 包含一组时序,每个时序只有一个点,例如:http_requests_total区间数据 (Range vector): 包含一 ...

  4. lombok的使用。

    今天学习spring event,无意中看到lombok插件,以前也见同事用过,特此看了下用法.觉得还挺好用,记录下. 网上找到的一个比较术语化的解释:lombok是一个基于LGPL的开源J2EE综合 ...

  5. visual studio 2019工具里添加开发中命令提示符的方法

    最新新装了visual studio 2019,发现默认的没有开发者命令提示符 现将添加步骤描述如下: 从VS2019菜单选择"Tools",然后选择"外部工具" ...

  6. 解决Mui中popover 顶部弹出菜单弹出位置不准确以及无法收回的问题

    前言 最近公司的项目转向使用Hbuilder开发移动端项目,其中想要通过在顶部标题栏加入弹出菜单的方式,来定位长列表的位置,如图所示. 问题 Mui的功能貌似还不是很完善,在使用这个弹出菜单的时候,发 ...

  7. Javascript--function的name属性

    1.非标准的name属性 function sayHi(){  console.log("Hi");} console.log(sayHi.name);

  8. Shiro 安全框架详解一(概念+登录案例实现)

    shiro 安全框架详细教程 总结内容 一.RBAC 的概念 二.两种常用的权限管理框架 1. Apache Shiro 2. Spring Security 3. Shiro 和 Spring Se ...

  9. 前端复制粘贴文字clipBoard.js的使用

    1. vue  中的复制粘贴: <div class="mainTextItem" @click="copyTXTOne" id="copyOn ...

  10. css3种不知道宽高的情况下水平垂直居中的方法

    第一种:display:table-cell 组合使用display:table-cell和vertical-align.text-align,使父元素内的所有行内元素水平垂直居中(内部div设置di ...