一、环境变量分类
在Linux系统中,环境变量按照其作用范围不同大致可以分为系统级环境变量和用户级环境变量。
- 系统级环境变量: Shell环境加载全局配置文件中的变量共享给所有用户所有Shel程序使用,全局共享
- 用户级环境变量: shell环境加载个人配置文件中的变量共享给当前用户的Shell程序使用,登录用户使用
1.1 系统环境变量
- 是系统提供的共享变量.
- 是linux系统加载Shell的配置文件中定义的变量共享给所有的Shell程序使用
shell的配置文件分类
- 全局配置文件
/etc/profile
/etc/profile.d/*sh/etc/bashrc
- 个人配置文件
当前用户 /.bash_profile
当前用户/.bashrc
一般情况下,我们都是直接针对全局配置进行操作.
二、全局配置文件/etc/profile
当前用户进入Shell环境初始化的时候会加载全局配置文件/etc/profile里面的环境变量,供给所有Shell程序使用。以后只要是所有Shell程序或命令使用的变量,就可以定义在这个文件中。
2.1 案例
/etc/profile定义存储自定义系统级环境变量数据
步骤:
①编辑/etc/profile全局配置文件
增加命令: 定义变量VAR1=VAR1 并导出为环境变量
②重载配置文件/etc/profile,因为配置文件修改后要立刻加载里面的数据就需要重载,语法
source /etc/profile
③在shell环境中读取系统级环境变量VAR1
三、加载流程原理
3.1 shell工作环境
用户进入linux系统就会初始化shell环境,这个环境会加载全局配置文件和用户个人配置文件中环境变量.每个脚本文件都有自己的Shell环境。
3.2 shell工作环境分类
- 交互式shell
与用户进行交互,互动.效果就是用户输入一个命令,Shell环境立刻反馈响应
- 非交互式shell
不需要用户参与就可以执行多个命令.比如一个脚本文件含有多个命令,直接执行并给出结果
登录Shell与非登录Shell环境
- shell登录环境: 需要用户名/密码登录shell环境
- shell非登录环境: 不需要用户名,密码进入的shell环境 或 执行脚本文件
注意:不同的工作环境加载环境变量流程不一样
cat /etc/passwd //可以查看用户列表
3.3 环境变量初始化流程
3.4 加载流程测试
在执行一个脚本文件时可以指定具体Shell环境进行执行脚本文件,这个就是切换Shell环境执行脚本
- shell登录环境执行脚本文件语法:
sh/bash -l/--login 脚本文件
先加载Shell登录环境流程初始化环境变量,再执行脚本文件
- shell非登录环境执行脚本文件语法:
bash #加载shell非登录环境
sh/bash 脚本文件 #直接执行脚本文件
先执行加载Shell非登录环境流程初始化环境变量,再执行脚本文件
3.5 如何识别shell登录环境与非登录环境
echo $0
- 输出 -bash 代表: shell登录环境
- 输出 bash 代表: shell非登录环境
注意: 这个 $0 环境变量如果用在子shell中(shell脚本文件)输出Shell脚本本身的文件名
bash进入非登录环境
bash
3.6 shell登录环境与非登录环境切换
①直接登录 # -bash shell登录环境
②su 用户名 --login 或 su 用户名 -l #-bash shell登录环境
su 用户名 #非登录环境
③bash切换
bash #非登录环境
bash -l 脚本文件 或 bash --login 脚本文件 #登录环境
sh -l 脚本文件 或 sh --login 脚本文件 #登录环境