一、基本概念二、常见的环境变量
查看环境变量方式
echo$NAME:显示某个环境变量的值env:显示所有的环境变量2.1PATH
为何有些系统指令可以直接执行,不须要带路径;而我们编撰的程序须要带路径能够执行?
这是因为PATH环境变量记录了命令的搜索路径。所有的系统命令都可以在PATH环境变量所记录的路径下找到。
想不带路径直接执行自己编撰的程序?
将我们编撰的可执行程序的所在路径加入环境变量PATH当中
export命令用于导入环境变量,并使其对所有程序可见
export PATH=$PATH:file_path //追加
export PATH=file_path //覆写
此时就可以直接通过可执行文件名运行程序了,不须要再加路径。
请注意:此修改仅对当前会话有效。假如你想要永久生效,应将该目录添加到你的shell配置文件中(比如,对于Bash来说是~/.bashrc)。
2.2HOME
用于指定用户的主工作目录
不同登陆用户的HOME环境变量不同
cd~命令可以直接切换到家目录linux 环境变量的文件查看,就是由于HOME环境变量记录了家目录的路径。
三、在代码中获取环境变量3.1环境变量的组织形式
C/C++的main函数共有三个参数:intmain(intargc,char*argv[],char*env[]);
argc:命令行参数的个数,默认为1。argv:命令行参数表,默认保存./programenv:环境变量表
每位进程就会收到一张环境变量表,环境变量表是一个字符表针链表,每位表针指向一个以’’结尾的环境变量字符串。
环境变量表以NULL结尾
提示:bash也是一个进程,他也会收到环境变量表。在执行基本指令时不须要带路径是由于bash获取到了环境变量PATH。
3.2获取环境变量的三种方式
方式一:通过main函数的第三个参数获取环境变量表
#include
int main(int argc, char *argv[], char *env[])
{
int i = 0;
while(env[i] != NULL){
printf("%sn", env[i]);
++i;
}
return 0;
}
方式二:通过全局变量environ获取环境变量表
#include
#include
int main(int argc, char *argv[])
{
int i = 0;
while(environ[i] != NULL){
printf("%sn", environ[i]);
++i;
}
return 0;
}
注意:environ定义在头文件中,是一个char**类型,和env的类型和用法完全相同。
方式三:通过系统调用getenv获取指定的环境变量
#include
#include
int main(int argc, char *argv[])
{
printf("%s/n", getenv("PATH"));
return 0;
}
注意:getenv函数的申明包含在头文件中
四、环境变量具有全局属性
我们晓得了每位进程就会收到一张环境表,这么环境表是从哪来的呢?答案是,从其父进程承继来的。
环境变量具有全局属性,可以被单进程承继下去。
测试代码:
#include
#include
int main()
{
char * env = getenv("MYENV");
if(env){
printf("MYENV: %sn", env);
}
else{
printf("variable do not exist!n");
}
return 0;
}
直接运行,发觉该环境变量根本不存在:
我们首先要导入环境变量exportMYENV="helloworld"
再度运行程序,发觉进程获取到该环境变量了:
bash是所有在命令行上启动的进程的父进程,通过前面的测试就说明环境变量是可以被单进程承继下去的!
注意:
五、命令行参数5.1哪些是命令行参数?
命令行参数是在执行命令时,通过命令行传递给程序的额外信息。它们是一些字符串值,用于向程序提供输入、配置选项或操作参数等。
在命令行中,一般以空格分隔的方式提供命令和参数。命令行参数可以分为两类:
位置参数(PositionalArguments):位置参数是根据它们在命令行中出现的次序传递给程序的参数。程序可以按照位置来解析和使用这种参数。诸如,programarg1arg2中的arg1和arg2就是位置参数。如指令mvdir1dir2,cpdir1dir2等等。
选项参数(OptionArguments):选项参数是以某种特定的格式传递给程序的参数,一般以短横线(-)或双短横线(–)开头。选项参数用于配置程序的行为或提供特定的操作。诸如,program-ffilename中的-f就是一个选项参数,用于指定要操作的文件名。如指令ls-a-l,rm-r-f等等
命令行参数可以帮助程序按照不同的需求进行不同的操作或配置。在C语言中,可以通过main函数的参数argv来获取命令行参数表,并在程序中进行处理和使用命令行参数。
每位进程就会收到一张命令行参数表,命令行参数表是一个字符表针链表,每位表针指向一个以’’结尾的命令行参数字符串。
命令行参数表同样以NULL结尾
5.2怎样使用命令行参数?
C/C++的main函数共有三个参数:intmain(intargc,char*argv[],char*env[]);
argc:命令行参数的个数,默认为1。argv:命令行参数表红旗linux桌面版,默认保存./programenv:环境变量表
一个接收命令行选项参数的简单程序:
int main(int argc, char** argv){
if(argc == 1)
{
cout << "Run without option!" << endl;
return 0;
}
//程序中内置的选项
vector<string> options;
options.push_back("-a");
options.push_back("-b");
options.push_back("-c");
options.push_back("-d");
//匹配查找输入的选项
for(int i = 1; i<argc; ++i){
auto ret = find(options.begin(), options.end(), argv[i]);
if(ret != options.end())
{
cout << "option: " << argv[i] << endl;
}
else{
cout << "option " << argv[i] << " is not available!" << endl;
break;
}
}
return 0;
}
运行结果:
5.2命令行参数是从那里来的?六、相关命令总结
echo$NAME:显示指定名称的shell变量和环境变量的值。假如该变量没有被定义,则不会显示任何内容。
env:显示所有的环境变量和其值。
export:将shell变量导入为环境变量。该命令将指定的shell变量添加到环境变量表中linux 环境变量的文件查看红旗linux系统,使其在当前shell会话中可用,并在子进程中也可用。
set:显示本地定义的shell变量和环境变量的值。该命令会显示所有的本地定义的shell变量和环境变量,包括当前shell会话中定义的变量和从父进程承继的变量。
unset:删掉指定名称的shell变量和环境变量。该命令会删掉指定的shell变量或环境变量,使其在当前shell会话中不再可用。假如该变量是一个环境变量,则该命令只会在当前shell会话中删掉该变量,而不会影响其他进程。