目录

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非登录环境

Shell环境变量深入了解相关推荐

  1. Shell环境变量以及set,env,export的区别

    原文连接:http://www.linuxidc.com/Linux/2011-08/40478.htm 一.shell环境变量的分类以及set env export的区别: set:显示(设置)sh ...

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

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

  3. linux系统默认的环境变量path,Linux编程 12 (默认shell环境变量, PATH变量重要讲解)...

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

  4. Linux系统 熟练掌握 shell环境变量

     熟练掌握 shell环境变量      shell就是用户与操作系统内核之间的接口,起着协调用户与系统的一致性和在用户与系统之间进行交互的作用.      shell支持具有字符串值的变量.shel ...

  5. linux 非登录shell自动,Linux登录shell和非登录(交互式shell)环境变量配置

    使用Jenkins执行shell脚本的时候, 碰到command not found. 比如java mvn, 这些环境变量配置在/etc/profile 中, 但jenkins执行的时候并没有加载. ...

  6. python使用shell环境变量_linux中添加环境变量(python为例)

    最近想用Django搭建个人博客,之前学了些python基础语法,准备边学习Django边实战操作.自己有一个阿里云服务器,用的centOS,自带的是python2.7版本,我直接安装了python3 ...

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

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

  8. linux命令之查看当前shell环境变量-env

    linux下运行程序进程经常出现由于环境问题导致的程序找不到动态库的情况,因为一般程序是通过ld_library_path这个环境变量查找用户动态库的. 不过也可以指定用户定义环境变量,还有就是一个叫 ...

  9. 【Linux】Shell三类变量的作用域——linux shell “永久环境变量”、“临时环境变量”和普通变量之完全解读...

    2015-05-08 00:15 3896人阅读 评论(10) 收藏 举报 本文章已收录于: 分类: 软件开发进阶(419) 作者同类文章X Unix/Linux杂项(118) 作者同类文章X 版权声 ...

最新文章

  1. 输出 1-100 内的所有奇数
  2. 强势的老板--项目管理
  3. docker化你的java应用(下)
  4. 【PAT乙级】 1010 一元多项式求导 (25 分)
  5. Oracle教程之管理表(六)--Oracle外部表的管理
  6. 使用cmake安装mysql5.5.13
  7. 自由鸟书评排行网开始上线试运行,欢迎前往评论!
  8. 车联网上云最佳实践(二)
  9. 计算机网络|传输控制协议TCP概述
  10. 解压并安装protobuf库_golang-leaf服务器-protobuf的安装
  11. 我的开源项目:TS封装格式分析器
  12. 在eclipse中使用Github进行单元测试
  13. 「leetcode」 1382. 将二叉搜索树变平衡:【构造平衡二叉搜索树】详解
  14. php手机i选择图片多选,ios 相册图片多选 带预览功能
  15. cad页面布局快捷键_cad设置快捷键(cad快捷键在哪里修改设置)
  16. Java框架全开源商城PC+手机版+微商城独立版+全开源系统源码
  17. 技术经济与企业管理复习知识点总结
  18. 怎么查询服务器是什么操作系统,怎么查服务器什么操作系统
  19. MySQL讲义第 48 讲——select 查询之查询练习(六)
  20. Mybatis 大于小于符号解决

热门文章

  1. SICK LMS 111激光雷达数据读取与分析
  2. 善用并行,让构建倍速进行
  3. 1-2 认识905.4王国的交流规范
  4. 闲话 | 人生,是一场怎样的修行
  5. [小代码]通过IP和端口连接到远程摄像机
  6. VELO3D宣布推出大幅面3D金属打印机Sapphire(R) XC,将生产率提高5倍,同时将成本降低75%
  7. 如何开启APP2SD功能
  8. 764. 输出字符串
  9. 酷炫css3_使用CSS3的6个酷炫图像字幕
  10. 逆波兰计算器(含完整版)