Unix/Linux环境C编程入门教程(32) 环境变量那些事儿
1. getenv() putenv()setenv()函数介绍
2.Unix/Linux环境变量科普
显示环境变量HOME
设置一个临时的环境变量LANG,只要关闭了窗口环境变量就失效了
使用env命令显示所有的环境变量
使用set命令显示所有本地定义的Shell变量
使用unset命令来清除环境变量
set可以设置某个环境变量的值。清除环境变量的值用unset命令。如果未指定值,则该变量值将被设为NULL。示例如下:
$ export TEST="Test..." #增加一个环境变量TEST
$ env|grep TEST #此命令有输入,证明环境变量TEST已经存在了
TEST=Test...
$ unset $TEST #删除环境变量TEST
$ env|grep TEST #此命令没有输出,证明环境变量TEST已经存在了
使用readonly命令设置只读变量
如果使用了readonly命令的话,变量就不可以被修改或清除了。示例如下:
$ export TEST="Test..." #增加一个环境变量TEST
$ readonly TEST #将环境变量TEST设为只读
$ unset TEST #会发现此变量不能被删除
-bash: unset: TEST: cannot unset: readonly variable
1.Linux的变量种类
按变量的生存周期来划分,Linux变量可分为两类:
1.1 永久的:需要修改配置文件,变量永久生效。
1.2 临时的:使用export命令声明即可,变量在关闭shell时失效。
2.设置变量的三种方法
a在/etc/profile文件中添加变量【对所有用户生效(永久的)】
用vi在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。
例如:编辑/etc/profile文件,添加CLASSPATH变量
# vi /etc/profile
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib
注:修改文件后要想马上生效还要运行# source/etc/profile不然只能在下次重进此用户时生效。
b 修改/etc/bashrc
在执行完/etc/profile 内容之后,如果用户的SHELL 运行的是bash ,那么接着就会执行此文件。另外,当每次一个新的bash shell 被打开时, 该文件被读取。
每个使用bash 的用户在登陆以后执行完/etc/profile 中内容以后都会执行此文件,在新开一个bash 的时候也会执行此文件。因此,如果你想让每个使用bash 的用户每新开一个bash 和每次登陆都执行某些操作,或者给他们定义一些新的环境变量,就可以在这个里面设置。
c在~/.bash_profile文件中增加变量【对单一用户生效(永久的)】
用vi在用户目录下的.bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。
$ vi /home/itcast/.bash.profile
修改成内容:
注:修改文件后要想马上生效还要运行
source /home/itcast/.bash_profile 或. /home/itcast/.bash_profile
不然只能在下次重进此用户时生效。
d 修改~/.bashrc :
该文件包含专用于单个人的bash shell 的bash 信息,当登录时以及每次打开一个新的shell 时, 该该文件被读取。
单个用户此文件的修改会影响到他以后的每一次登陆系统和每一次新开一个bash 。因此,可以在这里设置单个用户的特殊的环境变量或者特殊的操作,那么每次它新登陆系统或者新开一个bash ,都会去获取相应的特殊的环境变量和特殊操作。
e直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】
在shell的命令行下直接使用[export 变量名=变量值] 定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。
3.实战演练
流程设计
首先我们输入一个我们想要查询的环境变量
显示完成之后
利用getenv()函数实现一个whoami命令的功能
setenv设置系统有的USER环境变量并查看
setenv设置系统没有的USE环境变量并查看
putenv设置USER环境变量并查看
然后删除USER环境变量并查看
然后我们设置一个环境变量
源代码实现:
#include <stdio.h> #include <stdlib.h> int main(void) { //char * getenv(const char *name); //int putenv(const char * string); //int setenv(const char *name,const char * value,int overwrite); char envName[32]; printf("\n"); printf("请输入你想要查询的环境变量:\n"); scanf("%s",envName); printf("%s\n",getenv(envName)); printf("开始查看USER环境变量 = %s\n",getenv("USER")); setenv("USER","SETENV1",1); //如果USER环境变量被设置过就设置 printf("设置USER环境变量完成\n"); setenv("USE","SETENV0",0); //如果没有被设置过 就设置 printf("设置USE环境变量完成\n"); printf("查看USE环境变量 = %s\n",getenv("USE")); putenv("USER=test"); printf("设置USER环境变量完成\n"); printf("USER=%s\n",getenv("USER")); unsetenv("USER"); printf("去除USER环境变量完成\n"); printf("USER=%s\n",getenv("USER")); return 0; }
4各个平台的运行情况
在RHEL7上
在RHEL6上
在Solaris11上
在MAC上