环境变量

环境变量和用户自定义变量最主要的区别在于,环境变量是全局变量,而用户自定义变量是局部变量。用户自定义变量只在当前的 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. 用关键字interface定义接口,通过关键字implements来实现接口

    [定义]Java中,能够完成特定功能的,由若干属性和方法组织成的,相对独立的属性和方法的集合. [用途]实现类的多继承,以解决Java只能单继承,不支持多继承的问题. [特点] 用关键字interfa ...

  2. JS异步笔记

    Promise 最早接触异步是在.net中,当时还是比较流行使用基于控件的BackgroundWorker,其自身通过子线程的方式来异步处理一些情况,并且封装了一些功能与主线程通信.后来,开始使用Th ...

  3. 2017 css新特性

    2017年要学习的三个CSS新特性 这是翻译的一篇文章,原文是:3 New CSS Features to Learn in 2017,翻译的不是很好,如有疑问欢迎指出. 新的一年,我们有一系列新的东 ...

  4. hoj 2543 (费用流 拆边)

    http://acm.hit.edu.cn/hoj/problem/view?id=2543 1.将原图中的每条边(u, v)拆成两条:(u, v, Ci, 0), (u, v, ∞, Ei) 2.购 ...

  5. [Spring Data MongoDB]学习笔记--MapReduce

    mongodb的MapReduce主要包含两个方法:map和reduce. 举个例子,假设现在有下面3条记录 { "_id" : ObjectId("4e5ff893c0 ...

  6. 【BZOJ3029】守卫者的挑战 概率+背包

    [BZOJ3029]守卫者的挑战 Description 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过.“我,Nizem, ...

  7. 清空javascript数组数据

    var arrayObj = new Array(); arrayObj.splice(0, arrayObj.length);//清空数组数据

  8. 关于微信小程序下拉出现三个小点

    包子这天看美团外卖的小程序,再瞅瞅自己的背景色,发现,美团下拉的时候有三个小点,但是我自己的校车徐下拉的时候没有三个小点,很是郁闷,于是各种的找各种的找,发现,这三个小点是微信小程序自带的,你只需要设 ...

  9. MySql 批处理

    1. 批处理 批处理只针对更新(增,删,改)语句. MySql 的批处理默认是关闭的, 需要在 url 中配置参数: jdbc:mysal://localhost:3306/mydb1?rewrite ...

  10. fecha的使用

    项目中时间的处理是无法避免的,时间的处理方式有很多,这里介绍一下fecha的使用 fecha是一个日期格式化和解析的js库,它提供了强大的日期处理功能,功能强大且只有2k大小.安装方式简单,只需要 n ...