博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell变量/环境变量和set/env/export用法_转
阅读量:5950 次
发布时间:2019-06-19

本文共 2845 字,大约阅读时间需要 9 分钟。

转自:

一.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

总结: 分 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

转载地址:http://geixx.baihongyu.com/

你可能感兴趣的文章
详解SpringMVC中Controller的方法中参数的工作原理
查看>>
2018-10-08
查看>>
Spring Cloud使用总结
查看>>
CentOS7(64)环境使用rpm命令安装gcc
查看>>
CDN与智能DNS原理和应用
查看>>
Android入门(十一)SQLite CURD
查看>>
Eclipse导入Android项目的方法(转)
查看>>
leetcode - Search in Rotated Sorted Array II
查看>>
coursera课程Text Retrieval and Search Engines之Week 2 Overview
查看>>
如何导出已有的谷歌插件,又如何把导出的插件安装到360浏览器中,又如何对插件小修小改?...
查看>>
[PWA] Enable Push Notification in your web app
查看>>
【转载】JS中bind方法与函数柯里化
查看>>
隐藏与显示铵钮
查看>>
zookeeper常用命令
查看>>
不懂圣杯布局?5种方式包教包会
查看>>
基于React跑一个简易版九宫格抽奖
查看>>
iOS 开发资源汇总 肯定有你想要的资源(Continuously updated)
查看>>
微信小程序横向(scroll x)滚动 scroll view
查看>>
如何重置 Docker 里的 gitlab root 用户密码
查看>>
电商系统设计之商品 (下)
查看>>