命令行参数与环境变量

一、命令行参数是干什么的?

命令行参数能够实现指令级别的命令行选项的设置。

argv命令行参数表

int main(int argc, char* argv[]) //argc为字符串数量,argv为字符指针数组,必须以NULL结尾
{
    return 0;
}

二、环境变量

1.为什么执行ls,pwd这样的程序不需要加./,而执行我们自己的程序要在前面加./呢?

要执行一个可执行程序,首先要找到它。执行shell自带的指令时,会有一个默认搜索路径,称为环境变量PATH,在这里可以找到指令。

echo $PATH //查看环境变量PATH

方法一:所以如果我们把自己的可执行程序路径也加入到PATH中,也就不用加./了。

PATH=/... //这样不行,会直接覆盖原有的PATH
PATH=$PATH:/... //这样是添加到原有的后面,以':'作为分隔符

若要删除,直接复制去掉要删除路径的PATH给当前PATH就可以。

我们修改的环境变量是在内存中的,重新登录xshell主机就会恢复

方法二:把可执行程序拷贝到PATH环境变量的列表当中。

sudo cp a.out /usr/bin   //这个过程称为程序安装

2.pwd为什么知道我们当前所处的路径呢?

存在环境变量PWD,专门记录当前所处的路径,pwd读取PWD的内容就可以了。

3.分别以普通用户和root用户登录时,初始路径为什么不同?

4.env指令可以获取系统支持的所有环境变量

系统中会存在大量的环境变量,每一个环境变量都有它自己的特殊用途,用来完成特定的系统功能

5.可以通过代码系统调用getenv来获取环境变量

printf("PATH: %s\n", getenv("PATH"));

6.main函数可以不带参,可以带两个参数,也可以带三个参数,通过env环境变量表获取环境变量

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>

int main(int argc, char *argv[], char *env[]) //环境变量表
{
    int i = 0;
    for(; env[i]; i++)
    {
        printf("pid:%d %s\n", getpid(), env[i]);
    }
    return 0;
}

运行输出:

与env指令得到的结果基本一致。

直接添加的环境变量是本地变量

7.环境变量从父进程传递到子进程不一定通过传参,也可以通过全局变量获取环境变量

C语言中存在一个全局变量声明environ,会自动指向环境变量表。

#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>

int main()
{
    extern char **environ;

    int i = 0;
    for(; environ[i]; i++)
    {
        printf("pid:%d %s\n", getpid(), environ[i]);
    }
    return 0;
}

也能输出环境变量

8.系统环境变量具有全局属性

1.本地变量和环境变量的区别?

本地变量只在bash进程内部有效,不会被子进程继承下去。

环境变量通过让所有子进程继承的方式,实现自身的全局性。

2.echo也是子进程,为什么echo能打印本地变量的值呢?

当我们把PATH环境变量置空

ll、top、mkdir等指令就无法使用了,但为什么echo指令还能正常使用呢?

实际上,在Linux中大部分的命令是在磁盘当中真正存在的,需要fork创建子进程来执行命令,但还有一种命令,不需要子进程,有bash自己进行执行,这种命令等同于bash内部的一个函数,这种命令我们称之为内建命令。

Linux命令分类:

(1)常规命令,shell fork让子进程执行。

(2)内建命令,shell命令行的一个函数,自然可以直接读取shell本地变量了。

export命令也是内建命令,因为export不能创建子进程,如果创建子进程会导致把环境变量导入到子进程的环境变量中。

unset ENV_TEST3 //取消环境变量
set //查看包含环境变量在内的本地变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值