【Linux学习】环境变量

一、环境变量的概念

1. 环境变量的含义

环境变量一般是指操作系统中指定运行环境的一些参数,即系统预定义的参数它相当于一个指针,想要查看变量的值,需要加上“$”符号
环境变量是bash shell的特性,用来存储有关shell会话和工作环境的信息。允许在内存中存储数据,以便运行在shell上的程序和脚本访问。这些数据可以是用来识别用户、系统、Shell的特性以及任何其它需要存储的数据。

2. 环境变量的分类

  1. 按作用的范围分类

在Linux中的变量,可以分为环境变量和本地变量:

环境变量:相当于全局变量,存在于所有的Shell中,具有继承性
本地变量:相当于局部变量,只存在于当前Shell中,本地变量包含环境变量,但非环境变量不具有继承性

  1. 按生存周期分类

永久性环境变量:需要修改配置文件,变量永久生效
暂时性环境变量:使用export定义,关闭Shell后失效

3. 环境变量的组织方式

每个程序都有一张环境表,环境表是一个字符指针数组,每个指针指向一个以 “\0” 结尾的环境字符串。main函数的第三个参数就是环境表的地址

二、常见的环境变量

  1. PATH
    PATH变量指定命令的搜索路径。
    例如:

从中可以看出,在当前目录下,PATH的值。它表示在当前目录下执行的每一条指令的搜索路径,每个目录以冒号隔开。当执行一条指令时,系统就会从系统文件中去寻找,找到了就执行;否则不执行。

  1. HOME
    该变量指定用户的主工作目录,即用户登录到Linux系统时,默认的目录。
  • 普通用户下的工作目录

  • 超级用户下的工作目录

因此我们可以得出一个结论:环境变量是一个变量,它的值随着用户的不同而变化。

  1. HISTSIZE
    该变量查看Linux系统保存历史命令的数目。

    说明当前Linux系统中最多保存10000条历史命令。

  2. LOGNAME
    该变量指定显示当前的用户名。

  3. HOSTNAME
    该变量显示当前主机名称。

  4. SHELL
    该变量显示用户当前使用的解析器。

三、获取或设置环境变量

1. 通过命令获取或设置环境变量

  1. echo
    该命令用于显示某个环境变量的值。
    格式:

echo $【变量名】

  1. env
    该命令显示所有的环境变量。
    例如:
  2. set
    set命令显示本地定义的shell变量和环境变量。
    例如:
  3. export
    export命令指定设置一个新的环境变量。
  • 查看不存在的环境变量:
  • 使用export创建一个新的环境变量:

    【注意】使用export定义的环境变量是暂时性环境变量,关闭Shell后失效。
  1. unset
    unset 命令功能是清除指定的环境变量。
    例如:

  2. readonly
    该命令用于设置只读的环境变量。
    例如:

    【注意】将环境变量设置为只读模式后,就不能对其进行修改或者删除操作,只有直到用户退出之后才会失效。

2. 通过代码获取环境变量

  1. 通过main函数的第三个参数,环境表地址数组指针获取环境变量。
    代码如下:
#include<stdio.h>

int main(int argc, char *argv[], char *env[])
{
    int i = 0;
    for(; env[i]; ++i)
    {
        printf("%s\n", env[i]);
    }
    return 0;
}

结果:

【注意】main函数的三个参数分别是:

  • 第一个参数:argc是个整型变量,表示命令行参数的个数(含第一个参数)。
  • 第二个参数:argv是个字符指针的数组,每一个元素一个字符指针,指向一个字符串。这些字符串就是命令行中的每一个参数(字符串)。
  • 第三个参数:envp是字符指针的数组,数组的每一个原元素是一个指向一个环境变量(字符串)的字符指针。
  1. 通过第三方变量environ获取环境变量
    代码如下:
#include<stdio.h>

int main()
{
    extern char **environ;
    int i = 0;
    for(; environ[i]; ++i)
    {
        printf("%s\n", environ[i]);
    }
    return 0;
}

结果:

3. 通过系统调用获取或修改环境变量

通常用getenv和putenv函数来访问特定的环境变量,而不是用environ变量。但是,如果要查看整个环境,则必须使用environ指针。
例子如下:

#include<stdio.h>
#include<stdlib.h> 
int main()
{
    char *env = getenv("MY_ENV");
    
    printf("%s\n", env);
    return 0;
}

通过代码执行的结果可以得知:利用 " export MY_ENV=200 ",导出的环境变量可以被继承下去;而 " MY_ENV=100 ",导出的本地变量不具有继承性。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

求知.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值