Linux——命令行参数及环境变量

命令行参数

我们平常在编写C语言代码的时候,首先第一件事情就是——写main函数!
在这里插入图片描述

大家有没有想过,既然我们平常写的函数平常都会传些参数什么的,那么,main函数作为一个函数,是不是也可以传一些参数呢?
其实是可以的,只不过我们平时不怎么用而已,我们main函数可以传三个参数,我们先来介绍两个:

argc argv

来给大家演示一下:
在这里插入图片描述其中argc是int类型的变量,argv是char*类型的指针数组。
既然argv是数组,我们用一下argc这个int类型的变量来遍历一下argv这个数组:
在这里插入图片描述在这里插入图片描述
我们多带几个选项在后面试试:
在这里插入图片描述
我们发现一个事情,main函数好像接收了我们的选项,并且把这些选项放在了argv指针数组中。
其实我们在屏幕上打的操作,shell或者操作系统会以空格为分隔,读取一个一个的字符串,放在argv数组中:
在这里插入图片描述
我们可以根据这个编写一个简单的计算器:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

环境变量

说道环境变量呀,大家有没有在装java的时候被环境变量所支配的恐惧,很不幸的是,我们的linux也有环境变量这一说法。
我们暂时先把这个问题放置一旁,我们先来看一个问题,为什么我们每次写的程序,如果我们想跑起来,我们都要在这个程序的名字前加上** ./ **。

就拿我们刚才写的myproc为例:
在这里插入图片描述你看,我们都要带上 ./ 那为什么像Liiux的指令;ls pwd 等等这些指令都不需要加上 ./ 呢?
这时候就体现环境变量的作用了,我们来查看一下环境变量:
在这里插入图片描述
大家有没有发现这个路径有点眼熟?这些路径就是储存ls,pwd等等这些指令的地方。而我们的有一个概念,一个程序可以被执行的前提就是可以找到这个程序的路径,而我们的环境变量就是存储了这些路径,而操作系统会一来就在环境变量中寻找路径,而这些路径就是ls和pwd的存放位置,从环境变量中知道路径之后,就可以顺利执行程序了。

那就可以解释我们刚才的现象了,我们的myproc的路径并没有放到环境变量中,所以直接执行,操作系统找不到这个程序的位置,所以会报错。我们在程序前加上 ./ 是告诉操作系统不要到环境变量中去寻找路径,就在本地文件寻找路径,执行程序。

那么有没有办法将我们自己写的程序的路径放到环境变量中呢?当然可以:
在这里插入图片描述
这时候大家发现,我们这时候不用加上 ./ 就可以运行我们的myproc了。是不是很神奇?
这时候我们来做一件事,我们把我们的PATH路径改为空:

在这里插入图片描述
这时候:
在这里插入图片描述
这时候大部分的命令都不能运行成功了,因为路径为空了,大部分的路径都找不到,所以执行不成功。
这时候有同学就会慌了,那咋办啊?是不是要重装系统了。
没关系,我们只需要重新登陆一下就行了:

在这里插入图片描述
这是因为我们修改路径只会在内存中修改,重新登陆之后路径会重新恢复。

在这里插入图片描述
这是为什么呢?这个我们稍后才来解释。现在我们来看一个问题:环境变量只有一个吗?。当然不是啦,我们肯定是有多个环境变量的,我们可以用env指令,来查看我们所有的环境变量:
在这里插入图片描述我们看到有这么多的环境变量。

获取环境变量的方法

getenv

我们可以用getenv函数,用编码的方式来获得环境变量:
在这里插入图片描述
在这里插入图片描述

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

我们除了在终端用env指令外,我们可以用main函数的第三个参数char* env[],来查看环境变量:
在这里插入图片描述
在这里插入图片描述

全局二级指针**environ

如果我们不想用命令行获取环境变量,我们有一个默认的全局指针environ。:
在这里插入图片描述我们用这个指针也可以看到全部的环境变量:
在这里插入图片描述

环境变量的配置

好了,我们先暂停一下,现在来回答之前的一个问题,为什么我把路径改为空之后,重新登录之后路径又会恢复了呢?这其实是我们每次打开登录时,我们在用户的家目录下会有一个配置文件,这个配置文件,会帮我们配置好路径(形成一张环境变量表),每次修改路径之后,只要这个配置文件没改,那么每次登录配置的路径都是不会变的。

那么这个文件是什么呢?是一个隐藏文件,叫做**.bash_profile**:
在这里插入图片描述
我们打开来看一下:
在这里插入图片描述
你看这个文件里我们可以看到PATH的初始配置,在第4行我们又有一个bashrc文件,我们也可以打开看一下:
在这里插入图片描述
在这里插入图片描述

export和unset和set

好了,经过上面的分析我们可以大概了解到PATH环境变量的配置了,那么我们可以把自己写的环境变量放入环境变量表中吗?

在测试之前,我么先创建一个环境变量(我们也称这个变量为我们的本地变量。):
在这里插入图片描述
但是我们在环境变量里一查。并没有这个环境变量:
在这里插入图片描述
那是因为我们只是创建了这个变量,还并没有把这个变量加入到环境变量中,我们有一条指令export,可以帮我们导入环境变量:
在这里插入图片描述
这时候我们再来看环境变量中有没有MY_PATH:
在这里插入图片描述
这时候我们看到,我们的环境变量中确实有MY_PATH,但是如果我们重新登录的话,这个MY_PATH的环境变量又会没有了:

这是重新登录之后的环境变量:
在这里插入图片描述
诶,这是为什么呢?那是我们的配置文件中并没有配置MY_PATH的环境变量,重新登录之后就不会形成MY_PATH的环境变量。

我们可以添加一下,形成这个环境变量:
在这里插入图片描述
这时候我们重新登录一下,就可以看到这个新的环境变量了:
在这里插入图片描述

我们用export导入了之后,我们可不可以把它取消了呢?当然是可以的,我们可以用unset取消我们的环境变量:
在这里插入图片描述但请注意,我们虽然这个时候把MY_PATH这个环境变量移除了,但是我们并没改配置文件,所以下次启动的时候又会重新导入MY_PATH这个环境变量。

我们还可以用set查看环境变量和本地变量:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值