云计算百科
云计算领域专业知识百科平台

【Linux系统编程】命令行参数和环境变量

目录

1.命令行参数

2. 环境变量

2.1 概念

2.2 Linux中的环境变量

2.2.1 常见环境变量

2.2.2 获取环境变量的方法

3.理解环境变量的产生


1.命令行参数

直接上代码演示:

1 #include<stdio.h>
2
3 int main(int argc,char* argv[]) //int main(int argc, char **argv) 指针形式,完全等价
4 {
5 printf("参数个数: %d\\n", argc);
6
7 for (int i = 0; i < argc; i++)
8 {
9 printf("argv[%d] = %s\\n", i, argv[i]);
10 }
11 return 0;
12 }

  • argv[0] 永远存在,至少为 1。

  • argv[argc] 固定为 NULL,也就是说最后一定以空指针结尾

argc 是命令行参数的个数,argv 是参数字符串数组,它们让你可以在程序启动时传入配置和数据,会以空格文分隔符,从键盘读取。

通过命令行参数可以实现多选项功能:

1 #include<stdio.h>
2 #include<string.h>
3
4 int main(int argc,char* argv[])
5 {
6 for (int i = 0; i < argc; i++)
7 {
8 if (strcmp(argv[i], "-l") == 0) { printf("Version1\\n"); }
9 else if (strcmp(argv[i], "-p") == 0) { printf("Version2\\n"); }
10 }
11
12 return 0;
13 }

2. 环境变量

2.1 概念

环境变量(Environment Variables) 是操作系统为了简化程序配置而设计的全局键值对机制,是系统级变量,保存和系统启动和运行的核心参数,具有全局性。

2.2 Linux中的环境变量

2.2.1 常见环境变量

PATH : 指定命令的搜索路径 HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录) SHELL : 当前Shell,它的值通常是/bin/bash

echo $NAME #可以查看配置的环境变量

说明:./code 能够执行,code不能执行的原因就是没有指定路径,而ls,pwd,which在任何地方都能执行就是因为配置了环境变量,所以which的本质就是查找对应的环境变量。

PATH中添加环境变量

PATH=$PATH:[添加的路径]

如果我们将/home/yyx/lesonenvivar20添加到PATH当中,code就能够执行了。

注意:如果直接PATH="XXXX",原内容会被XXXX覆盖,不过仅仅是做内存级修改,退出重新登陆后会恢复。

env #查看全部的环境变量,不含本地变量

比如其中的HISTSIZE=1000,说的就是只记录最近使用的历史命令1000条,history可以查看。

OLDPWD就是最近上一次的路径,cd-就是通过它来实现的。

2.2.2 获取环境变量的方法

方式说明示例
environ 全局变量 直接操作整个环境变量数组 extern char **environ;
getenv() 函数 通过键名获取单个值,最常用 getenv("PATH")
main() 的 envp 参数 通过 main 函数的第三个参数接收 int main(int argc, char *argv[], char *envp[])

environ的用法:

#include <stdio.h>

extern char **environ; // 声明外部变量

int main() {
char **env = environ;
while (*env != NULL) {
printf("%s\\n", *env);
env++;
}
return 0;
}

可以通过C库函数提供的getenv来获取环境变量。

1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main()
5 {
6 // 获取HOME
7 char *home = getenv("HOME");
8 if (home != NULL) {
9 printf("HOME = %s\\n", home);
10 }
11
12 // 获取 PATH
13 char *path = getenv("PATH");
14 if (path != NULL) {
15 printf("PATH = %s\\n", path);
16 }
17
18 return 0;
19 }
export #设置新的环境变量,也可以将本地变量修改为环境变量
set #显示本地定义的shell变量和环境变量
unset #清楚环境变量
echo$ #显示变量的值
[变量名]=[] #定义本地变量,只在bash内部有效,子进程不继承,等号两边不能有空格

2.2.3 getenv的三种用法

putenv("MY_VAR=hello"); #添加新环境变量(不存在时)

putenv("PATH=/custom/bin"); #修改已有环境变量(存在时)

putenv("MY_VAR"); #删除环境变量(传入不带 = 的字符串)

3.理解环境变量的产生

结论:任何进程的启动,都会存在两张表

        1.命令行参数表

        2.环境变量表

命令行参数表:当在shell命令行输入命令字符串时,通过解析构建argv数组,也就是命令行参数表,最后以NULL结束。

环境变量表:当一个进程启动时,他会从特定的配置文件中读取环境变量,然后构建环境变量表char* env[],如果它继续创建子进程的话,子进程会“继承”下来这些环境变量,在创建,在继承,所以环境变量具有全局属性。

每一次登陆时,会走上面这个路径扫描文件获取环境变量,如果在特定文件内部做修改,增加环境变量,此时就不单单是内存级修改,下次登陆时不再恢复。

完~

赞(0)
未经允许不得转载:网硕互联帮助中心 » 【Linux系统编程】命令行参数和环境变量
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!