前言
我们在本篇文章中将会学习到有关环境变量的内容。
一、main函数参数
我们在之前学习过的main函数书写方式是这样的
int main()
{
return 0;
}
其实main函数是可以带参数的
int main(int argc, char* argv[])
{
return 0;
}
我们通过打印看一下具体里面的内容是什么
#include <stdio.h>
int main(int argc, char* argv[])
{
int i = 0;
for (i = 0; i < argc; i++)
{
printf("%d:%s\n", i, argv[i]);
}
return 0;
}
这打印的不就是我们输入的内容吗??
本质操作系统会完成这样的任务
printf(“[peng@hcss-ecs-509d env]$”);
char*buffer[1024];
scanf(“%s”,bufffer);
scanf输入的内容以空格进行分割,放入数组中。会形成一张这样的表,我们称为命令行参数表,里面存的是一个字符指针数组,最终以NULL结尾。
我们为什么要这样做呢??
本质想让同一个程序根据参数的不同完成不同的功能
我们就可以通过这个写一个简单的计算器
int main(int argc,char*argv[])
{
if(argc!=4)
{
printf("Uage:\n\t\%s -[add][sub][mul][div] x y\n\n",argv[0]);
}
int a1=atoi(argv[2]);
int a2=atoi(argv[3]);
if(strcmp(argv[1],"add")==0)
{
printf("%d+%d=%d\n",a1,a2,a1+a2);
}
else if(strcmp(argv[1],"sub")==0)
{
printf("%d-%d=%d\n",a1,a2,a1-a2);
}
else if(strcmp(argv[1],"mul")==0)
{
printf("%d*%d=%d\n",a1,a2,a1*a2);
}
else if(strcmp(argv[1],"div")==0)
{
printf("%d/%d=%d\n",a1,a2,a1/a2);
}
else
{
printf("UNKnown\n");
}
return 0;
}
命令行参数是Linux指令选项的基础
实际上我们日常使用的指令也是这样通过这样的方式实现的!!!
我们在windows也会遇到命令行参数
ls -la ,ls- n;shutdown命令
二、环境变量
1.简单介绍
环境变量并不是一个,而是很多个,彼此之间没有关系。是由操作系统内置的具有特殊用途的变量。
本质就是系统自己开辟空间,给他名字和内容。
环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数。
比如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。
2.常见的环境变量
PATH
我们看一下这种现象,我们自己写的程序make之后要莫用绝对路径进行运行,要么在当前当前工作目录采用 ./ 的方式运行。
但是一些指令就可以不加 ./ 直接运行,这是为什么呢???
就是因为环境变量PATH的存在。
我们可以查看一下这个环境变量
echo $ :显示某个环境变量
存在多条路径,以冒号进行分割。
我们也可以把自己的程序通过一定的方式直接运行,不用加 ./
🌟🌟把自己的程序拷贝到一个路径下就可以
我们需要对指令进行提权
我们一般不建议折磨做,容易产生混乱。
我们也可以进行删除
删除之后就不允许这样操作了
🌟🌟把自己的路径添加到PATH环境变量中
export:设置一个新的环境变量
export PATH=$PATH:路径
如果我们不想用了,想要恢复要来的内容,我们关闭重开就可以。
因为修改仅仅是在内存中进行修改,重新打开重新形成新的环境变量。
HOME
HOME指定当前用户的主工作目录
操作系统为什么会认识我们??
操作系统把我们数据保存了起来,登陆时,操作系统在内存中开空间,用户的环境变量维护起来,进入这个环境提前准备的变量!!!
3.获取环境变量
🌟🌟通过代码获取
我们的main函数其实还可以传递一个参数,就是环境变量。
int main(int argc, char* argv[],char*env[])
{
int i = 0;
for (i = 0; env[i]; i++)
{
printf("%s\n",env[i]);
}
return 0;
}
我们还可以通过另一种代码方式获取
libc中有个全局变量environ指向环境变量表
int main(int argc, char* argv[])
{
extern char** environ;
int i = 0;
for (i = 0; environ[i]; i++)
{
printf("%s\n", environ[i]);
}
return 0;
}
🌟🌟通过系统调用获取
gitenv获取某个环境变量
env显示所有的环境变量
unset :清楚环境变量
bash给main函数会传两个表:命令行参数表,环境变量表
1.根据选项不同执行不同的功能
2.获取不同的环境变量以供后续操作
三、环境变量的全局属性
环境变量是系统内置的,每个进程都有它的父进程。
对于main函数,父进程就是bash,main函数可以对环境变量进行读操作,就证明了环境变量具有全局属性。
环境变量会被所有子进程包括孙子进程进行继承。
我们同样也可以设置本地变量
key = value ;
我们采用env查询不到,只能用set进行查询
set:显示所有本地定义的shell变量和环境变量
同样的,本地变量只在bash内部有效,不可以被继承。
其实,我们在启动xshell时,就已经有了环境变量,那这个环境变量是从哪里来的呢??
存在于磁盘中的某个文件中,叫做 .bash_profile
总结
以上就是今天要讲的内容,本文仅仅详细介绍了Linux环境变量的内容。希望对大家的学习有所帮助,仅供参考 如有错误请大佬指点我会尽快去改正 欢迎大家来评论~~ 😘 😘 😘