Linux ---- 环境变量、命令行参数

本文详细介绍了Linux环境变量的概念、作用及常见类型,如PATH,以及如何查看和设置环境变量。同时,讲解了命令行参数在C程序中的应用,包括main函数的参数解析,以及环境变量如何在子进程中被继承。此外,还探讨了如何自定义和使用环境变量,以及它们在进程间通信中的重要性。
摘要由CSDN通过智能技术生成

linux 环境变量


环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。



前言

C/C++代码在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。
环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性。


环境变量理解


创建一个C程序,输出HelloWorld。

在这里插入图片描述

在执行test1.out程序时,需要加上 ./ 当前路径。而在执行 ls 这样的系统级程序而不用添加。


PATH

PATH是Linux内的一个环境变量,每个路径用 : 分隔。在执行指令时,会向在这几个路径下查找,如果找到不到就会报错。-bash: s: command not found

在这里插入图片描述

有两种方法使不用加上 ./ 执行helloworld程序。

1 将test1移动到 PATH 那几个路径中。在这里插入图片描述

2 将程序所在路径添加到PATH中。

在这里插入图片描述

这种添加路径只是临时添加,只是此次登陆有效。


常见环境变量

查看环境变量: echo $NAME

env 命令,查看所有环境变量。

  • BASH ; 保存当前采用的shell。
  • HOME: 保存当前用户家目录。
  • HOSTNAME:当前主机名
  • HISTSIZE:保存history命令保存的历史命令最大数量。

在这里插入图片描述


环境变量具有全局属性

·环境变量通常具有全局属性,可以被子进程继承.



环境变量相关命令

  • .export:设置一个新的环境变量
  • env:显示所有环境变量
  • .unset:清除环境变量
  • .set:显示本地定义的shell变量和环境变量


调用系统接口获取环境变量

在这里插入图片描述在这里插入图片描述



自定义环境变量


在命令行,用户可以定义两种变量,本地变量和环境变量,本地变量只在当前登录有效,也无法被子进程继承。

在这里插入图片描述

运行该C程序,产生一个进程,该进程为bash的子进程,该子进程继承了环境变量。
在这里插入图片描述
在这里插入图片描述

子进程无法继承本地变量。
在这里插入图片描述


set 命令不仅可以查看本地变量,也可以查看环境变量,env命令无法查看本地变量。

在这里插入图片描述

在这里插入图片描述


echo 指令可以查看本地变量,因为echo 是shell自带的内建命令,可以直接访问。

unset : 取消一个环境变量

在这里插入图片描述


命令行参数

在C语言中,main函数是可以有参数的,第二个参数是一个指针数组,第一个参数是指针数组元素个数。

在这里插入图片描述

  1 #include <stdio.h>
  2 #include <unistd.h>
  3 #include <stdlib.h>
  4 
  5 int main(int argc,char* argv[])
  6 {
  7     int i = 0;
  8     for(i = 0;i < argc;i++)
  9     {
 10         printf("argv[%d]=%s\n",i,argv[i]);                                                                          
 11     }
 12 }

在运行程序时,我们可以手动传入参数,argv数组保存这一个个指向这些字符串的指针。

在这里插入图片描述



命令行参数的作用

计算器。
在这里插入图片描述

实现加减乘除。 通过输入参数的不同,实现不同的功能,这就是命令行参数的最大作用

在这里插入图片描述

这和linux 中的各种命令,带上各种参数是一样的,通过传入的各种参数,实现不同的功能



main函数第三个参数

env 是一个指针数组,数组内存放所有的环境变量,最后一个元素为null。
在这里插入图片描述

执行此程序,打印出所有环境变量,环境变量能被子进程继承,就是通过传参实现。

在这里插入图片描述

还可以通过一个全局变量 environ 获取全局变量,它和env[] 一样。

  1 #include <stdio.h>
  2 
  3 int main()
  4 {
  6     extern char** environ;//使用前需要extern
  7 
  8     int i = 0;
  9     while(environ[i])
 10     {
 11       printf("%s\n",environ[i]);
 12       i++;                                                                                                          
 13     }
 14 
 15 }

在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

necesse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值