环境变量

环境变量和用户自定义变量最主要的区别在于,环境变量是全局变量,而用户自定义变量是局部变量。用户自定义变量只在当前的 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. socket心跳检测

    一.什么是心跳检测 判断对方(设备,进程或其它网元)是否正常动行,一般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉.用于检测TCP的异常断开. 基本原因是服务器端不能 ...

  2. map--C++ STL 学习

    map–C++ STL 学习   Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力.   说下map内 ...

  3. Android Studio--NDK编译C代码为.so文件,JNI调用

    前言: 从Android Studio开始,就支持jni和.so库调用了. 环境: Windows 7+Android Studio2.1.2+NDK版本:android-ndk-r10e 准备工作: ...

  4. 【转】 在Eclipse中使用JUnit4进行单元测试(中级篇)

    http://blog.csdn.net/andycpp/article/details/1327346 我们继续对初级篇中的例子进行分析.初级篇中我们使用Eclipse自动生成了一个测试框架,在这篇 ...

  5. Unity官方发布热更新方案性能对照

    孙广东  2016.3.11 Unity应用的iOS热更新 作者:丁治宇 Unity TechnologiesChina Agenda •  什么是热更新 •  为何要热更新 •  怎样在iOS 上对 ...

  6. Unity3D学习笔记——UIScrollBar和UIScrollView使用

    UIScrollBar和UIScrollView结合使用效果图如下: 一:使用步骤  1.创建一个UIScrollView   2.然后创建一个UIScrollBar 3.打开UIScrollView ...

  7. day15数据类型

    一.浮点数 之前讲过的,有序 : 列表 元组 字符串 数字类 :int flost complex bool 散列累 :集合和字典 浮点数:--包含所有小数 和复数 复数:a +bj   实部和虚部 ...

  8. Nginx系列之负载均衡和反响代理

    NGINX介绍 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行 其特点是占有内存少,并发能力强,事实上nginx ...

  9. 使用bbed编辑研究oracle数据块结构

    bbed是随oracle软件公布的一款数据块查看和编辑工具,作为一款内部工具.bbed的功能很强大,可是假设使用不当可能给数据库造成无法挽回的损失.因此.我们建议在使用bbed改动数据块前备份被改动的 ...

  10. Cocos2d-x Lua中多场景切换生命周期

    在多个场景切换时候,场景的生命周期会更加复杂.这一节我们介绍一下场景切换生命周期.多个场景切换时候分为几种情况:情况1,使用pushScene函数从实现GameScene场景进入SettingScen ...