Shell环境变量深入了解_shell脚本获取环境变量-程序员宅基地

技术标签: Shell脚本语言  linux  

目录

 

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

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

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

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

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


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

目标

理解Shell环境变量的加载流程测试

能够知道环境变量应该配置在哪里

切换Shell环境执行脚本文件介绍

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

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

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

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

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

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

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

测试案例

需求

Shell登录环境会运行/etc/profile

Shell非登录环境会运行/.bashrc

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

分析

  1. 清理工作, 清理/etc/profile文件中VAR1环境变量进行删除, 并且重载这个配置文件

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

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

  4. 创建demo1.sh文件, 读取环境变量数据进行打印

    # 输出环境变量VAR1
    # 输出环境变量VAR2
  5. 以Shell非登录环境执行demo1.sh脚本文件, 观察只会输出VAR2, 不会输出VAR1

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

演示

编辑/etc/profile文件

gedit /etc/profile

编辑添加如下内容,保存退出

在root目录下,编辑.bashrc文件

gedit .bashrc

编辑添加如下最后2行内容,保存退出

创建文件demo1.sh

touch demo1.sh

编辑文件demo1.sh,添加如下内容

#!/bin/bash
echo $VAR1
echo $VAR2

直接执行脚本文件

bash demo1.sh

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

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

bash
bash demo1.sh

 

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

所以这里会输出VAR2的环境变量数据

先加载登录Shell环境变量, 然后执行脚本文件

bash -l demo1.sh

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

所以这里会输出VAR1和VAR2的环境变量数据

小结

1、Shell环境变量初始化加载原理过程

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

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

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

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


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

目标

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

语法

使用$0识别环境语法

echo $0

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

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

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

bash命令语法

bash

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

分析

1、直接登录系统为shell登录环境输出 $0 观察输出信息效果

2、使用 bash 命令切换为shell非登录环境输出 $0 观察输出信息效果

3、创建test.sh脚本文件,编辑添加输出 $0 ,编程保存完成后执行test.sh脚本文件观察输出信息效果

小结

1、如何识别shell登录环境与非登录环境?

$0 用于获取当前Shell环境的类型,  bash代表Shell非登录环境, -bash 代表Shell登录环境
# $0不可以在脚本文件中使用, 因为代表获取脚本文件名字


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

目标

理解切换shell环境的命令

切换shell环境命令介绍

  1. 直接登录加载shell登录环境

  2. su切换用户加载Shell登录与Shell非登录环境

  3. bash加载Shell登录与Shell非登录环境

切换环境方式:bash切换

命令

语法1:

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

语法2:

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

分析

使用bash执行test.sh脚本文件,发生错误说明当前环境为Shell非登录环境

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_21402983/article/details/124082043

智能推荐

android 代码 截取屏幕,如何以编程方式在Android上截取屏幕截图?-程序员宅基地

文章浏览阅读346次。这是允许我的屏幕截图存储在SD卡上的代码,以后用于满足您的任何需求:首先,您需要添加适当的权限来保存文件:这是代码(在Activity中运行):privatevoidtakeScreenshot(){Datenow=newDate();android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss",now);try{//i..._屏幕部分截图android代码

注册表禁用计算机管理,Win7注册表编辑器被管理员禁用的解除方法-程序员宅基地

文章浏览阅读2.7k次。熟悉Win7系统的朋友都知道,注册表编辑器是更改Win7系统设置的好工具。在注册表中可以完成控制面板中不能修改的设置。但是有些用户打开注册表编辑器的时候却被提示,注册表编辑器已被管理员禁用,这是怎么回事呢?如何解除Win7对注册表编辑器的限制呢?一、Win7打开注册表的方法1 Win+R键打开Win7系统的运行,在运行数输入regedit点击确定。二、注册表被禁用解除方法Win7注册表编辑器被管理..._注册表编辑器禁用和解除原因

mysql innodb 源码_【InnoDB源码分析】Redo log-程序员宅基地

文章浏览阅读502次。【版本:mysql-8.0.12】1. Mini Transaction(mtr)InnoDB会将事务执行过程拆分为若干个Mini Transaction(mtr),每个mtr包含一系列如加锁,写数据,写redo,放锁等操作。举个例子:void btr_truncate(const dict_index_t *index) {... ...page_size_t page_size(space-&..._mysql innodb 源代码 解读

matlab背景设置_preferences: path: c:\users\administrator\appdata\-程序员宅基地

文章浏览阅读515次。打开C:\Users\Administrator\AppData\Roaming\MathWorks\MATLAB\R2015b\matlab.prf修改为#MATLAB Preferences#Sat Jul 11 15:54:49 CST 2020Editor.VariableHighlighting.Color=C-6931898EditorMRUSize=I8ReplaceSearchText19=SReplaceSearchText18=SReplaceSearchText17=S_preferences: path: c:\users\administrator\appdata\roaming\mathworks\matlab\c

谁说技术男不浪漫!90后程序员2天做出情绪...-程序员宅基地

文章浏览阅读75次。点击上方[全栈开发者社区]→右上角[...]→[设为星标]点击领取全栈资料:全栈资料9月1日,一则关于#程序员2天做出猫咪情绪识别软件#的话题登上微博热搜,参与阅读的人数达到了82..._程序员自研

解决SpringBoot整合redis下的键值序列化的问题_spring boot redis 查询序列化key-程序员宅基地

文章浏览阅读1.3k次。文章目录思考redis实现键值序列化自定义一个序列化转换器编写redis配置文件编写application.properties编写User类编写controller编写service测试思考为什么键值要序序列化呢?​ 不同平台之间的数据传输,深拷贝,浅拷贝,如果不采用序列化,很容易在传输过程中出现各种错误,无法正常使用Redis的序列化到底是什么?​ 简单的是说 就是 key ..._spring boot redis 查询序列化key

随便推点

JavaSE基础知识(十三)--Java的数组以及数组的初始化_int a1=a[rand.nextint(a.length)];-程序员宅基地

文章浏览阅读1.1k次。Java SE 是什么,包括哪些内容(十三)?本文内容参考自Java8标准数组是相同类型的,用一个标识符名称封装到一起的一个对象引用序列或基本数据类型序列,数组是通过方括号下标操作符[ ]来定义和使用的,要定义一个数组,只需要在类型后面加上一个[ ],并取一个合适的标识符名称即可。上面的内容总共体现在三个方面:⑴、数组内的数据类型必须是同一类型,也就是说在一个数组内不能同时存储不同数据类型..._int a1=a[rand.nextint(a.length)];

计算机专业2016高考录取分数线,华南师范大学计算机类专业2016年在广东理科高考录取最低分数线...-程序员宅基地

文章浏览阅读129次。类似问题答案华南师范大学计算机类专业2015年在广东理科高考录取最低分数线学校 地 区 专业 年份 批次 类型 分数 华南师范大学 广东 计算机类 2015 一批 理科 612 学校 地 区 专业 年份 批次 类型 分数 华南师范大学 广东 计算机类 2016 一批 理科 563 华南师范大学 广东 计算机类 2016 一批 理科 563 华南师范大学 广东 计算机类 2015 一批 理科 612..._华南师范大学广东2016各专业分数线

arm-linux-gnueabihf opencv,opencv3.4.9 + armv7 + arm-linux-gnueabihf交叉编译-程序员宅基地

文章浏览阅读249次。mac上编译 arm linux gnueabi交叉编译工具链toolchaincrosstool-ng 编译和安装 交叉编译工具下载: git clone [email protected]:secularbird/crosstool-ng.git 切换到mac编译分支 git ...Windows平台交叉编译Arm Linux平台的QT5.7库1.准备交叉编译环境 环境说..._gcc-arm-linux-gnueabihf armv7l

mysql数据库dao模式_mysql中DAO模式-程序员宅基地

文章浏览阅读591次。JDBC封装优点:隔离细节降低代码间耦合性提高代码可扩展性和维护性附注:DAO模式提供了访问关系型数据系统所需操作的接口,将数据访问和业务逻辑分开,对上层提供面向对象的数据访问接口.DAO模式实现两层分离:代码间分工明确,数据访问层代码不影响业务逻辑层代码,这也符合单一职能原则,降低了耦合度,提高了代码的可复用性。。隔离了不同的数据库的实现,采用面向接口编程,如果底层数据变化了,如mysql变成了..._mysqldao

Android对数据按照时间排序,Android实现数据按照时间排序-程序员宅基地

文章浏览阅读748次。经常遇见一个列表,两个接口的情况,两个接口属于两个不同的表数据,那么数据拼接回来之后,并不是按照时间排序的,看起来就相当混乱,所以记录一下如何对数据按照时间排序。步骤一:格式化日期public static Date stringToDate(String dateString) {ParsePosition position = new ParsePosition(0);SimpleDateFo..._安卓代码实现聊天记录根据时间排序

华硕固件默认ip,新路由3 newifi d2刷机刷华硕固件教程-程序员宅基地

文章浏览阅读4.9k次。新路由3默认的功能非常的少,所以不刷个好固件简直就是浪费硬件性能,恢复出厂后默认的路由器IP就是192.168.99.1。准备下面几个工具和固件上面工具准备好以后,下面开始刷机:一. 开启固件 SSH1、开启路由器,进入管理界面 (假设路由器 IP 地址是 192.168.99.1)2、 在浏览器中输入 http://192.168.99.1/newifi/ifiwen_hss.html 并进入3..._路由器刷华硕固件之后默认ip