[000-01-001].第06节:Shell环境变量深入学习

1、Shell环境变量深入:加载流程原理介绍

本节目标

  • 1.能够说出交互式Shell与非交互式Shell
  • 2.能够说出登录Shell与非登录Shell环境

1.1.Shell工作环境介绍

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

1.2.shell工作环境分类

a.交互式与非交互式shell

  • 交互式Shell:与用户进行交互, 互动. 效果就是用户输入一个命令, Shell环境立刻反馈响应.
  • 非交互式Shell:不需要用户参与就可以执行多个命令. 比如一个脚本文件含有多个命令,直接执行并给出结果

1.3.登录Shell与非登录Shell环境:

类型名称 含义
shell登录环境 需要用户名\密码登录的Shell环境
shell非登录环境 不需要用户名,密码进入的Shell环境 或 执行脚本文件

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


1.4.环境变量初始化流程

  • 1.全局配置文件
    /etc/profile
    /etc/profile.d/*.sh
    /etc/bashrc
  • 2.个人配置文件
    当前用户/.bash_profile
    当前用户/.bashrc

2、Shell环境变量深入:加载流程测试

本节目标

  • 理解Shell环境变量的加载流程测试
  • 能够知道环境变量应该配置在哪里

切换Shell环境执行脚本文件含义就是:在执行一个脚本文件时可以指定具体Shell环境(登录或非登录状态执行shell脚本文件)进行执行脚本文件, 这个就是切换Shell环境执行脚本

2.1.Shell登录环境执行脚本文件语法

shell 复制代码
sh/bash -l/--login 脚本文件

含义: 先加载Shell登录环境流程初始化环境变量, 再执行脚本文件


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

shell 复制代码
bash # 加载Shell非登录环境
sh/bash 脚本文件 # 直接执行脚本文件

含义: 先执行加载Shell非登录环境流程初始化环境变量, 再执行脚本文件


2.3.案例测试

a.需求

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

b.演示:

  • 1.编辑/etc/profile:vim /etc/profile, 增加环境变量,编辑添加如下内容,保存退出

  • 2.编辑/root/.bashrc:vim .bashrc, 编辑.bashrc文件,增加环境变量VAR2=VAR2

  • 3.创建demo1.sh文件, 添加如下内容,读取环境变量数据进行打印

  • 4.执行1:直接执行脚本文件:bash demo1.sh

    直接执行脚本文件, 即没有加载登录Shell环境变量, 也没有加载非登录Shell环境变量

  • 5.执行2:先加载非登录Shell环境变量, 然后执行脚本文件:

    shell 复制代码
    bash
    bash demo1.sh
  • 6.执行3:先加载登录Shell环境变量, 然后执行脚本文:bash -l demo1.sh

    Shell登录环境会加载文件 etc/profile当前用户/.bashrc 的环境变量数据


2.4.总结:

a.Shell环境变量初始化加载原理过程

分类 初始化环境变量过程执行文件顺序
shell登录环境初始化过程 /etc/profile--》/etc/profile.d/*.sh--》~/.bash_profile--》~/.bashrc--》/etc/bashrc
shell非登录环境初始化过程 ~/.bashrc--》/etc/bashrc--》/etc/profile.d/*.sh

b.那么以到底将环境变量定义到哪里呢?/etc/profile与/etc/bashrc的区别?

  • 1.需要登录的执行的shell脚本读取的环境变量配置在:/etc/profile、/当前用户/.bash_profile
  • 2.不需要登录的用户执行的shell脚本读取的环境变量配置在:/当前用户/.bashrc、/etc/bashrc

3、Shell环境变量深入:识别Shell环境类型

理解如何识别shell登录环境与非登录环境


3.1.语法

  • 1.使用$0识别环境语法
shell 复制代码
echo $0

1.输出 -bash 代表:shell登录环境

2.输出 bash 代表: shell非登录环境

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

  • 2.bash命令语法
shell 复制代码
bash

bash命令:用于切换为Shell非登录环境


3.3.演示

  • 1.直接登录linux系统使用如下命令效果

bash命令将当前环境转换为Shell非登录环境


4、Shell环境变量深入:详细切换Shell环境

本节目标:理解切换shell环境的命令


4.1.切换shell环境命令介:

  • 1.直接登录加载shell登录环境
  • 2.su切换用户加载Shell登录与Shell非登录环境
  • 3.bash加载Shell登录与Shell非登录环境

4.2.切换Shell环境命令方式:

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

1.方式:

  • 1.直接在虚拟机上使用用户名与密码登录linux系统或使用客户端直接连接远程linux系统

b.切换环境方式2:su切换用户登录

1.语法1

shell 复制代码
su 用户名 --login 
或
su 用户名 -l
 # 切换到指定用户, 加载Shell登录环境变量

2.语法2

shell 复制代码
su 用户名  
# 切换到指定用户,  加Shell非登录环境变量

c.切换环境方式3:bash切换

1.语法1:

shell 复制代码
bash  # 加载【Shell非登录环境】

2.语法2:

shell 复制代码
bash -l  Shell脚本文件 /  bash --login shell脚本文件
sh -l shell脚本文件 / sh --login shell脚本文件
# 先加载【Shell登录环境】然后运行指定Shell脚本文件

4.3.切换Shell环境命令方式演示:

a方式1:演示:

  • 1.虚拟机本地直接登录演示
    - 2.客户端远程采用SSH登录演示

b.方式2演示

  • 1.创建普通用户userA
shell 复制代码
useradd -m userA
  • 2.以Shell登录环境执行切换到用户userA,输出环境变量$0,输出 -bash 说明当前为Shell登录环境
  • 3.使用exit退出userA
  • 4.以Shell非登录环境执行切换到用户userA,输出环境变量$0,输出 bash 说明当前为Shell非登录环境

c.方式3演示

  • 1.使用bash执行test.sh脚本文件,发生错误说明当前环境为Shell非登录环境
相关推荐
Lary_Rock44 分钟前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
云飞云共享云桌面3 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
Peter_chq3 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
一坨阿亮4 小时前
Linux 使用中的问题
linux·运维
dsywws5 小时前
Linux学习笔记之vim入门
linux·笔记·学习
幺零九零零6 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
小林熬夜学编程7 小时前
【Linux系统编程】第四十一弹---线程深度解析:从地址空间到多线程实践
linux·c语言·开发语言·c++·算法
程思扬8 小时前
为什么Uptime+Kuma本地部署与远程使用是网站监控新选择?
linux·服务器·网络·经验分享·后端·网络协议·1024程序员节
sun0077008 小时前
拷贝 cp -rdp 和 cp -a
linux·运维·服务器
wowocpp8 小时前
ubuntu 22.04 server 安装 anaconda3
linux·运维·ubuntu