【Linux】环境变量

前言:

上文我们讲到了Linux中进程的切换与进程的优先级 【Linux】进程切换与优先级-CSDN博客

本文我们来讲讲Linux中的环境变量

概念

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

就比如说我们编写的C/C++代码在连接时从来不知道我们所连接的动静态库在哪里,但是照样可以连接成功。其原因就是有环境变量帮助编译器进行查找

环境变量通常具有某些特殊用途,其在系统中还具有全局特性

命令行参数

我们知道中Linux命令中许多命令都是有对应的选项的,不同的选项对应不同的功能。那这个操作是如何实现的呢?

main函数参数

首先,让我们先来讲讲main函数。mian函数可以说是我们接触编程的第一步,但许多人可以对main函数并不了解。

main函数其实是可以有参数的。

复制代码
int main(int argc,char* argv[])

第一个参数,argc:表示命名行参数的数量(包括程序名本身)

第二个参数,argv:是一个字符指针数组,储存了命令行中的每个参数

验证:

复制代码
#include<stdio.h>

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

实现指令选项

复制代码
#include<stdio.h>
#include<string.h>

int main(int argc,char* argv[])
{
    if(argc==2)
    {   
        char* x=argv[1];
        if(strcmp(x,"-a")==0)
            printf("执行-a功能\n");
        if(strcmp(x,"-b")==0)
            printf("执行-b功能\n");
        if(strcmp(x,"-c")==0)
            printf("执行-c功能\n");
    }   
    else
        printf("请使用:-a/-b/-c\n");
}

进程中有一张表:argv表(命令行参数表),利用此表则可以实现命令的选项的功能

认识环境变量

首先我们要执行一个程序,必须先找到它

而环境变量可以帮助我们找到其位置

使用env指令 我们可以查看系统中所有的环境变量 ,也可以使用echo $名称 ,打印对应的环境变量

环境变量的格式为:名称=内容

PATH

我们先来认识一下PATH环境变量

PATH环境变量表示查找指令位置的默认路径,比如当我们执行指令:ls、cd等等指令时,bash就会使用PATH环境变量去找到指令对应的程序并执行。

我们知道系统指令的实现也是C语言,但为什么系统自己的指令可以直接执行,而我们自己写的代码却必须要 "./" 作为前缀才可以执行,PATH环境变量就是关键

理解两个问题:

1.环境变量是如何存储的呢?

bash下会形成一个环境变量表,存放各种各样的环境变量。(上面我们也讲到了bash中有一个命令行参数表,也是就是bash下有两张表)

2.环境变量一开始是从哪里来的?

bash下的环境变量表是重系统配置文件中来的(以下便是配置文件)。

认识更多环境变量

HOME

HOME环境变量,记录的是当前用户的家目录路径

复制代码
root@hcss-ecs-4ce7:~# echo $HOME
/root

SHELL

表示当前使用的shell版本

复制代码
root@hcss-ecs-4ce7:~# echo $SHELL
/bin/bash

USER

表示当前用户是谁

复制代码
root@hcss-ecs-4ce7:~# echo $USER
root

HISTSIZE

表示Linux中记录历史命令的最大数量(既Linux的历史命令最多记录HISTSIZE条)

复制代码
root@hcss-ecs-4ce7:~# echo $HISTSIZE
1000

HOSTNAME

表示当前主机的主机名

复制代码
root@hcss-ecs-4ce7:~# echo $HOSTNAME
hcss-ecs-4ce7

PWD

记录当前所在的工作路径

复制代码
hyc@hcss-ecs-4ce7:~/linux/progress$ echo $PWD
/home/hyc/linux/progress

OLDPWD

记录上一次的工作路径

复制代码
hyc@hcss-ecs-4ce7:~/linux/progress$ echo $OLDPWD
/home/hyc/linux

环境变量的获取方式

指令

env:查看全部的环境变量

echo $xxx:查看某个环境变量

expot:添加环境变量

unset:删除环境变量

代码

调用系统调用:getenv获取环境变量

头文件为:#include<stdlib.h>

返回值:获取成功返回指针,失败返回NULL

复制代码
#include<stdio.h>
#include <stdlib.h>

int main()
{
    char* str=getenv("PATH");                                                                                                                                          
    if(!str)
        printf("获取失败");
    else
        printf("%s\n",str);
}

环境变量特性

1.境变量具有全局性,可以被子进程继承,同一个bash下的进程都可以访问

2.存在本地变量,只能在bash内部使用。如下:i 就是本地变量

3.export添加环境变量,是添加在bash中的,再子进程继承达到全局可用

export命令与其他命令不同:export命令是内键命令 :既不需要创建子进程,bash自己调用函数执行(或系统调用完成)

相关推荐
大树889 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠9 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质9 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush49 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行52010 小时前
Linux 11 动态监控指令top
linux
Inhand陈工10 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智11 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
不会C语言的男孩11 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
shushangyun_11 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
古城小栈11 小时前
Unix 与 Linux 异同小叙
linux·服务器·unix