1、概念
在Linux系统中,环境变量是一种用来存储系统信息、用户信息以及程序运行时所需信息的变量。环境变量可以在系统启动时设置,也可以在用户登录时设置。环境变量的作用是为了让程序能够获取到一些系统或用户的信息,以便程序正确运行。
一些常用的系统环境变量:
环境变量名称 | 作用 |
---|---|
PATH | 指定可执行程序的搜索路径 |
HOME | 当前用户的主目录路径 |
USER | 当前用户的用户名 |
SHELL | 当前用户的默认shell路径 |
LANG | 指定系统默认的语言环境 |
PWD | 当前工作目录的路径 |
TZ | 指定时区 |
LD_LIBRARY_PATH | 指定动态链接库的搜索路径 |
JAVA_HOME | 指定Java安装目录路径 |
MANPATH | 指定man手册的搜索路径 |
2、控制台命令操作
2.1 env命令
使用env可以列出当前所有环境变量:
2.2 export命令
使用export MY_ENV="Hello"添加一个环境变量,也可以进行修改
2.3 echo命令
使用echo $MY_ENV可以打印出某个环境变量的值:
2.4 unset命令
使用unset可以删除环境变量:
2.5 永久添加环境变量
使用export等命令设置的环境变量通常只在当前会话中有效,重新启动设备后这些临时设置的环境变量会失效。如果你想要永久性地设置环境变量,可以将其添加到配置文件中,如~/.bashrc、~/.bash_profile或者/etc/profile等文件中,其中修改~/.bashrc、~/.bash_profile是针对当前用户有效,修改/etc/profile针对所有用户有效。使用以下命令向~/.bashrc添加一行内容,也可以使用vim打开文件修改:
echo 'export MY_TEST_ENV="Hello"' >> ~/.bashrc
使用source ~/.bashrc命令让修改立刻生效:
3、应用编程
3.1 编程常用接口和变量
3.1.1 getenv() 函数
获取指定环境变量的值。
char *getenv(const char *name)
- 入参:name - 要获取的环境变量的名称
- 返回值:成功时返回指定环境变量的值的字符串指针,失败时返回NULL
3.1.2 setenv() 函数
设置指定环境变量的值,如果不存在则创建。
int setenv(const char *name, const char *value, int overwrite)
- 入参:name - 要设置的环境变量的名称,value - 环境变量的值,overwrite - 是否覆盖已存在的同名环境变量,0表示不覆盖
- 返回值:成功时返回0,失败时返回-1
3.1.3 unsetenv() 函数
删除指定的环境变量。
int unsetenv(const char *name)
- 入参:name - 要删除的环境变量的名称
- 返回值:成功时返回0,失败时返回-1
3.1.4 environ变量
环境变量数组,通过以下声明可以获取:
extern char **environ;
environ = NULL;
3.2 代码测试
编写如下测试代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
extern char **environ;
#define ENV_NAME "MY_NUMBER"
#define ENV_VALUE "1234567"
int main(int argc, char *argv[])
{
const char *str_val = NULL;
// 打印环境变量 最多打印5个
printf("**********system env **********\n");
for(int i = 0; (environ[i] != NULL ) && i < 5; i++)
{
printf("[%d] env : %s\n", i, environ[i]);
}
// 创建一个新的环境变量
printf("**********setenv**********\n");
if((setenv(ENV_NAME, ENV_VALUE, 0)) == -1)
{
printf("setenv err\n");
return 0;
}
else
{
printf("setenv %s ok\n", ENV_NAME);
}
// 获取创建的环境变量
printf("**********getenv**********\n");
if((str_val = getenv(ENV_NAME)) == NULL)
{
printf("getenv %s fail\n", ENV_NAME);
return 0;
}
else
{
printf("getenv ok name:%s value:%s\n", ENV_NAME, str_val);
}
// 删除环境变量
printf("**********unsetenv**********\n");
if(unsetenv(ENV_NAME) == -1)
{
printf("unsetenv err\n");
return 0;
}
else
{
printf("unsetenv %s ok\n", ENV_NAME);
}
// 获取创建的环境变量
printf("**********getenv**********\n");
if((str_val = getenv(ENV_NAME)) == NULL)
{
printf("getenv %s fail\n", ENV_NAME);
return 0;
}
else
{
printf("getenv ok name:%s value:%s\n", ENV_NAME, str_val);
}
return 0;
}
测试代码首先使用environ变量获取系统的环境变量并将前五项进行打印,然后使用setenv进行环境变量的添加,使用getenv进行环境变量的获取,使用unsetenv进行环境变量的删除,删除后再使用getenv无法获取到环境变量,测试结果如下:
4、总结
本文阐述了Linux中环境变量的一些基本概念,列出了控制台操作常用命令和应用编程常用的接口,并编写示例进行简单测试。