转自:shell环境变量以及set,env,export的区别

一.shell环境变量的分类以及set env export的区别:

set:显示(设置)shell变量,包括的私有变量以及用户变量。不同类的shell有不同的私有变量 bash,ksh,csh每中shell私有变量都不一样。

env:显示(设置)用户变量变量。

export:显示(设置)当前导出成用户变量的shell变量。

export 显示当前导出成用户变量的shell变量,并显示变量的属性(是否只读),按变量名称排序;
declare 同set 一样,显示当前shell的定义的变量,包括用户的环境变量。

注:shell变量定义赋值可在shell中直接“name=value”设置,而不是用set设置,set是用来显示变量和设置sh的参数与选项。

举个例子来讲:

[Oracle@zhou3 ~]$ aaa=bbb --shell变量设定
[oracle@zhou3 ~]$ echo $aaa
bbb
[oracle@zhou3 ~]$ env| grep aaa --设置完当前用户变量并没有
[oracle@zhou3 ~]$ set| grep aaa --shell变量有
aaa=bbb
[oracle@zhou3 ~]$ export| grep aaa --这个指的export也没导出,导出变量也没有
[oracle@zhou3 ~]$ export aaa --那么用export 导出一下
[oracle@zhou3 ~]$ env| grep aaa --发现用户变量内存在了
aaa=bbb

总结:Linux 分 shell变量(set),用户变量(env)。shell变量包含用户变量,export是一种命令工具,是显示那些通过export命令把shell变量中包含的用户变量导入给用户变量的那些变量.

二:使用unset命令来清除环境变量,注意set env  export设置的变量,都可以用unset来清除的

    清除环境变量的值用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
$ TEST="New" #会发现此也变量不能被修改
-bash: TEST: readonly variable

四:最根本的设置、更改变量的配置文件 ~/.bash_profile   ~/.bashrc   ~/.bash_logout

~/.bash_profile  用户登录时被读取,其中包含的命令被执行

~/.bashrc  启动新的shell时被读取,并执行

~/.bash_logout  shell 登录退出时被读取

此外,shell(这里指bash)的初始化过程是这样的:

1.bash 检查文件/etc/profile 是否存在

2. 如果存在,bash 就读取该文件,否则,跳过

3.bash 检查主目录下的文件.bash_profile 是否存在。

4. 如果存在,bash 就读取該文件,否则,跳过

5.bash 检查主目录下的.bash_login 是否存在。

6. 如果存在,bash 就读取该文件,否则,跳过

7.bash 检查主目录下的文件.profile 是否存在

8. 如果存在, bash 就读取该文件,否则,跳过。

这些步骤都执行完后,就出现提示符了, ksh 默认提示符是 $.

五:常见的shell变量

PATH 这个变量包含了一系列由冒号分隔开的目录,系统就从这些目录里寻找可执行文件。如果你输入的可执行文件(例如ls、rc-update或者emerge) 不在这些目录中,系统就无法执行它(除非你输入这个命令的完整路径,如/bin/ls)。 
ROOTPATH 这个变量的功能和PATH相同,但它只罗列出超级用户(root)键入命令时所需检查的目录。 
LDPATH 这个变量包含了一系列用冒号隔开的目录,动态链接器将在这些目录里查找库文件。
MANPATH 这个变量包含了一系列用冒号隔开的目录,命令man会在这些目录里搜索man页面。 
INFODIR 这个变量包含了一系列用冒号隔开的目录,命令info将在这些目录里搜索info页面。 
PAGER 这个变量包含了浏览文件内容的程序的路径(例如less或者more)。 
EDITOR 这个变量包含了修改文件内容的程序(文件编辑器)的路径(比如nano或者vi)。 
KDEDIRS 这个变量包含了一系列用冒号隔开的目录,里面放的是KDE相关的资料。
CONFIG_PROTECT 这个变量包含了一系列用空格隔开的目录,它们在更新的时候会被Portage保护起来。
CONFIG_PROTECT_MASK 这个变量包含了一系列用空格隔开的目录,它们在更新的时候不会被Portage保护起来。

PATH:决定了shell将到哪些目录中寻找命令或程序
HOME:当前用户主目录
MAIL:是指当前用户的邮件存放目录。
SHELL:是指当前用户用的是哪种Shell。
HISTSIZE:是指保存历史命令记录的条数
LOGNAME:是指当前用户的登录名。
HOSTNAME:是指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。
LANG/LANGUGE:是和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。
PS1:是基本提示符,对于root用户是#,对于普通用户是$。
PS2:是附属提示符,默认是“>”。可以通过修改此环境变量来修改当前的命令符,比如下列命令会将提示符修改成字符串“Hello,My NewPrompt :) ”。
# PS1=" Hello,My NewPrompt :) "

声明:本文档可以随意更改,但必须署名原作者

作者:凤凰舞者 qq:578989855

shell变量/环境变量和set/env/export用法_转的更多相关文章

  1. Linux 下Shell变量,环境变量的联系与区别

    Linux下Shell变量,环境变量的联系与区别 by:授客 QQ:1033553122 1.  简介 linux下的变量可分成两种:Shell变量和环境变量. Shell变量,又称本地变量,包括私有 ...

  2. Linux Shell基础 环境变量

    环境变量 环境变量和用户自定义变量最主要的区别在于,环境变量是全局变量,而用户自定义变量是局部变量.用户自定义变量只在当前的 Shell 中生效,而环境变量会在当前 Shell 和这个 Shell 的 ...

  3. awk中使用shell的环境变量

    awk中使用shell的环境变量一:"'$var'"这种写法大家无需改变用'括起awk程序的习惯,是老外常用的写法.如:var="test"awk 'BEGIN ...

  4. Shell基础-环境变量配置文件

    Shell基础-环境变量配置文件 source 配置文件 或者 . 配置文件: 把环境变量写入配置文件后,需要用户重新登陆才能生效,而是用source命令,则能直接生效 主要的配置文件: /etc/p ...

  5. Shell编程——环境变量

    在Shell程序启动时会自动定义一组变量,这组变量就是环境变量,系统中的所有命令都可以使用这些变量参数. 1.如果在父Shell定义环境变量,在子Shell中也能查看到. (1)父Shell与子She ...

  6. Linux编程 11(shell全局环境变量与局变环境变量)

    一.概述 在linux中,很多程序和脚本都通过环境变量来获取系统信息,存储临时数据,配置信息.环境变量是指用来存储有关shell会话和工作环境信息,允许你在内存中存储数据,以便程序或shell中运行的 ...

  7. [Shell]Bash变量:自定义变量 & 环境变量 & 位置参数变量 & 预定义变量

    --------------------------------------------------------------------------------- 变量是计算机内存的单元,其中存放的值 ...

  8. 管道符和作业控制 shell变量 环境变量配置文件

    8.6 管道符和作业控制 8.7/8.8 shell变量 8.9 环境变量配置文件 管道符和作业控制 管道符:表示把一个文件的输出内容传送到后面的命令 grep  用来过滤指定关键词的命令 “|” 为 ...

  9. shell配置环境变量

    我们在使用Xshell开发机时往往会遇到一些问题,比如使用某些命令他会报command not found,,出现这种情况的原因是我们必须要配置一下环境变量,这样就可以在任何path中访问了. 这就需 ...

随机推荐

  1. django queryset合并问题

    今天在实现搜索时遇到一个问题,如何同时搜索model里面的title以及content和category字典 contents = Blog.objects.filter(content__conta ...

  2. 如何使用awk的比较操作符

    对于使用 awk 命令的用户来说,处理一行文本中的数字或者字符串时,使用比较运算符来过滤文本和字符串是十分方便的.下面的部分我们介绍"awk"的比较运算符. awk 中的比较运算符 ...

  3. 【实践】js封装 jq siblings 方法

    思路: 1.获取调用元素的父元素下的所有子元素(即它的所有同辈元素和调用元素本身) 2.遍历调用元素父元素下的所有子元素 除调用元素外的所有元素保存在一个数组里面 代码如下: <!DOCTYPE ...

  4. 转:关于腾讯bugly崩溃的android so符号表使用

    http://www.jikexueyuan.com/course/406_8.html

  5. 读书笔记--MapReduce 适用场景 及 常见应用

    原文:http://blog.csdn.net/smile0198/article/details/20578389 1.MR解决的问题的特点   MR是应大数据的背景产生,其解决的问题的共性为:大问 ...

  6. ExportAsFixedFormat Visio文件另存为其他几种格式的处理

    Visio文件另存为其他几种格式的处理,以及另存为Web文件等相关操作. 1.Visio导出为PDF格式 在一般情况下,PDF格式是较为常用的内容格式,因此Visio文档(Vsd格式)导出为PDF也是 ...

  7. CentOS7 Failed to start LSB: Bring up/down networking. 已解决!!!

    服务器更换了主板之前配置的静态IP发现启动网卡出现异常. 执行 service network restart 出现以下错误 Restarting network (via systemctl):  ...

  8. Discuz常见小问题2-如何在新建的页面上只显示一部分板块

    切换到论坛-版块管理,记住要只显示的板块的gid(比如我的是36)   为某个主导航设置一个单独的php页面(名字自己取)   如果这个页面内容跟首页forum.php完全一样,只是第三行增加了一句话 ...

  9. JMeter 二:执行顺序 & 支持的协议

    执行顺序 参考:http://jmeter.apache.org/usermanual/test_plan.html#executionorder 不同种类元素之间,执行顺序如下: Configura ...

  10. C 输入一串数字,去掉当中含7的和能被7整除的数

    C 输入一串数字,去掉当中含7的和能被7整除的数,每一个数小于10000,数字个数小于100 输入样例:1,7,56,77,87,2,45,42,97,9977 输出:1,2,45 注意:输入个数不确 ...