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。

运行结果:


相关推荐
矛取矛求2 小时前
Linux如何更优质调节系统性能
linux
内核程序员kevin3 小时前
在Linux环境下使用Docker打包和发布.NET程序并配合MySQL部署
linux·mysql·docker·.net
kayotin4 小时前
Wordpress博客配置2024
linux·mysql·docker
Ztiddler4 小时前
【Linux Shell命令-不定期更新】
linux·运维·服务器·ssh
小小不董5 小时前
Oracle OCP认证考试考点详解082系列16
linux·运维·服务器·数据库·oracle·dba
IPdodo全球网络5 小时前
如何利用静态住宅IP优化Facebook商城的网络稳定性与运营效率
运维·服务器
a1denzzz5 小时前
Linux系统的网络设置
linux·服务器·网络
运维&陈同学5 小时前
【模块一】kubernetes容器编排进阶实战之k8s基础概念
运维·docker·云原生·容器·kubernetes·云计算
ac.char6 小时前
在CentOS下安装RabbitMQ
linux·centos·rabbitmq
m0_519523106 小时前
Linux——简单认识vim、gcc以及make/Makefile
linux·运维·vim