目录
环境变量
常见的环境变量
查看对应环境变量的方法
测试PATH
如何把程序加入环境变量
HOME环境变量
SHELL环境变量
和环境变量相关的命令
set:显示本地第一的SHELL变量和环境变量
unset:清除一个环境变量
环境变量的组织方式
main函数的参数(在代码中获取环境变量)
main函数的第三个参数
系统函数调用获取
总结:
环境变量
先说说include,为什么我们加上一个#include头文件,之后在预编译时,就会展开成代码。这个代码是怎么找到的?
我们并没有指定他在哪,但是编译器就自己能找到他,这就是环境变量的用法。
就像是在全局有个变量,然后指定了一个位置去查找文件一样。
常见的环境变量
- PATH: 指定命令的搜索路径。
- HOME: 指定用户的主工作目录(即用户登录到Linux系统中的默认所处目录)。
- SHELL: 当前Shell,它的值通常是/bin/bash。
查看对应环境变量的方法
echo $NAME //NAME为待查看的环境变量名称
echo $PATH echo $HOME等等。
测试PATH
还有一个例子就是,在我们要指定程序是通常是通过路径的方式指定。
./myprocess(myprocess是我们当前文件夹的程序)。
我们知道指令其实也是一个程序,那为什么他不用指定路径呢?
ls -a等等指令。
然后我们 echo $PATH,看一下
看到下面其实是有很多地址然后以 : 号作为分割的。然后我们再来看看ls这个指令在哪?
which ls 指令
发现他是在usr/bin/ls下,我们就知道了环境变量,就是把一些文件夹搞成默认状态,在没有指定文件位置时,会优先找环境变量下的内容,如果环境变量也没有那就报错。
如何把程序加入环境变量
有两种方法:
1.入住法(自己起的)
把我们的程序放到环境变量指定的文件夹下面就可以了。
sudo cp proc /usr/bin
我们看到PATH有一个内容是指向 /usr/bin的所以我们把程序塞到里面去,就能让系统去这个目录下查找了
2.融入法
把我们的当前目录位置塞到PATH变量中,也很简单,就是修改PATH变量的意思,我们之前说环境变量就是类似于在系统代码中的一个全局变量。系统不认识的东西先去环境变量指定的地方找。
export PATH=$PATH:/home/aron/testfile
HOME环境变量
这个变量就是指向当前用户的家目录。
SHELL环境变量
bash是干嘛的呢?
上面的意思就是SHELL内核知道自己当前用的命令行解释器的种类。
这个进程是操作系统打开时就以开启(环境变量),但是是在浅睡眠状态的,当我们有指令时,会把该进程唤醒,为我们解析指令,然后返回结果。
和环境变量相关的命令
echo:显示环境变量的值
export:设置一个变量的值或者设置一个新的环境变量。
export PATH=$PATH:/home/aron/testfile
上面这个代码其实就是设置PATH的值后面加上 我们想要加上的位置。
$PATH就是获取当前的PATH变量。这里就像是字符串的相加,PATH + 需要的地址。
env:显示所有的环境变量
部分环境变量的说明:
set:显示本地第一的SHELL变量和环境变量
set | more: more是用来查看一个文件的。
unset:清除一个环境变量
unset + 环境变量名:不建议使用,防止误删。
环境变量的组织方式
每个程序都会有一个环境变量表,这个表就是一个字符指针数组。都是以 变量=地址,指定的。就能指定环境变量有那些。
main函数的参数(在代码中获取环境变量)
执行代码后,就可以发现,我们后面跟的选项,被for循环打印 argv打印了出来,所以我们程序后面跟的选项,其实就是传给了第二个参数
而第一个参数的含义就是我们传入了几个选项。现在是不是有种指令被解开的感觉。没错指令是一个程序,它后面跟的选项就是传入了这个数组中,然后根据解析选项,给出不同的结果。
main函数的第三个参数
好了这里就能回到环境变量了,第三个参数就是我们所说的,每个程序都带有的环境变量
结果打印:env同款
除了第三个参数外,还有一个全局变量可以获取到这个二维数组:
大家知道 extern关键字吗?
这就是一个声明,可以找到别的文件下的变量,而我们的操作系统就是一个大文件,environ就是一个存储环境变量的全局变量。
系统函数调用获取
运行结果如下:
总结:
1.环境变量就是可以让系统直接找到指定程序的一个变量。
2.这个变量在整个系统就像是一个全局变量。方便每一个程序都能获取
3.main函数的三个参数的含义:1.选项个数。2.具体选项的字符指针数组。3.环境变量的字符数组