Linux--环境变量

目录

命令行参数

 认识环境变量

环境变量的特性及命令行操作


命令行参数

在介绍环境变量之前,我们先来理解一下命令行参数,因为命令行参数与环境变量的构成是非常相似的。在这里我们以main函数为例:
下面是一段代码:

运行结果:输入字符串./mytest -a -b -c -d,然后bash将对应的5传给argc,然后将5个参数传给argv

解释:我们输入的一个个串会被bash解析成一个个的小子串,然后维护成指针数组,然后传给main。我们姑且把我们传入的叫做命令行参数表,必须以NULL结尾,我们将它传给了main。

我们为什么要把一个个的参数传给main呢?来看下面的示例:

我们要实现三种不同的功能,-1,-2,-3,看下面代码:

运行结果:我们后面没带选项,就会提示我们带选项;-1,就输出function 1 ......

这段代码是在做什么呢?

我们可以通过不同的选项让同一个程序执行它内部不同的功能。

我们发现,其实我们平时用的指令后面一般都会跟选项,为什么我们的指令可以有不同的选项,我们的选项跟不同的功能,这是因为指令和选项会传给它main函数中,对应的argc,argv来完成不同的功能,所以我们明白了,选项就是对应的命令行参数,传递给main函数去实现不同的功能。在windows系统中也是这样的,例如showdown -s -t 3(在3s后关机)。


 认识环境变量

环境变量,不是一个,而是一堆,彼此间没有关系。

环境变量,是系统内置的具有特殊用途的变量。定义变量的本质,其实是开辟空间,在运行的期间我们的程序也能开辟空间。操作系统/bash是c语言写的程序,它能在运行中开辟空间吗?可以,系统的环境变量,本质就是系统自己开辟空间,给他名字和内容即可!!!

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

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

为什么在运行我们自己程序的时候需要使用./查找到我们的可执行程序,而使用系统的却不用呢?

这是因为在系统中存在一个全局的环境变量,PATH(使用echo $加PATH就可以查看该命令的内容了)

这个命令里面保存的是指导命令所对应的搜索路径,它会在这些路径去搜索需要使用的系统命令。如果我们也想让我们自己的程序执行的时候不需要加命令,我们可以将自己程序拷贝到上面的路径中去。(等于把自己写的程序安装到系统中了)(这里就不做演示了)

使用env可以查看系统中全部的环境变量

当用户登陆操作系统时,系统会开辟一块空间,把用户对应的环境变量维护起来,这样操作系统就认识这个用户了。(进入系统这个环境,而提前准备的变量)


环境变量的特性及命令行操作

 1.echo $(环境变量) 2.env 查看环境变量

3.export(设置环境变量,这种方法仅仅是临时使用)

这就将,AGE=18设置成环境变量了,通过env可以查看。


获取环境变量的第一种方式:

main函数的第三个参数:char*env[ ]

eg:

看看运行的效果:

将我们的整个环境变量的表给打印出来了。

当我们运行这个可执行程序的时候,就变成了进程,该进程的父进程就是Bash,Bash会构建命令行参数表,和命令行参数的个数传给main函数;同理Bash也在自己的代码里有了一张内置的表char*env[ ](环境变量表),这个表指向每一个环境变量。B我们的可执行程序变为进程后,继承了父进程(Bash)传给我们的表),环境变量默认是可以被子进程继承的。

看下面的代码:

运行结果:

说明:(特性)环境变量是具有全局属性的,环境变量会被所有的子进程包括孙子进程进行继承!

环境变量默认是在bash中的。bash进程启动的时候,默认会给我子进程形成两张表:argv[]命令行参数表(用户输入的命令行),env[]环境变量表(来自os的配置文件)。bash通过各种方式交给子进程。

在这里我们就知道了:export的本质实际上就是,在env表中找一个空的位置,把我们写的字符串放进去。值得一提的是:export值内建命令,一般的命令都是bash创建子进程执行的,但内建命令却由bash亲自执行,所以export才能把字符串写进env表中

如果想取消自己定义的环境变量,使用unset指令就好了(unset+自己定义的环境变量名)


获取环境变量的第二种方式:获得一个指定的环境变量

函数getenv,直接获取环境变量的内容。

代码示例:

运行结果:


第三种方式:

 先看一段代码:这里需要借助函数environ。

运行结果:


  • 22
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值