【Linux课程学习】:命令行参数,环境变量
🎁个人主页:我们的五年
🔍系列专栏:Linux课程学习
🌷追光的人,终会万丈光芒
🎉欢迎大家点赞👍评论📝收藏⭐文章
目录
命令行参数:
用命令行参数实现不同功能的程序:
main函数的参数是谁传递的?
mian函数被其他的函数调用:
环境变量:
查看环境变量:
为什么指令可以不带路径就能运行?
让我们自己的程序也可以不带路径运行:
环境变量的配置文件:
用户的配置文件
1.变量定义在for循环中,在c99和c++中才支持:
gcc $^ -o $@ -std=c99
2.命令行也是一个进程,它的父进程都是shell。
3.对于父子进程,对于父进程只读的数据,不会修改的数据,不会拷贝一份,但是子进程可以看到。
4.编译器,加载器,操作系统表示互相割裂的,彼此有联系。
5.env和argv都是以NULL结尾,env没有个数,可以通过这样的方法进行打印env。
6.echo进行打印时,如果不加$表示的是字符串,加$才表示变量。
7.PATH=……:这样进行修改环境变量PATH是覆盖式的修改。
8.我们进行的环境变量的修改,只是改了内存级的环境变量,进程中的环境变量。当我们退出以后,环境变量重新被加载,这样就没有了我们之前修改的环境变量。环境变量在系统的配置文件中。文件时磁盘级存储的。
9.打开shell---》启动一个进程---》读取系统和用户的环境变量》在内存中就会保存这些环境变量
10.source 文件:让配置文件生效。
命令行参数:
int main(int argc,char* argv[ ])
argc表示参数的个数,crgv[]表示参数清单,是一个一个的字符串。
根据下面的测试结果,我们知道argv是我们在命令行输入的命令,所以argv[1]是./code ,后面的根据输入的命令而定。
#include <stdio.h>
int main(int argc,char* argv[])
{
printf("argc:%d\n",argc);
for(int i=0;i<argc;i++)
{
printf("agrv[%d]:%s\n",i,argv[i]);
}
return 0;
}
用命令行参数实现不同功能的程序:
有了命令参数,让一个程序可以实现不同的功能。
比如:命令中的选项的实现。
#include <stdio.h>
#include <string.h>
int main(int argc,char* argv[])
{
if(argc<2)
{
printf("未传参数,opt1,opt2,opt3\n");
}
else if(argc>2)
{
printf("参数过多,pt1,opt2,opt3\n");
}
else if(strcmp(argv[1],"opt1")==0)
{
printf("l love xy!\n");
}
else if(strcmp(argv[1],"opt2")==0)
{
printf("l love xy!,Future home will have bathtubs!\n");
}
else if(strcmp(argv[1],"opt3")==0)
{
printf("l love you,Future home will have bathtubs!l promise!\n");
}
else
{
printf("参数错误\n");
}
return 0;
}
main函数的参数是谁传递的?
1.首先被shell(命令行解释器)拿到。然后shell根据空格,就形成了一张表(argv),也就可以知道元素个数(argc)。这张表中每一个都指向一个字符串,最后以NULL结尾。
2.命令执行的时候,给进程传递,命令行参数。此时就形成了全局的argc和argv[ ],命令行参数是不会发生变化的,这样子进程不用拷贝一份,argc和argv[ ]不会进行修改,只需要只读就行。但是子进程也可以看到。
mian函数被其他的函数调用:
根据参数的不同,就调不同的mian函数。
环境变量:
mian函数中的env:环境变量。
mian中的argv和env都是一张表结构。
查看env,因为argv和env都是以NULL结尾的,所以我们可以以env[i]进行判断真假进行打印所以的env。
for(int i=0;env[i];i++)
{
printf("env[%d]:%s\n",i,env[i]);
}
查看环境变量:
1.环境变量是指操作系统中用来指定操作系统运行环境的一些参数。
2.启动的任何一个进程,都会传递这些参数。所以我们才能写一个程序,通过env打印环境变量。
3..环境变量一般用于特殊用途,一般具有全局属性。
4.比如我们从来不知道我们要链接的动态库在哪里,还是可以链接成功。这是环境变量帮助编译器进行查找。
环境的变量的基本格式:key=value,全局变量。
全部都是什么=什么
HISTSIZE:表示命令保存条数。
PATH:告诉shell,应该去哪个路进行查找指令。
PWD:当前用户所在目录。
为什么指令可以不带路径就能运行?
PATH环境变量告诉了shell,应该要去哪个路径下查找。
echo $PATH:打印PATH环境变量。
有很多的路径,以:作为分隔符。
我们自己的程序要带./才能找到我们要执行的程序。
而系统就能知道指令在/user/bin路劲下。
PATH环境变量:系统可执行文件的搜索路径集合。
我们进行的环境变量的修改,只是改了内存级的环境变量,进程中的环境变量。当我们退出以后,环境变量重新被加载,这样就没有了我们之前修改的环境变量。
让我们自己的程序也可以不带路径运行:
PATH=……:PATH覆盖式的修改环境变量PATH。
方法一:
可以把我们的程序拷贝到PATH中的任何一个目录下。
方法二:
在PATH中加入我们的可执行程序的目录。可以先pwd查看,然后echo $PATH查看PATH,最后把两个进行拼接,就可以了。
也可以直接$PATH,加上分隔符:,最后加上我们的路径。
如果我们在配置文件中修改PATH,那么每次启动shell的时候,我们新增的PATH被加载。
环境变量的配置文件:
此时在用户下的两个环境变量:都是隐藏文件,以.开头
.bashrc
.bash_profile
用户的配置文件
用户的配置文件,在启动shell的时候,也是要被加载的。
它也是以$PATH的方式进行增加新的PATH环境变量。
让配置文件生效:
source 文件