linux环境变量

环境变量

1. 环境变量

1.1 环境变量的概念

1. 什么是环境变量

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数

2. 为什么会有环境变量

linux操作系统中, 我们可以直接执行ll等其他指令, 但是对于自己写的程序, make后生成文件, 必须要 . /文件 才能执行。对于执行一个指令来说,我们知道,指令事实上也是一种文件,对于执行这个文件,我们就需要先找到这个文件,在将这个文件执行。而对于ll来说,其对应的文件事实上已经是Linux系统分配到全局的,也就是在默认路径(根目录),因此不需要指定路径搜索这个指令对应的文件,直接ll就代表从根目录查找从而执行。而对于make生成的程序,我们知道这个可执行程序是在当前路径下,并不在根目录中,因此我们也就无法直接输入文件名从而执行,而是需要找到这个文件对应的路径再去执行,因此 ./就代表着当前路径,而./此文件就代表找到这个文件的路径并且去执行它!

如下:

在这里插入图片描述

通过添加环境变量, 我们的程序不用 ./ , 也能直接运行

在这里插入图片描述

1.2 环境变量PATH

为什么能够在系统中找到对应的指令呢?事实上系统中存在一个环境变量PATH,它能够去检索对应的指令,找到了就会去执行,找不到就会像上面一样提示not found,因此我们如果想用另一种方式去直接执行文件,就可以将这个文件路径添加到环境变量PATH中。

在这里插入图片描述

当我们查看PATH变量时,每一个:所间隔的就是一个检索的路径,因此只要把想直接执行的文件的路径也添加到这个里面,就能够检索到从而执行。

可以看到一些系统中的指令例如: ls就是将自己的路径添加到环境变量PATH中

在这里插入图片描述

易错点:

export PATH=/home/yj/107/lesson12 也可以添加到PATH中, 但是PATH中其他路径就被覆盖了, 导致一些系统指令无法执行, 出现这种情况只要重新登录即可恢复过来,因为这些环境变量是保存在内存中的,属于内存中的环境变量。

用法:

export PATH=$PATH:/home/yj/107/lesson12 就可以将这个指令追加到PATH环境变量中。

export: 设置一个新的环境变量

在这里插入图片描述

1.3 常见环境变量

  • PATH : 指定命令的搜索路径
  • HOSTNAME:主机名
  • HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
  • USER:当前用户名
  • SHELL : 当前Shell,它的值通常是/bin/bash。

2. 和环境变量相关的命令

1.echo: 显示某个环境变量值

2.export: 设置一个新的环境变量

3.env: 显示所有环境变量

4.unset: 清除环境变量

5.set: 显示本地定义的shell变量和环境变量

2.1 echo

显示某个环境变量值

在这里插入图片描述

2.2 env

显示所有环境变量

我们通过env命令,就可以显示这些所有的环境变量,事实上是可以通过代码来实现的

在这里插入图片描述

2.3 export命令

export: 设置一个新的环境变量

在这里插入图片描述

2.4 set命令

set: 显示本地定义的shell变量和环境变量

在这里插入图片描述

2.5 unset命令

unset: 取消本地变量和环境变量

在这里插入图片描述

3. 获取环境变量

3.1 全局变量environ

environ 变量是一个char** 类型,存储着系统的环境变量

在这里插入图片描述

在这里插入图片描述

3.2 命令行参数

在这里插入图片描述

在这里插入图片描述

上面演示了几种不同的获取环境变量的方法: 通过命令行参数 envp, 全局变量environ,可是无论哪一种使用都是遍历数组来获取, 能不能直接去获取呢? 可以调用函数去获取

3.3 getenv

推荐的getenv获取环境变量,因为可以指定获取。

在这里插入图片描述

实现自己的pwd

通过getenv获取环境变量PWD, 实现自己的PWD指令:

#include<stdio.h>
#include<stdlib.h>

int main()
{
    char*pwd=getenv("PWD");
    if(pwd==NULL)
        perror("getenv");
    else
        printf("%s\n", pwd);              
    return 0;                                
}                                            

写好后, 这个文件路径添加到环境变量PATH中,就可以实现像pwd一样的功能

在这里插入图片描述

4. 深入理解环境变量

4.1 什么是环境变量

在这里插入图片描述

4.2 环境变量的特点

环境变量是可以被相关子进程继承下去的, 环境变量具有全局性

在这里插入图片描述

如: 定义一个 export hello=“youcanseeme” 相当于把这个环境变量设置进了shell内部

在这里插入图片描述

写代码观察子进程是否继承了这个环境变量

在这里插入图片描述

观察发现子进程继承了这个环境变量

在这里插入图片描述

4.3 本地变量

在这里插入图片描述

通过export可以把这个本地变量添加到环境变量表中

在这里插入图片描述

5. 命令行参数

5.1 什么是命令行参数

大家回想一下,有的编译器中的main函数中存在着这样的参数:

在这里插入图片描述

比如上面的DevC++中,main()中有着整形的argc参数和指针数组的argv参数, 事实上,这两个参数这就是命令行参数。

参数介绍

argc保存命令行的选项数目, char*argv[]和环境变量一样也是一张表结构, 保存命令行选项的地址

在这里插入图片描述

我们可以发现,所打印的结果,就是对应的命令行中的命令以及选项

在这里插入图片描述

第三个参数: 可以用来获取环境变量

char*envp[] 本质是一个指针数组,因为环境变量实际上也都是一个个的字符串,而最后一个字符串(无效内容)实际上就是NULL,因此我们可以在编辑代码时可以用这个作为截止条件:

在这里插入图片描述

5.2 命令行参数的意义

在这里插入图片描述

写1个可以根据不同选项程序执行不同的功能的程序如下:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<stdlib.h>
#include<unistd.h>

//运行程序必须带一个参数选项, 并且可以根据不同选项程序执行不同的功能

 void Usage(const char*name)
{
      printf("\nUsage: %s -[a|b|c]\n\n",name);
      exit(0);    //终止进程
}

    int main(int argc, char*argv[])                                                                                                                     
{
       if(argc != 2) Usage(argv[0]);
 
       if(strcmp(argv[1],"-a")==0)  printf("打印当前目录下的文件\n");
       else  if(strcmp(argv[1],"-b")==0)  printf("打印当前目录下的文件的详细信息\n");
       else  if(strcmp(argv[1],"-c")==0)  printf("打印当前目录下的文件名(包含隐藏文件)\n");
       else printf("其他功能, 待开发\n");
       
       retrun 0;
}

在这里插入图片描述

6. 总结环境变量

通过上面的描述,我们知道,环境变量就是操作系统启动之后将内部内容加载到内存中的变量,也就是全局变量。通过环境变量,我们可以对一些所需要的环境进行配置。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值