1. 自定义系统环境变量

1.1 全局配置文件/etc/profile应用场景

当前用户进入Shell环境初始化的时候会加载全局配置文件/etc/profile里面的环境变量, 供给所有Shell程序使用

以后只要是所有Shell程序或命令使用的变量, 就可以定义在这个文件中

1.2 案例

/etc/profile定义存储自定义系统级环境变量数据

1.2.1 创建环境变量步骤

  1. 编辑/etc/profile全局配置文件
   # 增加命令: 定义变量VAR1=VAR1 并导出为环境变量
# 扩展: vim里面的命令模式使用G快速定位到文件末尾位置, 使用gg定位到文件首行位置
  1. 重载配置文件/etc/profile, 因为配置文件修改后要立刻加载里面的数据就需要重载, 语法
   source /etc/profile
  1. 在Shell环境中读取系统级环境变量VAR1

1.2.2 步骤实现

1、编辑/etc/profile文件

vim /etc/profile

2、添加设置变量VAR1=VAR1并导出成为环境变量, 在/etc/profile文件末尾添加如下命令

# 创建环境变量
VAR1=VAR1
export VAR1

3、保存/etc/profile退出

4、重新加载/etc/profile文件数据更新系统环境变量

source /etc/profile

注意:如果这一步不执行,无法读取更新的环境变量

5、输出环境变量VAR1

echo $VAR1

2. 加载流程介绍

2.1 Shell工作环境介绍

用户登录系统时,Shell为用户定义了工作环境,工作环境提供了共享数据环境变量,比如shell解析器类型、主机名等,这些数据存储在环境变量中,便于shell脚本程序操作使用;

2.2 shell工作环境分类

交互式与非交互式shell

  1. 交互式Shell

是shell的一种运行模式,交互式shell等待你输入命令,并且立即执行,然后将结果反馈给你。这是每个CLI用户都非常熟悉的流程:登录、执行一些命令、登出。当你登出后,这个shell就终止了。

  1. 非交互式Shell

是shell的另一种运行模式,它专门被用来执行预先设定的命令。在这种模式下,shell不与用户进行交互,而是读取存放在脚本文件中的命令并执行它们。当它读到文件的结尾,这个shell就终止了。

登录Shell与非登录Shell环境

类型名称 含义
shell登录环境 需要用户名、密码登录之后才能进入的shell
shell非登录环境 直接不用输入用户名和密码就可以打开的shell
或调用子Shell时使用的工作环境

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

2.3 环境变量加载流程介绍

3. 环境变量加载流程测试

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

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

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

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

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

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

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

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

3.2 案例

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

3.2.1 分析

1、编辑/etc/profile文件,添加环境变量VAR1=VAR1

2、编辑/当前用户/.bashrc文件,添加环境变量VAR2=VAR2

3、创建demo1.sh脚本文件,并编辑文件输出VAR1、VAR2两个变量

4、直接执行demo1.sh脚本文件, 观察什么也没有输出

5、加载Shell非登录环境变量, 观察VAR2输出, VAR1没有输出

6、加载Shell登录环境变了, 观察VAR1,VAR2都有输出

3.2.2 执行过程

编辑/etc/profile文件

vim /etc/profile

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

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

vim .bashrc

添加最后两行内容

创建文件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的环境变量数据

3.2.3 总结

  • 登录执行的Shell的环境变量
/etc/profile(推荐)
/当前用户/.bash_profile
  • 非登录执行的Shell环境变量
/当前用户/.bashrc (当前用户)
/etc/bashrc (全局)

4.识别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脚本文件观察输出信息效果

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

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

$0识别Shell环境不能用在脚本文件中

5. 退出Shell环境

logout命令语法

logout

logout命令: 用于退出Shell登录环境

exit命令语法

exit

exit命令: 用于退出Shell登录或非登录环境

区别

logout 只能退出Shell登录环境

exit 可以退出Shell登录与非登录环境

6.详细切换Shell环境

  1. 直接登录系统

    直接在虚拟机上使用用户名与密码登录linux系统或使用客户端直接连接远程linux系统,直接就是登录Shell环境

  2. su切换用户登录

    语法1
su 用户名 --login

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

语法2

su 用户名
# 切换到指定用户, 加Shell非登录环境变量
  1. 语法1
su 用户名 --login

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

语法2

su 用户名
# 切换到指定用户, 加Shell非登录环境变量
  1. bash切换
bash  # 加载【Shell非登录环境】

语法2:

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

03-Shell环境变量深入的更多相关文章

  1. shell 环境变量的相关配置文件和配置方法

    shell 环境变量的相关配置文件和配置方法: bash 的配置文件: 全局配置: /etc/profile, /etc/profile.d/*.sh, /etc/bashrc 个人配置 ~/.bas ...

  2. Linux编程 12 (默认shell环境变量, PATH变量重要讲解)

    一 .概述 默认情况下, bash shell会用一些特定的环境变量来定义系统的环境.这些默认环境变量可以理解是上篇所讲的系统全局环境变量. 1.1 bash  shell支持的Bourne变量 Bo ...

  3. Linux SHELL,环境变量

    SHELL: 在计算机科学中,Shell俗称壳(用来区别于核),是指"提供使用者使用界面"的软件(命令解析器).它类似于DOS下的command和后来的cmd.exe.它接收用户命 ...

  4. 常见linux命令释义(第六天)——shell环境变量

    太懒了,这几天好像得了懒癌,一点都不想写博客.后来想想,知识嘛,还是分享出来的好.第一治自己的懒癌:第二顺便巩固下自己的知识. Linux的变量分为两种,一种是系统变量,是系统一经启动,就写进内存中的 ...

  5. Shell 环境变量 & 参数变量

    环境变量 $HOME 当前用户的家目录 $PATH 以冒号分隔的用来搜索命令的目录列表 $PS1 命令提示符,通常是$字符,但在bash中,可以使用一些更复杂的值.例如,字符串[\u@\h \w]$就 ...

  6. 关于shell环境变量的思考

    shell中执行sh文件时需要开子进程,因此export的环境变量在子进程中,若想要sh中定义的脚本生效,使用source命令,并且可以被子进程继承.而子进程export的内容父进程获取不到

  7. linux(4) vi编辑/删除、复制、粘贴 /bash shell 环境变量设置/数据流重定向 | 的用法

    一.vi文字处理器1.vi与vimvi:文字处理器vim:程序开发工具2.vi介绍三种模式:一般模式(vi刚进入的,不可编辑),编辑模式(按i后,左下方是insert)和命令行模式(按esc退出,:w ...

  8. shell 环境变量

    Ubuntu系统设置的环境变量 .profile .bashrc 在 .profile中 有一段代码: if [ -d "$HOME/bin" ] ; then PATH=&quo ...

  9. Linux Crontab内环境变量与Shell环境变量的关系及解决问题的办法

    为了定时监控Linux系统CPU.内存.负载的使用情况,写了个Shell脚本,当达到一定值得时候,发送邮件通知.需要用到Crontab的定时任务去执行这个脚本,但是发现通过命令(./test.sh)执 ...

  10. Linux下crontab内环境变量与Shell环境变量的关系【转】

    crontab,总是不会缺省的从用户profile文件中读取环境变量参数 经常导致在手工执行某个脚本时是成功的,但是到crontab中试图执行时就会报错. 解决办法如下: 方法一:在shell文件中获 ...

随机推荐

  1. 印能捷添加了加密进程导出的pdf文件不加密(rename的类型未添加)

    解决方法:用procmon监控下图的所有文件事件,查找rename的类型,然后右键SetRenameInfo点击Include,将查出来的类型添加到加密后缀中,如下图是一个无后缀的类型需要添加\NOE ...

  2. Python——Html(内联框架<iframe>)

    <iframe>(内联框架)是 HTML 中的一个标签,用于在当前文档中嵌入另一个文档.它提供了一种将一个 HTML 文档嵌套到另一个文档的方式,允许在一个页面中显示另一个页面的内容.以下 ...

  3. Python脚本猜解网站登录密码(带token验证)

    目录: 关键代码解释 设置请求头 get_token函数获取token值 完整代码: 运行结果: 上一篇文章:一个简单的Python暴力破解网站登录密码脚本 测试靶机为Pikachu漏洞练习平台暴力破 ...

  4. 从0开始学微信逆向开发(android版)——第一栏

    首先给大家普及一下啥叫微信逆向开发,以及微信逆向开发能做什么: 场景1:小明是做微商的,他每天需要加很多很多的好友.然后他会通过微信的各种渠道去添加好友,比如(附近的人.摇一摇.漂流瓶.手机号搜索等) ...

  5. 2023-09-13:用go语言,给定一个整数数组 nums 和一个正整数 k, 找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。 输入: nums = [4, 3, 2, 3, 5,

    2023-09-13:用go语言,给定一个整数数组 nums 和一个正整数 k, 找出是否有可能把这个数组分成 k 个非空子集,其总和都相等. 输入: nums = [4, 3, 2, 3, 5, 2 ...

  6. 2021-01-16:我截获了登录token的话,是不是就获得了登录状态,这样就不安全了。如何保证安全?

    福哥答案2021-01-06: 知乎答案: 首先,Token 一般放在 Header 或者 Cookies 中,Http 是明文传输,Https 是密文传输.可以一定程度防止Token 截获. 第二, ...

  7. LeetCode DP篇-背包问题(416、518)

    416. 分割等和子集 给定一个只包含正整数的非空数组.是否可以将这个数组分割成两个子集,使得两个子集的元素和相等. 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: ...

  8. C# 将Excel转为OFD、UOS

    本文以C#及VB.NET代码为例展示如何将Excel工作簿转换为OFD和UOS格式.通过workbook.LoadFromFile(string fileName)方法加载Excel源文档后,然后调用 ...

  9. 十八般武艺玩转GaussDB(DWS)性能调优:Plan hint运用

    摘要:本文介绍GaussDB(DWS)另一种可以人工干预计划生成的功能--plan hint. 前言 数据库的使用者在书写SQL语句时,会根据自己已知的情况尽力写出性能很高的SQL语句.但是当需要写大 ...

  10. OCR性能优化:从认识BiLSTM网络结构开始

    摘要: 想要对OCR进行性能优化,首先要了解清楚待优化的OCR网络的结构,本文从动机的角度来推演下基于Seq2Seq结构的OCR网络是如何一步步搭建起来的. 本文分享自华为云社区<OCR性能优化 ...