1.常见的环境变量:
PATH : 指定命令的搜索路径:
HOME : 指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
SHELL : 当前Shell,它的值通常是/bin/bash。PWD:记录当前工作目录。
2.main参数和环境变量
main函数的3个参数,main函数第一个参数是命令行参数的个数,第二个参数是一个类型为char*的数组最后一个元素以NULL结尾,每个元素中存储的字符串的地址(命令行参数)。第三个参数char*arg[],它的每个元素也是char*数组的最后一个元素以NULL结尾(环境变量)。
验证:
我们可以通过这个main参数拿到命令行参数的内容还有环境变量,命令行参数的个数。bash会帮我们传参。
(1)简单实现个计算器
这里我们从键盘上输入的指令,会被bash维护,形成一张表每个元素是一个字符串以空格分开,以NULL作为结尾 。mian形参arge是元素的个数,char* arg[]指向是一个数组指针,数组存储的是指向字符串地址。
我们可以用它来用在同个程序中,通过指令选项执行不同的功能。
以下实现简单的计算器:
2.了解环境变量
1.Linux中的环境变量有很多,它们之间是独立的,不同场景下有不同的用处。可以通过指令env查看当前机器的所有环境变量。操作系统会开辟内存存储用户名,当前的工作目录,家目录等一些信息,在你登入linux的时候,通过在linux家目录下的配置文件加载好,它是一个脚本文件。
既然我们登入linux就会执行这个脚本文件,那么我们直接在文件导入自己的环境变量,就可以永久生效了。
env查看:导入成功
2.1我们可以用系统的环境变量干什么。
1.用PATH来说:’linux中每个命令能被执行,因为在PATH中记录了它们的路径,命令也是代码,要执行运行必须要知道它在哪。我们在运行我们自己写的编译好的可执行文件,要带上./可执行文件或者绝对路径 ,要让我们程序之间运行,而不带路径,那么就要把当前文件的工作目录路径添加到PATH中
1.直接将路径拷贝到PATH的其中一个路径下。不过并不建议因为会污染变量,当然污染之后重启Linux也是会恢复的,这是因为登入linux就会执行家目录下的脚本文件,加载到内存中,内存中的修改不影响文件,重新登入就可以恢复了。
2.指令:export PATH=文件的工作目录路径:$PATH。
这样我们就可以像指令一样直接执行了,而不用指明路径(./a.out),不过这个只是对当前会话有效,如果要永久有效的话就要在配置文件中执行命令。
3.环境变量的获取和导入
1.获取
我们有三种方mian第三个参数,还有一个系统提供给我们的全局变量environ,还有函数调用接口getenv();
2.导入:
我们可以通过指令export或者系统系统提供的函数(putenv())
3.环境变量和本地变量
3.1.本地环境变量:
本地变量只在bash内部有效,不可以被子进程继承,不具有全局性。变量名+赋值。通过set查看
.2 环境变量
可以被子进程继承,具有全局性,通env查看
4.命令和bash的关系
bash也是个程序,命令行执行的命令实际上是bash通过创建子进程的方式来执行的,而且指令也是个程序,它存储在文件中加载到内存,PATH中存储的就是路径。linux的指令可以分为内建命令和普通命令,普通命令是创建子进程执行,而内建命令可以理解为bash这个程序内部的一个函数。
验证:我们把记录命令程序的路径PATH的覆盖。
我们发现这个时候就执行不了一些命令了。因为有些命令 是通path找到程序创建子进程执行的,而有些命令却依旧可以执行,可见命令也是有分类的。
内建命令:bash的内部的函数。不需要创建子进程来执行,直接调用自己的函数
外键命令:存储在磁盘上的程序文件,需要知道文件的位置。
5.环境变量的特点
1.全局性:父进程的环境变量会被子进程继承而本地环境变量不可以