首页 > 系统相关 >【Linux】详谈命令行参数&&环境变量

【Linux】详谈命令行参数&&环境变量

时间:2024-03-23 23:31:49浏览次数:17  
标签:&& env 参数 命令行 Linux 详谈 PATH main 环境变量

目录

一、浅谈命令行参数

二、环境变量

2.1环境变量的内涵以及理解

2.2PATH环境变量:

2.3输入程序名就能运行我们的程序

2.4系统中的环境变量

2.5导出环境变量

 三、main函数的第三个参数

3.1获得环境变量的三种方法

 四、本地变量


一、浅谈命令行参数

        我们的main函数正常来说是没有参数的,其实我们也可以给我们的main函数加上参数。main函数的第一个参数为argc,参数类型为int,第二个参数为argv,参数类型为char*类型的指针数组(也叫命令行参数表),该指针数组以NULL结尾。当我们在命令行解释器输入一串指令时,命令行解释器会将这一串指令当成一个字符串,并以空格作为分隔符,将这个字符串分割成更小的字符串,并将这些更小的字符串分别存到argv数组中。main函数的argc和argv参数是由命令行解释器(通常是操作系统的shell/bash)维护的。当你从命令行运行一个程序时,命令行解释器会负责解析命令行中的各个部分,包括程序名(即argv[0])和传递给程序的任何选项(即argv[1]、argv[2]等)。解释器还会计算选项的数量,并将其作为argc的值传递给main函数。命令行解释器会负责将这些信息正确地传递给程序的main函数,以便程序能够使用它们。

  1 #include <stdio.h>
  2 
  3 int main(int argc, char* argv[])                                                                                                             
  4 {
  5     int i = 0;
  6     for(i = 0; i<argc; i++)
  7     {
  8         printf("%d, %s\n", i, argv[i]);
  9     }
 10     return 0;
 11 }

        有了命令行参数表,我们就可以通过在命令行中传不同的选项,让我们的同一个程序执行它内部不同的功能。这也就可以解释为什么同一条指令我们在命令行中传递不同的选项它可以帮我们执行不同的功能。所以选项的本质就是命令行参数命令行参数,是Linux指令选项的基础

二、环境变量

2.1环境变量的内涵以及理解

        环境变量是很多的变量,彼此之间没有关系。环境变量一般是系统内置的,具有特殊用途的变量。 系统的环境变量,本质就是系统自己开辟空间,给这块空间名字和内容即可环境变量具有全局属性,会被所有子进程包括孙子进程继承所有我们目前看到的环境变量都是内存级的,都保存在bash的上下文中,bash继承退出了,这些内存级的环境变量自然就没了。所以系统的环境变量最初始一定都是保存在磁盘当中的,当一个bash进程启动时,再从磁盘中读取相应的环境变量,在内存中形成环境变量表,所以下面讲到的export命令是在内存级的环境变量表中加入环境变量,不会改变内存中的环境变量。这也是为什么我们每次修改了环境变量的值,但是当我们重新启动bash环境变量又恢复成原来的环境变量的原因。

2.2PATH环境变量:

        在系统当中,存在一个全局的环境变量,叫做PATH,保存的是我们的操作系统默认的搜索可执行程序的搜索路径。当我们执行某一条指令的时候,系统默认会到PATH环境变量保存的目录中去搜索指令对应的可执行程序(这里我们必须清楚的是,Linux中指令的本质就是可执行程序)。查询PATH变量的方法:

echo $PATH

         上面的路径以冒号作为分隔符。我们平常所用的指令对应的可执行程序已经被存放到了系统环境变量对应的目录中。所以我们平常只需要输入指令就可以正常运行,系统默认会到指定的目录中去找你输入的指令。而我们自己写的可执行程序由于没有放到系统对应的保存环境变量的目录中,所以我们的可执行程序要运行必须在程序名前加上./或者是指定路径名,才能让系统找到我们的程序。which在搜索的时候就是根据PATH对应的路径去找的

2.3输入程序名就能运行我们的程序

为了输入程序名就能运行我们的程序,我们有两种做法:

1、添加某段路径到PATH变量中

PATH=路径:$PATH

 2、将我们的程序直接拷贝到PATH变量对应的路径中。

2.4系统中的环境变量

env:查看此时系统中的环境变量

 

2.5导出环境变量

export :导入到bash的环境变量表中

 假如我向系统中导入一个AGE的环境变量

 再用env查询,系统中就多了一个AGE环境变量。

 三、main函数的第三个参数

        其实main函数最多可以传递三个参数,第三个参数叫env,参数类型同样为char*的指针数组,env数组中保存的正是该进程拥有的环境变量。命令行解释器/bash进程内部自己维护了一张表,env表,env表中每一个位置都指向了一个环境变量,我们自己运行起来的进程都是bash的子进程(不考虑fork),当我们的程序运行起来时,bash进程会把它维护的env表的起始地址传递给我们程序的main函数的env参数,此时我们的进程也就拿到了父进程给我们的环境变量。所以,环境变量是可以被子进程继承的

3.1获得环境变量的三种方法

1、通过main函数参数env

2、通过getenv函数

3、通过第三方environ参数

 四、本地变量

不能通过env命令查看,可以通过set命令查看。本地变量无法被子进程继承。

标签:&&,env,参数,命令行,Linux,详谈,PATH,main,环境变量
From: https://blog.csdn.net/m0_74265792/article/details/136880416

相关文章

  • 在Linux中,如何判断一个进程是否存活,如果不存活,如何告实现警?
    在Linux中,判断一个进程是否存活并实现告警,可以通过一系列步骤来完成。以下是详细的步骤说明:1.判断进程是否存活使用ps命令:ps命令是Linux中用来查看当前进程状态的常用命令。你可以结合grep来过滤出特定进程的信息。例如,要查看名为"example_process"的进程是否存在,可以运行以下......
  • 在Linux中,有一个文件,10行9列,如何打印最后一列,如何打印最前一列?
    在Linux中,打印文本文件的某一列可以使用awk或cut命令。这里分别演示如何打印一个10行9列文件的最后一列和最前一列:1.打印最后一列:使用awk命令:awk'{print$NF}'filename.txt这里的NF是内部变量,表示当前行的字段数量,所以$NF就是最后一个字段,也就是最后一列。使用cut命令:......
  • 在Linux中,如何查看内核版本?内核版本信息包含什么?
    在Linux中查看内核版本有多种方法,下面列举了几种常用且详细的命令:方法一:uname命令仅查看内核版本:uname-r这个命令会打印出当前系统运行的内核版本号,例如:4.15.0-72-generic。查看详细系统信息:uname-a这个命令会输出所有与内核相关的详细信息,包括内核名称、主机名、......
  • 01.绝对路径和相对路径(Linux基本概念)
    基础认知:        电脑的目录结构是一颗多叉树。不管是Linux还是windows,目录结构都是一样的。所以我们在查找某个目录或者文件的时候,本质就是在多叉树结点的查找。多叉树示例图如下:                ​​​​​​​        ​​​​​​​  ......
  • 在Linux中,内存怎么看?磁盘状态怎么看?
    在Linux系统中,查看内存和磁盘状态主要依靠一系列命令行工具来进行。以下是分别查看内存和磁盘状态的详细说明:1.查看内存状态:free命令free-h#或者free-m用以显示内存使用状况,单位可以是人类友好的KB,MB,GB等这个命令会显示系统的总内存、已使用内存、空闲内存、缓......
  • 在Linux中,什么是Linux操作系统,它的特点是什么?
    Linux操作系统是一种免费使用和自由传播的类UNIX操作系统,其内核最初由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布。它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。Linux操作系统的主要特点如下:开源性:Linux操作系统的......
  • Linux和Windows时间不一致问题
    问题描述装过双系统或者虚拟机装Linux的人都知道,Linux的时间和Windows往往是不同步的,在编写跨平台程序的时候特别是对时间敏感的代码就带来很大的困扰解决办法这个问题可以在Linux下解决先用命令查看时区timedatectl如果系统刚刚装好,没有设置好时区,有可能默认的是America/......
  • 实验:基于Red Hat Enterprise Linux系统在终端使用vim进行拷贝、删除、查找、替换、保
    目录一.实验目的二.实验内容三.实验设计描述及实验结果        一.vim文本编译器模式切换:    命令模式:        输入模式:        末行模式:        二.复制、删除:        三.查找字符串:        四.替换:......
  • Linux线程互斥
    文章目录Linux线程互斥mutex接口初始化互斥量销毁互斥量加锁和解锁加锁解锁的原理使用示例Linux线程互斥进程线程间的互斥相关背景概念临界资源:多线程执行流共享的资源就叫做临界资源临界区:每个线程内部,访问临界资源的代码,就叫做临界区互斥:任何时刻,互斥保证有......
  • linux下的进程(二)
    进程间的通信目录进程间的通信信号信号由谁产生?信号的处理信号的捕获信号的发送发送多个信号信号集阻塞式等待信号信号什么是信号?信号是给程序提供一种可以处理异步事件的方法,它利用软中断实现。不能定义信号,所有信号都是由系统预定义的信号由谁产生?1.由sh......