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

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



一、浅谈命令行参数

      我们的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命令查看。本地变量无法被子进程继承。

相关文章
|
3月前
|
域名解析 网络协议 安全
在Linux中,想在命令行下访问某个网站,并且该网站域名还没有解析,如何做?
在Linux中,想在命令行下访问某个网站,并且该网站域名还没有解析,如何做?
|
15天前
|
Linux 数据安全/隐私保护
适用于 Linux 的最佳命令行下载加速器
适用于 Linux 的最佳命令行下载加速器
37 3
|
28天前
|
监控 数据可视化 Ubuntu
|
3月前
|
Linux
在Linux中,列出几种常见打包工具并写相应解压缩参数。
在Linux中,列出几种常见打包工具并写相应解压缩参数。
|
3月前
|
安全 Linux 开发工具
探索Linux操作系统:从命令行到脚本编程
【8月更文挑战第31天】在这篇文章中,我们将一起潜入Linux操作系统的海洋,从最基础的命令行操作开始,逐步深入到编写实用的脚本。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和实用技能。我们将通过实际代码示例,展示如何在日常工作中利用Linux的强大功能来简化任务和提高效率。准备好了吗?让我们一起开启这段旅程,探索Linux的奥秘吧!
|
3月前
|
Linux
如何让linux显示器命令行界面不显示
若需在命令行界面快速关闭屏幕,可选方法包括:使用`setterm --blank force`立即关闭屏幕;利用`sudo vbetool dpms off`将显示器置于低功耗模式;在X server环境下执行`xset dpms force off`关闭屏幕;或是针对笔记本通过`echo 0 | sudo tee /sys/class/backlight/*/brightness`关闭背光。以上任一方法均可实现屏幕关闭,部分操作需要管理员权限,屏幕通常会在按键或移动鼠标后自动恢复。
156 9
|
3月前
|
Linux Windows
【Linux】grub命令行引导进入windows系统
【8月更文挑战第20天】在Linux中通过GRUB命令行引导Windows的方法包括:1) 进入GRUB命令行模式,启动时按`c`键;2) 使用`ls`查找含Windows引导文件的分区,如`bootmgr`或`ntldr`;3) 设置根设备`root=(hd0,msdos3)`与链加载器`chainloader +1`;4) 输入`boot`命令启动Windows。请注意实际步骤可能因系统配置而异。
387 2
|
3月前
|
Linux
探索Linux操作系统:命令行与脚本编程基础
【8月更文挑战第31天】在这篇文章中,我们将一起踏上一段旅程,深入探索Linux操作系统的奥秘。通过学习命令行的使用和编写简单的脚本,你将能够更高效地与你的计算机进行交流。无论你是新手还是有经验的用户,本文都将为你打开一扇通往Linux世界的大门。准备好了吗?让我们开始吧!
|
3月前
|
运维 监控 Linux
深入理解Linux系统运维:命令行与脚本的奥秘
【8月更文挑战第30天】在Linux的世界里,命令行是运维人员的灵魂之窗。掌握命令行,就像握住了一把钥匙,能开启系统管理的宝藏箱。本文将带你走进Linux的命令行世界,通过实际代码示例,解锁那些高效管理和维护系统的秘籍。你将学到不仅仅是命令本身,更是如何将这些命令编织成强大的脚本,让日常的运维工作变得游刃有余。准备好跟随我的步伐,一起深入探索Linux命令行与脚本的奥秘吧!
|
3月前
|
Linux
Linux命令行文档查看cat、less、more、head、tail和图片查看
Linux命令行文档查看cat、less、more、head、tail和图片查看
55 0