【Linux系统编程】环境变量--1

简介: 【Linux系统编程】环境变量--1

介绍


       环境变量是一个系统预定义的全局参数,系统自己开辟空间,将它存在于所有的Shell中,具有继承性,可以存储有关shell会话和工作环境的信息。


       环境变量不是只有一个,而是一堆,是系统内具有特殊用途的变量。如:PATH、PWD、USER、HOME等。


环境变量的认识


       首先,要说明,每当启动系统时,环境变量就已被系统开辟完毕,我们可使用env指令进行查看系统下的所有环境变量以及环境变量对应的数据。


[zhujunhao@bogon code]$ env
........
USER=zhujunhao
PATH=.........
PWD=/home/zhujunhao/code
HOME=/home/zhujunhao
........


       查看单个环境变量的数据时,只需输入:echo 环境变量。如echo环境变量。如echo PATH、echo $PWD等。


[zhujunhao@bogon code]$ echo $USER
zhujunhao   
[zhujunhao@bogon code]$ echo $PWD
/home/zhujunhao/code

       我们也可以创建环境变量。在Linux中,export命令用于创建环境变量,unset删除环境变量。如export ENV=12,创建存放12的环境变量,unset ENV删除ENV环境变量。


[zhujunhao@bogon code]$ export ENV=12
[zhujunhao@bogon code]$ echo $ENV
12
[zhujunhao@bogon ~]$ unset HHH   //删除HHH环境变量


       每个环境变量对应的数据就是其功能的代表,它具有特殊的意义,下面会详细介绍其功能。


命令行参数


      在认识环境变量的功能前,我们来学习一下命令行参数。在Linux中,在我们启动的非图形化界面时的命令行时,实际上就是bash(或shell)给我们输出的命令行字符串,对应的小部分代码样例如下:


printf("[zhujunhao@bogon code]$ ");//输出指令行,不同机器的数据可能有些不同
char buffer[1024];//指令数组,存入相关指令的字符串
scanf("%s, buffer");//从输入流中输入指令


       该命令行还可以与我们写入的代码程序联系起来。在平常我们写入C/C++程序时,主函数中其实也可以有参数。main主函数中的参数是从bash指令行中维护、创建、传参,即这些参数通常在命令行中传递给程序,并可以通过main函数的参数进行访问。样例如下:


int main(int n, char* news[],char* S[]) //其中,第一个整型参数n表示命令行参数的数量。第二个参数news是一个指向命令行参数字符串数组的指针,命令行中输入的字符串都将放入里面。第三个参数S存放的就是系统下的环境变量

       我们先来观察前两个参数的使用。当我们在命令行中运行程序时,输入的参数将会传递给程序,下面的代码是依次访问输入数据的代码。如下:


[zhujunhao@bogon code]$ cat test.cpp
#include <iostream>
#include <cstdio>
using namespace std;
int main(int n, char* news[])
{
    /*int i = 0;
    for (i = 0; i < n; i++)
    {
        cout << "news[" << i << "]: " << news[i] << endl;
    }*/
    //以下效果一样
    for (int i = 0; news[i]; i++)
    {
        cout << "news[" << i << "]: " << news[i] << endl;
    }
    return 0;
}
[zhujunhao@bogon code]$ g++ -o test.exe test.cpp
//以下是输出指令行中的内容
[zhujunhao@bogon code]$ ./test.exe
news[0]: ./test.exe  
[zhujunhao@bogon code]$ ./test.exe -a -b -c -d -e
news[0]: ./test.exe
news[1]: -a
news[2]: -b
news[3]: -c
news[4]: -d
news[5]: -e


       这种使用通常在命令代码中最常见,通过不同选项,让相同的程序执行内部不同的功能。在bash的指令中,运用的其实就是上面的道理来实现命令逻辑,即命令行参数是指令选项的基础。


[zhujunhao@bogon code]$ cat code.cpp   //系统的源代码
#include <iostream>
#include <cstring>
using namespace std;
int main(int n, char *s[])
{
    if (n != 2)
    {
        cout << "Error:\n\tPlease Inoput" << endl;
    }
    else if (strcmp("-1", s[1]) == 0)
    {
        cout << "test.exe: -1" << endl;
    }
    else if (strcmp("-2", s[1]) == 0)
    {
        cout << "test.exe: -2" << endl;
    }
    else if (strcmp("-3", s[1]) == 0)
    {
        cout << "test.exe: -3" << endl;
    }
    else
    {
        cout << "unknow" << endl;
    }
    return 0;   
}
[zhujunhao@bogon code]$ g++ -o code.exe code.cpp
[zhujunhao@bogon code]$ ./code.exe
Error:
    Please Inoput
//下面的-1、-2、-3、-4可理解为对应设计的选项功能,而./code.exe为设计对应的命令
[zhujunhao@bogon code]$ ./code.exe -1 
test.exe: -1
[zhujunhao@bogon code]$ ./code.exe -2
test.exe: -2
[zhujunhao@bogon code]$ ./code.exe -3
test.exe: -3
[zhujunhao@bogon code]$ ./code.exe -4
unknow

       main函数中存放环境变量的第三个参数使用样例如下,该代码的功能是输出系统下的所有环境变量,也就是说,环境变量可以被子进程进行下去。


[zhujunhao@bogon code]$ cat test.cpp
//以下代码的S2[i]将会输出所有的环境变量
#include <iostream>
using namespace std;
int main(int n, char *S1[], char *S2[])
{
    for (int i = 0; S2[i]; i++)
    {
        cout << "S2[" << i << "]:  " << S2[i] << endl;
    }
    return 0;
}

【Linux系统编程】环境变量--2 https://developer.aliyun.com/article/1424730?spm=a2c6h.13148508.setting.17.214f4f0eXZtIwY

相关文章
|
1天前
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
97 78
|
4天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
29 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
28天前
|
缓存 Java Linux
如何解决 Linux 系统中内存使用量耗尽的问题?
如何解决 Linux 系统中内存使用量耗尽的问题?
115 48
|
1天前
|
Ubuntu Linux C++
Win10系统上直接使用linux子系统教程(仅需五步!超简单,快速上手)
本文介绍了如何在Windows 10上安装并使用Linux子系统。首先,通过应用商店安装Windows Terminal和Linux系统(如Ubuntu)。接着,在控制面板中启用“适用于Linux的Windows子系统”并重启电脑。最后,在Windows Terminal中选择安装的Linux系统即可开始使用。文中还提供了注意事项和进一步配置的链接。
11 0
|
24天前
|
Ubuntu Linux 网络安全
linux系统ubuntu中在命令行中打开图形界面的文件夹
在Ubuntu系统中,通过命令行打开图形界面的文件夹是一个高效且实用的操作。无论是使用Nautilus、Dolphin还是Thunar,都可以根据具体桌面环境选择合适的文件管理器。通过上述命令和方法,可以简化日常工作,提高效率。同时,解决权限问题和图形界面问题也能确保操作的顺利进行。掌握这些技巧,可以使Linux操作更加便捷和灵活。
17 3
|
29天前
|
存储 运维 Linux
如何在 Linux 系统中使用 envsubst 命令替换环境变量?
`envsubst` 是 Linux 系统中用于替换文本中环境变量值的实用工具。本文分三部分介绍其工作原理、使用方法及实际应用,包括配置文件替换、脚本执行中环境变量替换和动态生成文件等场景,帮助用户高效利用 `envsubst` 进行开发和运维工作。
50 4
|
28天前
|
Linux
在 Linux 系统中,`find` 命令
在 Linux 系统中,`find` 命令
30 1
|
28天前
|
网络协议 Linux 虚拟化
如何在 Linux 系统中查看进程的详细信息?
如何在 Linux 系统中查看进程的详细信息?
58 1
|
28天前
|
Linux
如何在 Linux 系统中查看进程占用的内存?
如何在 Linux 系统中查看进程占用的内存?
|
12天前
|
存储 Oracle 安全
服务器数据恢复—LINUX系统删除/格式化的数据恢复流程
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs) 下删除或者格式化的数据恢复流程和可行性。