Linux之命令行参数的原理以及实现,环境变量限时增加删除和永久增加删除以及代码获取环境变量

发布于:2024-04-21 ⋅ 阅读:(192) ⋅ 点赞:(0)

个人主页点我进入主页

专栏分类:C语言初阶  C语言进阶  数据结构初阶    Linux    C++初阶    算法

欢迎大家点赞,评论,收藏。

一起努力,一起奔赴大厂

一.命令行参数

1.1main函数参数

        在我们学习c语言时我们的main函数的参数是什么样子的?是空吗?事实上不是,main函数有一些参数,这次我们在这里我们先说两个argc和argv,这两个参数有神魔用呢?我们看代码:

#include<stdio.h>

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

我们编译运行代码,输入指令

./myprocess.exe

可以看到

我们输入

./myprocess.exe -a -b -c

可以看到

1.2为什么这么干

我们回想一下我们在Linux的指令不正是和这个一样吗?例如我们的指令

ls -l -a

 其中ls对应./myprocess.exe ,-l  -a对应-a -b -c等。

有这样的参数我们就可以实现下面的功能:

#include<stdio.h>
#include<string.h>
int main(int argc,char*argv[])
{
    if(argc!=2)
    {
        printf("没有选项\n");
        return 1;
    }
    if(strcmp(argv[1],"-a")==0)
    {
        printf("this is function 1\n");
    }
    else if(strcmp(argv[1],"-b")==0)
    {
        printf("this is function 2\n");
    }
    else if(strcmp(argv[1],"-c")==0)
    {
        printf("this is function 3\n");
    }
    else 
    {
        printf("no this  function \n");
    }
    return 0;
}

其中-a是功能1,-b是功能2....

二.环境变量

 2.1环境变量的引入

        我们是否有这样一个疑问?我们知道Linux中一切皆文件,我们的ls指令相当于一个可执行文件,它在任意的地方就可以提使用,我们编写程序生成的可执行程序却需要指定路径然后执行,这就是是否在环境变量中的区别,在Linux中每一次开机都会将环境变量加载到内存中我们可以输入echo &PATH来看当前的环境变量

echo $PATH

2.2.1环境变量的增添(内存级别)

 如果我们想要添加环境变量需要输入指令例如我们想要将/home/yang/Code中的myprocess.exe增加到环境变量中我们输入指令

PATH=/home/yang/Code

当我再次打印环境变量就可以看到

由于此时的环境变量是内存级的所以我们重新打开我们的xshell就可以恢复以前的及环境变量,我们想要将myprocess.exe加入到环境变量中且不覆盖原来的可以输入指令

sudo cp myprocess.exe /usr/bin

这样我们就可以在任意路径下进行使用这个可执行程序

2.2.2环境变量的删除(内存级别)

我们输入指令

sudo rm -rf /usr/bin/myprocess.exe

我们想要使用myprocess.exe就不可以了。 

2.2.3指令增加和删除环境变量(export和unset)

我们可以使用

export hello=111

来增添环境变量 ,这个环境变量是我们自己创建的,我们可以通过指令

env | grep hello

来查看环境变量 

我们想要删除需要输入指令

unset hello

 

2.2.4创建本地变量

我们输入指令

mmm=1

此时mmm就是我们的本地变量,我们想要吧它加入到环境变量中可以输入指令

export mmm

 

2.2 环境变量的修改(可永久保存)

我们先进入家目录,可以输入指令

cd ~

用vim打开./profile文件,在最后一行加上

export PATH=$PATH:/home/yang/Code

 退出保存,然后重新打开我们的xshell,输入指令

echo $PATH

 我们可以看到有我们的环境变量,此时就可以长久保存,想要恢复删除即可。

2.3环境变量的代码获取

2.3.1extern获取环境变量

#include<stdio.h>
#include<unistd.h>
int main()
{
    extern char**environ;
    for(int i=0;environ[i];i++)
    {
        printf("environ[i]->%s\n",environ[i]);
    }
}

我们运行代码可以看到

这个不正是我们使用env所产生的环境变量吗?

所以环境变量也可以利用代码来获取。

2.3.2main函数获取环境变量

环境变量可以被子进程获取,和我们上面的命令行参数一样,都可以通过父进程给到子进程,main函数的父进程是bash,我们看下面代码

#include<stdio.h>
#include<unistd.h>
int main(int argc,char *argv[],char *env[])
{
    for(int i=0;env[i];i++)
    {
        printf("env[i]->%s\n",env[i]);
    }
}

 bash运行时会自动生成两张表 一张是命令行参数表,一张是环境变量表

这两张表会通过各种方式给子进程(这里指main函数) 

2.3.3getevn获取环境变量        

        我们还可以通过函数getenv来获取单个环境变量,getenv头文件时stdlib.h,当没有找到是返回空,我们看代码

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{
    char *path=getenv("HOME");
    if(path==NULL) return 1;
    printf("%s\n",path);
}

运行结果为:

 我们可以看到在环境变量中HOME对应的就是/home/yang


网站公告

今日签到

点亮在社区的每一天
去签到