【Linux】命令行参数和环境变量

目录

命令行参数

环境变量

本地变量


命令行参数

下面我们来谈命令行参数环境变量,命令行我们知道,不就是我们在哪输命令吗,我们在命令行输入的命令不就是命令行参数吗。我们可能知道,其实main函数是有参数的,main函数的参数接受的就是命令行参数,并且main函数有三个参数,其中第一个参数就是命令行参数的个数,包括程序本身(下面的./jxh),第二个参数就是命令行参数所构成的指针数组第三个是环境变量构成的指针数组,我们可以先来看一下

我们可以写这样一个代码,然后在运行时添加一些参数,这些参数都会传到main函数内

其实命令行参数最后还要传一个NULL,所以我们也可以这么写,让argv[i]当判断条件

我们就算知道了命令行参数又有什么作用呢?其实我们可以实现同一个程序传不同的参数调用不同的函数,比如下面这个简单的代码

当我们输入不同的指令时它对应的操作也是不一样的

这跟什么很像,这不就跟我们的系统指令后面加选项很像吗?我们的系统指令也使用C语言的写的

除了上面的简略代码以外,我们也可以来简单实现一个通过命令行输入来简单实现计算器的功能的代码

这里的atoi是将字符串转化为整形的一个函数,我们可以这么使用

环境变量

下面我们说一下环境变量,从一个问题开始引入,当我们要执行我们写的可执行程序时,我们要加上相对或绝对路径,但是对于系统中的命令却不用加路径,而因为这些命令也是可执行程序,也是用C语言写的,跟我们写的没有本质区别,为什么这些命令可以直接用呢?

那就是因为肯定在某个地方存着这个路径在一块空间中存着数据,这不就是变量的本质吗,所以我们把这个叫做环境变量,环境就是运行环境,并且它们是全局的,我们可以来看一下这个路径

如果我们也想让我们的可执行程序不加路径就可以使用,我们也可以修改PATH

经过这样的一些操作,我们就可以不加路径直接运行我们的可执行程序了,当然了,这些变量都是存在内存中的,当我们重启Xshell时,环境变量就会被重新配置,我们刚才弄的就没了。如果我们想让我们改的PATH一直生效,那么要改系统的配置环境变量的文件,因为就是通过这个配置文件才有了内存中的环境变量,就是这个

这是隐藏文件,我们可以改,但是不要乱改

我们也可以再看几个环境变量

当然了,我们要想看到全部的环境变量可以用下面的命令env

我们也可以自己写环境变量,比如:

这时我们就可以在env命令下看到我们写的环境变量,同理,重启Xshell就没了,因为环境变量在内存中

我们之前说了main函数的前两个参数,之所以没说第三个,就是因为第三个参数传的就是环境变量,char* env[],env就是一个指向字符指针数组的指针

并且main的参数是父进程给子进程传的,就是子进程可以从父进程那里继承环境变量,不仅可以继承,还可以用getenv函数,因为上面说过环境变量是全局的,比如下面这个例子

当你是以不同的身份登陆的时候,同样运行一个文件,它的效果是不同的,另外要说一下,su root和su - root的区别:

su - root相当于退出Xshell,然后再以root的身份重新登陆,这时系统的环境变量是root的,而su root此时的环境变量是不变的,还是之前普通用户的

除了用getenv,还可以通过第三方变量environ来看环境变量,我们可以用man来查一下

extern就是用来声明外部符号的,我们可以这么用

本地变量

一听本地变量,它的作用范围肯定比环境变量要小,本地变量只在bash中有效,不能被继承,我们可以定义和取消本地变量

set命令可以查看本地和环境变量

在bash中,本地变量是指在一个脚本或命令的上下文中声明的变量,并且其作用范围仅限于当前脚本或命令。这意味着其他脚本或命令无法直接访问该本地变量。

  • 27
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值