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

news2024/11/16 21:28:20

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登录环境执行脚本文件语法

sh/bash -l/--login 脚本文件

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


2.2.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环境变量, 然后执行脚本文件:

    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识别环境语法
echo $0

1.输出 -bash 代表:shell登录环境
2.输出 bash 代表: shell非登录环境
3.注意:这个 $0 环境变量如果用在子shell中(shell脚本文件)输出Shell脚本本身的文件名

  • 2.bash命令语法
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

su 用户名 --loginsu 用户名 -l
 # 切换到指定用户, 加载Shell登录环境变量

2.语法2

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

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

1.语法1:

bash  # 加载【Shell非登录环境】

2.语法2:

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
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非登录环境
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2085853.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【项目篇】WS2812 炫彩LED灯驱动笔记(C51/STM32)

优信电子:51系列驱动WS2812 3528 幻彩雾状 贴片式发光二极管 XL-3528RGBW-WS2812B C51 驱动 使用 C51 单片机(如 8051 系列)驱动 WS2812 全彩 LED 需要仔细考虑 WS2812 的时序要求,因为 WS2812 使用的是单线通信协议,而 8051 系…

JavaEE(2):前后端项目之间的交互

现在,在网页中通过超链接,表单就可以向后端发送请求,后端也可以正常响应内容。 以前通过表单访问后端的请求方式称为同步请求 同步请求 当网页与后端交互时,前端不能再进行其他操作 服务器端响应回来的内容,会把整个浏…

1895. 二分查找右侧边界

代码 #include<bits/stdc.h> using namespace std; int a[100010],n,q; int yc(int x) {int l1,rn,mid;while(l<r){mid(lr)/2;if(x<a[mid]) rmid-1;else if(x>a[mid]) lmid1;}if(a[l-1]x) return l-1;else return -1; } int main() {int i,x;cin>>n;for(…

迷雾大陆游戏辅助:VMOS云手机强势辅助宠物推荐!

在《迷雾大陆》游戏中&#xff0c;选择合适的宠物是提升战斗力的关键。通过使用VMOS云手机&#xff0c;你可以体验到更为顺畅的游戏过程。VMOS云手机为《迷雾大陆》专门定制了专属的云手机版本&#xff0c;内置游戏安装包&#xff0c;不需要重新下载安装。此外&#xff0c;VMOS…

第一次使用Visual Studio社区版

由于C代码的需要&#xff0c;我开始尝试使用VS。 下载 下载地址&#xff1a;https://visualstudio.microsoft.com/zh-hans/downloads/ 网上关于专业版的教程较少&#xff0c;所以我猜测需求不大&#xff0c;于是我也下载社区版。 安装地址&#xff1a; &#xff08;工作负荷…

从 7000 余项目脱颖而出,飞轮科技《新一代实时分析数据仓库解决方案》荣获 HICOOL 2024 全球创业大赛二等奖

HICOOL 2024 全球创业者峰会于 2024 年 8 月 23 日 -25 日 在中国国际展览中心&#xff08;顺义馆&#xff09;成功举行&#xff0c;峰会以“新质引领 创新共融”为主题&#xff0c;聚焦技术创新、产业融合、新质共享与国际合作四大要素。 在 8 月 23 日晚的峰会开幕式上&…

一文速学-零成本与数据沟通NL2SQL的概念和实现技术

前言 关于NL2SQL的技术&#xff0c;如果大家最近有关注AI圈的话&#xff0c;或多或少都有所了解。其实很多业务场景下&#xff0c;于用户而言更多的是想要获取到最终数据的呈现效果&#xff0c;关于数据是如何获取得到的学习成本&#xff0c;是尽可能越少越好。众所周知当学习…

零知识证明-椭圆曲线(四)

前言 零知识证明(Zero—Knowledge Proof)&#xff0c;是指一种密码学工具&#xff0c;允许互不信任的通信双方之间证明某个命题的有效性&#xff0c;同时不泄露任何额外信息 上章介绍了基础数字知识&#xff0c;这章主要讲 椭圆曲线 方程 2&#xff1a;椭圆曲线方程 y2axybyx3…

知乎知+和信息流广告报价,知乎推广多少钱?

知乎作为中国领先的问答社区&#xff0c;凭借其高质量的内容和庞大的用户群体&#xff0c;已成为众多品牌竞相追逐的营销高地。如何在知乎平台上精准投放广告&#xff0c;实现品牌价值的最大化&#xff0c;成为了众多企业面临的难题。云衔科技&#xff0c;作为数字化营销解决方…

基于MATLAB的涡流函数方法案例+代码

前言 这里介绍一下相关理论和代码----基于MATLAB使用伪谱离散化 三阶龙格库塔时间积分实现涡流函数方法的CFD案例 1. 代码详解 这段 MATLAB 代码实现了一个二维湍流模拟&#xff0c;使用伪谱法在周期性边界条件下解算非线性涡度-流函数方程&#xff1a; M 256; % number o…

驱动开发系列14 - Wayland 详解

目录 一:概述 二:操作系统如何支持 Wayland 三:显卡驱动如何支持 Wayland 四:Wayland 协议介绍 一:概述 Wayland 是一种通信协议,规定了显示服务器与其客户端之间的通信,以及该协议的 C 语言库实现。使用 Wayland 协议的显示服务器称为 Wayland 合成器,因…

SpringBoot项目中mybatis执行sql很慢的排查改造过程(Interceptor插件、fetchSize、隐式转换等)

刚入职公司&#xff0c;就发现公司项目跑sql特别慢&#xff0c;差不多一万条数据插入到数据库要5秒以上&#xff08;没有听错&#xff0c;就是这个速度&#xff09;&#xff0c;查询修改删除也是特别慢。直到22年年底实在是受不了了&#xff0c;我就去排查了一下。 用的是Oracl…

大模型之二十八-语音识别Whisper进阶

在上一篇博客大模型之二十七-语音识别Whisper实例浅析中遗留了几个问题&#xff0c;这里来看一下前两个问题。 1.如果不是Huggingface上可以下载的数据该怎么办&#xff1f; 2.上面的代码是可以训练了&#xff0c;但是训练的时候loss真的会和我们预期一致吗&#xff1f;比如如下…

【netty系列-08】深入Netty组件底层原理和基本实现

Netty系列整体栏目 内容链接地址【一】深入理解网络通信基本原理和tcp/ip协议https://zhenghuisheng.blog.csdn.net/article/details/136359640【二】深入理解Socket本质和BIOhttps://zhenghuisheng.blog.csdn.net/article/details/136549478【三】深入理解NIO的基本原理和底层…

第一个go程序

package main import "fmt" func main(){fmt.Println("Hello World") }hello.go所在目录 运行go程序

美团代付多模版三合一源码 附教程

简介 美团代付多模版三合一源码 附教程 界面

这一轮医疗数字化,沃可趣以医疗专业人员交流成长为中心

沃可趣看见医疗行业人员需求痛点&#xff0c;量身打造数字服务平台&#xff0c;促进知识分享&#xff0c;赋能活动组织。 从电子病历的普及到远程医疗的兴起&#xff0c;从人工智能辅助诊断到大数据在医疗管理中的应用&#xff0c;科技进步正在大力推动医疗领域的发展。然而&a…

Ubuntu系统本地搭建WordPress网站并一键发布内网站点至公网实战

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

嵌入式技术文件、学习资料、在线工具、学习网站、技术论坛,非常全面的分享~~~

一、数据手册查询及下载网站 1、【ALLDATASHEET 自称是最大的在线电子元件数据的搜索引擎】ALLDATASHEETCN.COM - 电子元件和半导体及其他半导体的数据表搜索网站。电子元件和半导体, 集成电路, 二极管, 三端双向可控硅 和其他半导体的https://www.alldatasheetcn.com/ 2、【…

defineProps、defineEmits、 defineExpose的TS写法

小满视频 1 defineProps&#xff1a;父向子传递数据 作用&#xff1a;父组件向子组件传递数据 1.1 传递纯类型参数的方式来声明 父组件中的代码&#xff1a; 父组件App.vue <template><div><span>传递给子组件的响应式数据&#xff1a;</span>&l…