【Linux 10】环境变量

🌈 Ⅰ 命令行参数

⭐ 1. main 函数的参数

  • 在有些地方可能看到 main 函数会像下面这样带着形参,这些参数可带可不带。
int main(int argc, char* argv[])

⭐ 2. main 函数参数的意义

  1. char* argv[]:指针数组,数组中的每个元素都指向一个字符串。
  2. int argc:argv 数组中的元素个数。

⭐ 3. 查看 argv 数组的内容

  • 使用如下代码查看 argv 数组中的内容。
#include <stdio.h>
#include <unistd.h>

int main(int argc, char* argv[])
{
	for (int i = 0; i < argc; i++)
 		printf("argv[%d]: %s\n",i, argv[i]);                                                         

	return 0;
}

在这里插入图片描述

⭐ 4. 命令行参数结论

  • 在命令行输入的叫做命令行字符串
  • argc 用来记录在命令行中输入的参数个数。
  • argv 用来记录在命令行中输入的每个参数,会将命令行字符串中的空格替换成 \0,然后以参数的形式传递给 main 函数,argv 数组以 NULL 结尾
  • 一般情况下,0 号位置存的都是程序的路径 + 名称,后面的 -a -b 这些选项就是和该进程匹配的选项

在这里插入图片描述

⭐ 5. 为什么要有命令行参数

  • 命令行参数本质是交给程序不同的选项,用来定制不同的程序功能
  • 通过如下代码查看如何通过使用不同选项实现不同功能,此处只演示一个选项的情况。
#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main(int argc, char* argv[])
{
	if (argc != 2)
	{
		printf("%s 的可用选项 -[a,b,c,d]\n", argv[0]);
		return 1;
	}                                                        
		
	if (0 == strcmp(argv[1], "-a"))			// 输入的选项是 -a
		printf("功能1\n");
	else if (0 == strcmp(argv[1], "-b"))	// 输入的选项是 -b
		printf("功能2\n");
	else if (0 == strcmp(argv[1], "-c"))	// 输入的选项是 -c
		printf("功能3\n");
	else if (0 == strcmp(argv[1], "-d"))	// 输入的选项是 -d
		printf("功能4\n");	
		
	return 0;
}

在这里插入图片描述

  • 通过上述示例,能够理解清楚 Linux 中的其他指令 (如: ls -l) 大致是如何实现子功能的。

⭐ 6. 命令行参数传递由谁执行

  • 父进程 bash,在命令行中启动的程序,都会变成进程,这些进程都是 bash 的子进程。

🌈 Ⅱ 环境变量基本概念

  • 环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数
  • Linux 中的很多指令在命令行中不需要输入路径就可以执行,而我们自己编写的可执行程序不带 ./ 就无法执行,原因就在于没有给自己的可执行程序配置环境变量。
  • 在 Linux 中,存在一些全局的设置,告诉命令行解释器,应该去哪些路径下寻找可执行程序,这就是环境变量的作用。

在这里插入图片描述

⭐ 1. 常见环境变量

  1. PATH:指定命令的搜索路径。
  2. HOME:指定用户的主工作目录 (即用户登录到 Linux 系统中时的默认目录)。
  3. SHELL:当前的 shell,它的值通常位 /bin/bash

🌈 Ⅲ 查看环境变量

指令

echo $环境变量名 

示例

  • 系统中的很多配置,在登录 Linux 系统的时候,已经被加载到了 bash 进程 (内存) 中。
  • bash 在执行命令的时候,需要先找到命令,下图的所有路径就是 bash 在执行命令时默认的搜索路径。
  • 如果在下面的所有路径中没有找到你想要的指令,就会报 command not found,如果找到了就会加载并运行该指令。

在这里插入图片描述

🌈 Ⅳ 配置环境变量

  • 让我自己写的可执行程序变得和系统指令一样有尊严,不需要带 ./ 一样能直接执行。

⭐ 1. 将程序放入系统路径 (临时)

  • 将自己写的程序随便拷贝到某个系统自带的环境变量目录中,相当于将自己写的程序安装到了 Linux 系统里。但是,不推荐将自己的可执行程序放到系统的可执行程序路径中
  • 该方法为内存级,不会永久保留配置,下次登录 Linux 系统时就会恢复原样。

在这里插入图片描述

⭐ 2. 往系统路径列表中添加新路径 (临时)

PATH=$PATH:自己写的程序路径
  • 将自己写的程序的路径添加到系统路径列表中,在任意目录执行自己的可执行程序时,就会自动在系统路径中寻找对应路径下的程序。
  • 该方法为内存级,不会永久保留配置,下次登录 Linux 系统时就会恢复原样。

在这里插入图片描述

⭐ 3. 往系统路径列表中添加新路径 (永久)

  • 上述两种配置环境变量的方法都属于内存级的,在下次登录 Linux 中就会恢复原样。

1. 解释系统环境变量为何能永久存在

  • 最开始的环境变量不在内存中,而是在系统的对应配置文件中。
  • 系统在登录 Linux 时,会先创建 bash 进程,bash 进程间就会读取这些配置文件,然后将配置文件中的环境变量在 bash 进程中拷贝一份。
  • 也就是说,将系统的配置文件改了,才能让自己的程序路径永久存在于环境变量的路径列表中。

2. 将程序路径写入配置文件

  • 在用户根目录中,有一个隐藏的 .bash_profile 文件,只需要将自己程序的所在路径添加到该文件中然后再重新登录 Linux 系统即可。

在这里插入图片描述

在这里插入图片描述

🌈 Ⅴ 环境变量相关命令

⭐ 1. echo 显示某个环境变量的值

指令echo $环境变量名

示例

在这里插入图片描述

⭐ 2. export 设置一个新的环境变量

指令export THIS_IS_MY_ENV=你的环境变量名

功能:自定义一个内存级的环境变量。

示例:创建一个名为 helloworld 的环境变量。

在这里插入图片描述

⭐ 3. env 显示所有的环境变量

功能:显示所有的环境变量,以及每个环境变量所对应的路径列表。

示例

在这里插入图片描述

⭐ 4. unset 清除环境变量

指令unset THIS_IS_MY_ENV

功能:清除所有通过 export 设置的环境变量。

示例

在这里插入图片描述

相关推荐

  1. linux设置环境变量

    2024-04-05 00:58:01       58 阅读
  2. Linux环境变量

    2024-04-05 00:58:01       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-05 00:58:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-05 00:58:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-05 00:58:01       87 阅读
  4. Python语言-面向对象

    2024-04-05 00:58:01       96 阅读

热门阅读

  1. Linux的学习之路:4、权限

    2024-04-05 00:58:01       39 阅读
  2. 5.2 SSH和交换机端口安全概述

    2024-04-05 00:58:01       38 阅读
  3. pyscenic出现bug

    2024-04-05 00:58:01       40 阅读
  4. 一些常见的Prometheus+Grafana问题和答案:

    2024-04-05 00:58:01       34 阅读
  5. 计算机笔记(2)续20个

    2024-04-05 00:58:01       38 阅读
  6. 【DevOps工具篇】Keycloak中设置与OpenLDAP认证集成

    2024-04-05 00:58:01       33 阅读