2022-06-22-Shell系列02丨 shell环境变量深入

一.自定义系统环境变量

1.创建环境变量步骤

1.1 系统级全局配置文件:/etc/profile

1.2 设置环境变量

# 写入要设置的环境变量,建议变量名全部大写
export VAR_NAME=VALUE

1.3 加载修改好的数据,重载配置文件

source /etc/profile

二.加载流程原理介绍

1.shell工作环境介绍

用户进入linux系统就会初始化shell环境,这个环境会加载全局配置文件和用户个人配置文件中的环境变量。每个脚本文件都有自己的shell环境。

2.shell工作环境分类

  • 交互式shell

需要用户参与互动的shell环境,用户输入一个命令,环境就立刻响应结果。

  • 非交互式shell

不需要用户参与就可以执行多个命令,比如一个脚本文件含有多个命令,直接执行并给出结果。

3.登录shell与非登录shell环境

shell登录环境:需要用户名、密码登录的shell环境

shell非登录环境:不需要用户名、密码进入shell环境,或执行脚本文件

  • 注意:不同的工作环境加载环境变量流程不一样

4.环境变量初始化

4.1 全局配置文件

/etc/profile
/etc/profile.d/*.sh
/etc/bashrc

4.2 个人配置文件

当前用户:~/.bash_profile
当前用户:~/.bashrc

环境变量加载初始化过程:

20220711234144

四.加载流程测试

1.切换shell环境执行脚本文件介绍

在执行一个脚本文件时可以指定具体shell环境进行执行脚本文件,这个就是切换shell环境执行脚本

2.shell登录环境执行脚本文件语法

sh/bash -l/--login 脚本文件
  • 含义:先加载shell登录环境流程初始化环境变量,再执行脚本文件

    3.shell非登录环境变量执行脚本文件语法

bash # 加载shell非登录环境
sh/bash 脚本文件  # 直接执行脚本文件
  • 含义:先执行加载shell非登录环境流程初始化环境变量,再执行脚本文件

20221206220828

4.案例演示

1.需求

shell登录环境会运行/etc/profile,shell非登录环境会运行./bashrc,在/etc/profile与当前用户./bashrc文件分别设置环境变量数据,然后在shell脚本文件中输出环境变量数据,最后切换不同环境执行shell脚本文件观察验证上面的流程运行。

2.分析

1.编辑/etc/profile,增加环境变量VAR1=VAR1

2.编辑/root/.bashrc,增加环境变量VAR2=VAR2

3.创建demo1.sh,作用是读取环境变量数据进行打印

# 输出环境变量VAR1
# 输出环境变量VAR2

4.以shell非登录环境执行demo1.sh脚本文件,观察只会输出VAR2,不会输出VAR1

5.以shell登录环境执行demo1.sh脚本文件,观察会输出VAR1和VAR2

3.环境变量定义到哪里呢?/etc/profile和/etc/bashrc的区别?

需要登陆的执行shell脚本读取的环境变量配置在:/etc/profile/当前用户/.bash_profile

不需要登陆的用户执行的shell脚本读取的环境变量配置在:/当前用户/.bashrc/etc/bashrc

五.识别shell环境类型

1.目标

理解如何识别shell登陆环境和非登陆环境

2.语法

使用$0识别环境语法

echo $0

输出 -bash 代表: shell登陆环境

输出 bash 代表: shell非登陆环境

注意: 这个$0 环境变量如果用在子shell中(shell脚本文件)输出shell脚本本身的文件名

bash命令语法

bash 用于切换为shell非登录环境

六.详细切换shell环境

1.切换环境方式

  • 切换环境方式1:直接登录系统

  • 切换环境方式2:su 切换用户登陆

# 切换到指定用户,加载shell登录环境变量
su username --login
or
su username -l

# 加载非登录环境变量
su username
  • 切换环境方式3:bash 切换