Skip to content
KARINKARIN
博客主页
项目总览
知识要点
捣鼓折腾
Git笔记
Excel修炼秘籍
github icon
  • 博客主页
    • 项目总览
          • Shell脚本笔记
            • Shell脚本介绍
              • Shell语法
                • Shell格式化输出
                  • Shell格式化输入
                    • Shell变量
                      • 变量介绍
                        • 变量存储原理
                          • 变量读取原理
                          • 变量分类
                            • 定义变量
                              • 定义变量
                                • 读取变量内容
                                  • 取消变量
                                    • 定义永久变量
                                  • Shell数组
                                    • Shell运算
                                      • Shell流程控制---if判断语句
                                        • Shell流程控制---for循环语句
                                          • Shell流程控制---while循环语句
                                            • Shell流程控制---until循环语句
                                              • Shell流程控制---case分支语句
                                                • Shell函数
                                                  • Shell正则表达式
                                                    • Shell对文本的搜索---grep命令
                                                      • Shell对文件的操作---sed命令
                                                        • Shell对输出流的处理---awk命令
                                                          • Shell监控脚本
                                                            • Shell脚本---lamp环境安装

                                                          Shell变量

                                                          author iconkarincalendar icon2021年4月9日category icon
                                                          • 教程
                                                          tag icon
                                                          • shell
                                                          timer icon大约 4 分钟

                                                          此页内容
                                                          • 变量介绍
                                                            • 变量存储原理
                                                            • 变量读取原理
                                                          • 变量分类
                                                          • 定义变量
                                                            • 定义变量
                                                            • 读取变量内容
                                                            • 取消变量
                                                            • 定义永久变量

                                                          # 变量介绍

                                                          在编程中,我们总有一些数据需要临时存放在内存,以待后续使用时快速读出。内存在系统启动的时候被按照1B一个单位划分若干个块,然后统一编号(16 进制编号),并对内存的使用情况做记录,保存在内存跟踪表中。

                                                          那么问题来了,1G 内存有多少个 1B 单位呢?

                                                          计算机的存储容量单位: 1B = 8bit 1KB = 1024B 1MB = 1024KB 1GB = 1024MB 1TB = 1024GB 1PB = 1024TB 1EB = 1024PB 1ZB = 1024EB . . .

                                                          好了,已经够大了!当然还有 YB、BB 更大的单位,同样进制也是 1024。

                                                          1G = 1024*1024*1024 = 10737418248B

                                                          假如你将一个 1B 的字符存入内存,如何读出呢?有么有一种大海捞针的感觉阿!我们讨论一下计算机是如何让我们人类快速将数据存在内存,如何从内存中读出数据的。我们研究过变量后就明白了。

                                                          **变量:是编程中最常用的一种临时在内存中存取数据的一种方式。**
                                                          

                                                          变量存储原理图

                                                          变量存储原理图

                                                          从图片可以看出,当我们在脚本中定义变量存值的时候,可以从以下方面看到变化:

                                                          • 内存占用:

                                                            如果存的是一个字符则占用 1 个字节,如果存的是字符串则是字符串长度再加上 1 个字节长度(\0 是一个特殊字符,代表字符串的结束)。

                                                          • 变量名也内存的空间关系:

                                                            计算机中会将对应的内存空间和变量名称绑定在一起,此时代表这段内存空间已经被程序占用,其他程序不可复用;然后将变量名对应的值存在对应内存地址的空间里。

                                                          理解变量的存储与读取(STRING1="ABC")

                                                          # 变量存储原理

                                                          1. STRING1(逻辑地址)<===> 0x5...0x8(物理地址) 存取数据 ABC STRING1 是逻辑地址,给人看的,方便热记忆; 0x5...0x8 是内存物理地址,是计算机寻址的依据;
                                                          2. 对于人来说 STRING1 上存的数据是 ABC,对于计算机来说数据是存在物理地址上的;
                                                          3. 在建立变量的时候,计算机自动将逻辑地址(变量名)和物理地址做了对应绑定。

                                                          # 变量读取原理

                                                          当调用STRING1的时候,计算机会根据对应关系,找到物理地址; 定位内存地址,读出数据并返回。

                                                          # 变量分类

                                                          1. 本地变量:用户私有变量,只有本地用户可以使用,保存在家目录下的 .bash_profile、.bashrc 文件中
                                                          2. 全局变量:所有用户都可以使用,保存在 /etc/profile、/etc/bashrc 文件中
                                                          3. 用户自定义变量:用户自定义,比如脚本中的变量

                                                          补充说明:

                                                          1. 计算机启动系统后,全局变量会先加载到内存中;
                                                          2. 当用户登录系统成功之后,本地变量会加载到内存中;
                                                          3. 打开一个终端或一个脚本,自定义临时变量会在关闭终端或脚本运行结束后,变量会自动从内存中释放。

                                                          # 定义变量

                                                          # 定义变量

                                                          定义变量格式:变量名=值

                                                          在shell编程中的变量和等号之间不能有空格。

                                                          变量名命名规则:

                                                          • 命名只能使用英文字母、数字和下划线,首歌字符不能以数字开头;
                                                          • 中间不能有空格,可以使用下划线(_);
                                                          • 不能使用标点符号;
                                                          • 不能使用 bash 里的关键字(可以使用 help 命令查看保留关键字)。

                                                          定义变量演示:

                                                          #变量赋值,此种方法设置为本地变量
                                                          [root@linuc ~ ]# name="admin"
                                                          [root@linuc ~ ]# var1="hello world!"
                                                          [root@linuc ~ ]# age=30
                                                          [root@linuc ~ ]# score=88
                                                          
                                                          1
                                                          2
                                                          3
                                                          4
                                                          5

                                                          注意:字符串要用单引号或双引号引起来。

                                                          # 读取变量内容

                                                          读取变量内容符:$

                                                          读取方法:$变量名

                                                          #变量内容读取
                                                          [root@localhost ~ ]# echo $name
                                                          admin
                                                          [root@localhost ~ ]# echo $school
                                                          jialidun
                                                          [root@localhost ~ ]# echo $age
                                                          30
                                                          [root@localhost ~ ]# echo $score
                                                          88
                                                          
                                                          1
                                                          2
                                                          3
                                                          4
                                                          5
                                                          6
                                                          7
                                                          8
                                                          9

                                                          # 取消变量

                                                          取消变量命令:unset

                                                          [root@localhost ~ ]# unset name
                                                          [root@localhost ~ ]# echo $name
                                                          
                                                          [root@localhost ~ ]# 
                                                          
                                                          1
                                                          2
                                                          3
                                                          4

                                                          说明:对于本地变量和全剧变量,unset 只能临时取消,当用户重新登录或重启计算机后,变量就会恢复。

                                                          # 定义永久变量

                                                          • 本地变量:用户私有变量,只有本用户可以使用,保存在家目录下的 .bash_profile、.bashrc 文件中
                                                          • 全局变量:所有用户否可以使用,保存在 /etc/profile、/etc/bashrc 文件中

                                                          本地变量

                                                          [root@localhost ~ ]# tail -l ~/.bahs_profile
                                                          name='admin'
                                                          
                                                          1
                                                          2

                                                          全局变量

                                                          [root@linuc ~ ]# tail -l /etc/profile
                                                          exprot age=30
                                                          
                                                          1
                                                          2

                                                          说明

                                                          只需要在对应的文件中定义所需要的变量即可,但定义全局变量时,需要在前面加上 export 才可以。

                                                          edit icon编辑此页open in new window
                                                          上一页
                                                          Shell格式化输入
                                                          下一页
                                                          Shell数组
                                                          MIT Licensed
                                                          Copyright © 2022 karin