环境变量

环境变量和用户自定义变量最主要的区别在于,环境变量是全局变量,而用户自定义变量是局部变量。用户自定义变量只在当前的 Shell 中生效,而环境变量会在当前 Shell 和这个 Shell 的所有子 Shell 中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的 Shell 中永久生效。如果环境变量不写入配置文件,那么当前 Shell 一旦终止,这个环境变量就会消失。

在 Linux 中一般通过环境变量配置操作系统的环境,如提示符、查找命令的路径、用户家目录等,这些系统默认的环境变量的变量名是固定的,我们只能修改变量的值。

环境变量设置

t通过 export 命令将变量声明为环境变量。命令如下:

[root@localhost ~]# export JAVAHOME="/usr/local/bin/jdk-8u131"

也可以先把变量声明为本地变量,再用 export 声明为环境变量,命令如下:

[root@localhost ~]# JAVAHOME="/usr/local/bin/jdk-8u131"
[root@localhost ~]# export JAVAHOME

用户自定义变量和环境变量的区别就是:用户自定义变量只能在当前 Shell 中有效,而环境变量在当前 Shell 和所有子 Shell 中有效。比如:

[root@localhost ~]# name="zhang san"
#把姓名声明为本地变量
[root@localhost ~]# export age=""
#年龄声明为本地变量
[root@localhost ~]# gender=male
#性别声明为本地变量
[root@localhost ~]# export gender
#性别升级为环境变量

然后使用 set命令查询一下这些变量:

[root@localhost ~]# set
…省略部分内容…
gender=male
name='zhang san'
age=

在当前 Shell 中可以看到这三个变量。

再调用一次bash,也就是进入子Shell

[root@localhost ~]# bash
[root@localhost ~]# set
#再次查询变量
…省略部分输出…
age=
gender=male

在子Shell中只能看到环境变量"age"和"gender",而不能查询到用户自定义变量"name"

环境变量查询

set 既可以查询所有的变量,也可以查询环境变量,也可以使用 env 命进行环境变量的查询,命令如下:

[root@localhost ~]# env
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
SHELL=/bin/bash
…省略部分输出…

其中,set 命令可以查看所有变量,而 env 命令只能查看环境变量。

环境变量删除

通过unset 命令可以删除环境变量,命令如下:

[root@localhost ~]# unset gender
[root@localhost ~]# env | grep gender
#删除环境变量gender

PATH变量 :系统查找命令的路径

脚本在 Linux 中运行时,需要使用绝对路径或相对路径指定这个脚本所在的位置。PATH 环境变量中指定了系统命令的绝对路径,PATH 变量的值是用":"分隔的路径 。如果输入了一个命令,系统就会到 PATH 变量定义的路径中去寻找是否有可以执行的程序,如果找到则执行,否则会报"命令没有发现"的错误。也可以把用户自己写的脚本复制到 PATH 变量定义的路径中,通过脚本名来直接运行,例如。

[root@localhost ~]# cp /root/sh/hello.sh /bin/
#复制hello.shi到/bin/目录中
[root@localhost ~]# hello.sh
hello world

还可以通过将脚本对应的全路径追加到环境变量中,然后直接再通过脚本名来直接运行

[root@localhost ~]# PATH="$PATH":/root/sh
#在变量PATH的后面,加入/root/sh目录
[root@localhost ~]#hello.sh
hello world

PS1变量:命令提示符设置

PS1 是用来定义命令行的提示符的,可以按照我们自己的需求来定义自己喜欢的提示符。

PS1 可以支持以下这些选项:

  • \d:显示曰期,格式为"星期 月 日"。
  • \H:显示完整的主机名。如默认主机名"localhost.localdomain"。
  • \h:显示简写的主机名。如默认主机名"localhost"。
  • \t:显示 24 小时制时间,格式为"HH:MM:SS"。
  • \T:显示 12 小时制时间,格式为"HH:MM:SS"。
  • \A:显示 24 小时制时间,格式为"HH:MM"。
  • \@:显示 12 小时制时间,格式为"HH:MM am/pm"。
  • \u:显示当前用户名。
  • \v:显示 Bash 的版本信息。
  • \w:显示当前所在目录的完整名称。
  • \W:显示当前所在目录的最后一个目录。
  • \#:执行的第几条命令。
  • \$:提示符。如果是 root 用户,则会显示提示符为"#";如果是普通用户,则会显示提示符为"$"。

使用示例

PS1 变量的默认值,如下:

[root@localhost bin]# echo $PS1
[\u@\h \W]\$

默认的提示符是显示"[用户名@简写主机名最后所在目录]提示符"

在 PS1 变量中,如果是可以解释的符号,如"\u"、"\h"等,则显示这个符号的作用;如果是不能解释的符号,如"@"或"空格",则原符号输出。

修改提示符为'[用户名@当前时间当前所在完整目录]提示符'

[root@localhost ~]# PS1='[\u@\t \w]\$'

注意 在PS1 变量的值要用单引号包含,否则设置不生效。而且这些提示符的修改同样是临时生效的,一旦注销或重启系统就会消失。要想永久生效,必须写入环境变量配置文件。

LANG变量:定义系统的主语系环境

LANG 变量的默认值如下:

[root@localhost bin]# echo $LANG
en_US.UTF-
使用 locale 命令查询当前系统使用的是什么语言,命令如下:
[root@localhost bin]# locale
LANG=en_US.UTF-
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

其中LANG 是定义系统语言的变量,LC_ALL 是定义整体语言的变量。可以通过文件 /etc/sysconfig/i18n 定义系统的默认语言,查看一下这个文件的内容,如下:

[root@localhost src]# cat /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"

如果系统重启,则会从默认配置文件 /etc/sysconfig/i18n 中读出系统字符集,然后赋予变量 LANG,让这个字符集生效。 

 

Linux Shell基础 环境变量的更多相关文章

  1. Linux Shell基础 环境变量配置文件

    source命令:使环境变量配置文件强制生效 source 命令会强制执行脚本中的全部命令,而忽略脚本文件的权限.该命令主要用于让重新配置的环境变量配置文件强制生效.source 命令格式如下: [r ...

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

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

  3. linux笔记:shell基础-环境变量配置文件

    source命令(重新读入配置文件,不用重启就直接生效): 环境变量配置文件: linux中的环境变量配置文件(~代表当前用户的家目录): 配置文件读取顺序: /etc/profile 文件的作用:

  4. 【Linux】Shell三类变量的作用域——linux shell “永久环境变量”、“临时环境变量”和"普通变量"之完全解读

      2015-05-08 00:15 3896人阅读 评论(10) 收藏 举报 本文章已收录于:   分类: 软件开发进阶(419) 作者同类文章X Unix/Linux杂项(118) 作者同类文章X ...

  5. Linux Shell基础 位置参数变量、预定义变量

    位置参数变量 在 Linux 的命令行中,当一条命令或脚本执行时,后面可以跟多个参数,我们使用位置参数变量来表示这些参数.其中,$0 代表命令行本身,$1 代表第 1 个参数,$2 代表第 2 个参数 ...

  6. Linux Shell基础篇——变量

    一.Shell中的变量 注:这里所说的Shell是Bash Shell,我姑且统称为Shell. Shell中的变量分为用户自定义变量.环境变量.位置参数变量.预定义变量.在Shell中,变量的默认类 ...

  7. Linux编程 21 shell编程(环境变量,用户变量,命令替换)

    一.概述 这篇介绍shell的变量使用,跟其实语言一样,都有声明变量,使用变量,在shell中变量允许你临时地将信息存储中shell脚本中,以便和脚本的其他命令一起使用. 1.1 环境变量 在前面章节 ...

  8. Linux Shell基础(下)

    Linux Shell基础(下) 目录 一.shell特殊符号cut命令 二.cut.sort.wc.uniq命令 三.tee.tr.split命令 四.简易审计系统 五.fork, exec, so ...

  9. Linux shell基础知识(上)

    Linux shell基础知识(上) 目录 一.shell介绍 二.命令历史 三.命令补全和别名 四.通配符 五.输入输出重定向 六.管道符和作业控制 七.shell变量 八.环境变量配置文件 九.b ...

随机推荐

  1. 配置LANMP环境(1)-- 安装虚拟机VMware与安装CentOS7.2系统

    一.安装虚拟机VMware 1.下载VMware傻瓜式安装 2.配置                二.安装CentOS7.2系统 镜像下载链接 1.放入ios镜像文件之后,启动虚拟机,选择7.0+的 ...

  2. IE6鼠标悬停Bug

    当鼠标放置于某个文字链接之上,文字或文字背景改变为其他颜色或样式的效果是我们最经常见到的鼠标悬停效果.在CSS中,这个效果靠伪元素:hover来实现,只不过在文字链接中:hover被应用在了锚点元素& ...

  3. LOCAL_SHARED_LIBRARIES 与 LOCAL_LDLIBS,LOCAL_LDFLAGS的区别

    LOCAL_LDLIBS :链接的库不产生依赖关系,一般用于不需要重新编译的库,如库不存在,则会报错找不到.且貌似只能链接那些存在于系统目录下本模块需要连接的库.如果某一个库既有动态库又有静态库,那么 ...

  4. RL for Robots

    1.Robot gains Social Intelligence through Multimodal Deep Reinforcement Learning 这篇文章使用DQN去训练一个机器人,使 ...

  5. JavaScript 与 Java 是两种完全不同的语言,无论在概念还是设计上。

    JavaScript 与 Java 是两种完全不同的语言,无论在概念还是设计上. Java(由 Sun 发明)是更复杂的编程语言. ECMA-262 是 JavaScript 标准的官方名称. Jav ...

  6. SlidingMenu官方实例分析6——ResponsiveUIActivity

    ResponsiveUIActivity 这个类实现的是一个响应适UI设计重点是布局的设计: layout布局如下: layout-large-land布局如下: layout-xlarge布局如下: ...

  7. LeetCode Problem 35:Search Insert Position

    描述:Given a sorted array and a target value, return the index if the target is found. If not, return ...

  8. android实现卸载提示

    这篇文章是整理的以前用过的一个功能,由于多种原因现在停用了,也希望这篇文章能帮助一些android入门的小童鞋.android是不提供监控卸载自己的功能的,这里使用了监控android日志的功能,an ...

  9. python学习【第三篇】基本数据类型

    Number(数字) int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取 ...

  10. websocket集群情况下Nginx 代理出现的坑

    那么问题的背景: A想给B发送socket 消息 ! A这消息 这时候被Nginx 轮询发到了C 服务器上! 擦!   这时候就蛋疼了!   要接收消息那个人在B服务器上!     B就这样苦逼的收不 ...