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。

运行结果:


相关推荐
极客小张5 分钟前
基于正点原子Linux开发板的智能监控与家电控制系统设计:深度解析Video4Linux和TCP/IP技术栈
linux·运维·c++·物联网·网络协议·tcp/ip·算法
sunxunyong5 分钟前
Linux 删除文件不释放空间问题处理
大数据·linux·运维·服务器
只对您心动1 小时前
【C高级】有关shell脚本的一些练习
linux·c语言·shell·脚本
lldhsds1 小时前
linux下的分布式Minio部署实践
linux·minio·分布式对象存储
OH五星上将2 小时前
OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【内核通信机制】上
linux·嵌入式硬件·harmonyos·openharmony·鸿蒙开发·liteos-a·鸿蒙内核
DC_BLOG3 小时前
IPv6(四)
运维·服务器·网络·ip
shelby_loo3 小时前
通过 Docker 部署 MySQL 服务器
服务器·mysql·docker
ZBzibing3 小时前
[游戏技术]L4D服务器报错解决
服务器·游戏
沈艺强3 小时前
伊犁linux 创建yum 源过程
linux·运维·服务器
拾光师3 小时前
linux命令行快捷键
linux·运维·服务器