1. 概述
- 概述
- 知识点又稀又碎, 面试一问就流泪
- 简单介绍下 shell 下的变量及其基本操作
2. 环境
- 操作系统
- CentOS Linux release 7.5
- 用户
- root 用户
- 约定
- 使用 > 作为 命令提示符, 不是命令的一部分, 需要注意
- 所有命令不保证 可以无脑复制执行, 使用前需要理解
- '#' 表示注释
2. 变量分类
-
概述
- 变量按照 作用域 和 用户 两个维度的划分不同类型
- 一上来就大摆概念, 是我很不喜欢的一种描述方式, 但是目前我也没啥更好的
-
作用域
- 局部变量
- 常见于 shell 脚本中
- 出现在 函数 里
- 仅在函数中生效, 出了函数就无效了
- 全局变量
- 在当前 shell 里生效
- 环境变量
- 在当前 shell 及其 子 shell 里生效
- 局部变量
-
用户
- 当前用户
- 所有用户
3. 基本操作
- 概述
- 讲述基本操作
1. 设置变量
- 概述
- 设置变量
- 确认成功
1. 查看变量, 确认变量没有被设置
-
命令
# 1. 首先确认一下, 这个变量有没有被设置 ## 1. 假设变量名为 key01 ## 2. shell 里用可以用 $<name> 或者 ${<变量名>} 来对变量取值, 我倾向于 第二种, 比较有 仪式感, 当然也有别的好处, 想起来再说 > echo ${key01} # 2. 如果没有设定变量, 会返回一个 空行
2. 设置变量
-
命令
# 1. 既然变量没有被设置, 我们来设置变量 > key01 = 'var01' # 2. 成功后没有任何返回值
3. 查看变量
-
命令
# 1. 第二步设置的变量, 在当前 shell 里, 可以使用了 # 2. 这里设置的, 是一个 全局变量 > echo ${key01} var01 # 3. 如果之前设置成功, 会直接返回 之前设置的变量值
2. 查看变量
- 开始都查看了, 为啥这下又要查看
- 开始只是查询单个变量, 这次能查一堆
- 后面有惊喜
1. 使用 set 命令, 查看 变量
-
命令
# 1. grep 是用来过滤的, 这个暂时不讲 # 2. 执行命令后, 返回一个值, 就是之前设置的 全局变量 > set | grep key01 key01=var01
2. 使用 env 命令, 查看 变量
-
命令
# 1. 这里就没有找出来 key01 # 2. 这是为啥呢? > env | grep key01
3. 命令区别
- 全局变量
- 直接配置的变量, 是全局变量
- 生效的范围, 只有当前 shell 终端
- 不信你换个别的 shell 终端, 用 set 也找不到
- set 与 env
- set 可以查询 所有变量
- env 只能查询 环境变量
3. 环境变量
1. 环境变量
- 环境变量
- 作用域, 是当前 shell 终端, 与所有的 子终端
- 不信你配置个 环境变量, 再别的 shell 终端看看
- 啥, 不会啊...对哦, 还没说这个, 马上说
- 作用域, 是当前 shell 终端, 与所有的 子终端
2. 配置环境变量
-
命令
# 1. 将已经配置好的 key01 全局变量, 配置为 环境变量 > export key01 # 2. 验证, 找到结果, 验证通过 > env | grep key01 key01=var01
4. 用户 与 全局环境变量
- 概述
- 已经学会了配置 环境变量
- 但也有些问题
- 配置后只能对 执行命令的 shell 生效
- 新开窗口就失效了
- 如果有需要, 每次都要重新配置
- 配置后只能对 执行命令的 shell 生效
- 解决方案
- 可以通过 配置文件 配置 环境变量
- 可以对 单个用户 或者 全局用户 配置
1. 用户维度
-
命令
# 1. 打开配置文件 ~/.bash_profile # 2. 在 文本中加入配置 环境变量 的命令 key01=var01 export key01 # 3. 最后执行 source 命令, 让 修改生效 > source ~/.bash_profile # 4. 生效之后, 可以查看到该环境变量 ## 1. 只要以该用户登录, 新的 shell 终端也会有
2. 全局维度
-
命令
# 1. 思路相同 # 2. 配置文件: /etc/profile
5. 最后: 取消变量
-
命令
# 1. 如果你不想要之前的变量了, 也没问题 > unset key01 # 2. 取消之后, 就找不到了