变量类型
变量可分为两类:环境变量(全局变量,用到的是比较少的)和局部变量。
环境变量也可称为全局变量,是系统预先定义好的,可以在创建它们的 shell 及其派生出来的任意子进程 shell 中使用。
比如:
[root@node1 ~]# echo $USER
root
局部变量只能在创建它们的 shell 函数或脚本中使用。
还有一些变量是用户创建的,其它的则是专用 shell 变量。
环境变量(全局变量)
环境变量用于定义 Shell 的运行环境,保证 Shell 命令的正确执行,Shell通过环境变量来确定登陆用户名、命令路径、终端类型、登陆目录等,所有的环境变量都是系统全局变量,可用于所有子进程,这包括编辑器、Shell 脚本和各类应用。
[root@localhost ~]# echo $qq
123
[root@localhost ~]# bash
[root@localhost ~]# echo $qq
定义的变量,在用户退出之后就会失效,除非将变量写死在全局的变量当中。
环境变量可以在命令行中设置,但用户退出时这些变量值也会丢失,因此最好在用户家目录下的 .bash_profile 文件中或全局
配 置 /etc/bashrc ,/etc/profile 文件或者/etc/profile.d/中定义。将环境变量放入 profile 文件中,每次用户登录时这些变量值都将被初始化。
[root@node1 ~]# vim /etc/profile
export name=hhhh
[root@node1 ~]# source /etc/profile
[root@node1 ~]# echo $name
hhhh
传统上,所有环境变量均为大写。环境变量应用于用户进程前,必须用export 命令导出。
环境变量可用在创建他们的shell和从该shell派生的任意子shell或进程中。他们通常被称为全局变量以区别局部变量。
通常,环境变量应该大写。环境变量是已经用 export 内置命令导出的变量。
有一些环境变量,比如 HOME、PATH、SHELL、UID、USER 等,在用户登陆之前就已经被/bin/login 程序设置好了。通常环境变量定位保持在用户家目录下的.bash_profile 文件中。具体的环境变量说明请参考下表:
环境变量启动过程:
加载环境变量的顺序,首先得加载/etc/profile
ls /etc/profile
然后这些/etc/profile.d/文件也会被加载
[root@localhost ~]# ls /etc/profile.d/
256term.csh 256term.sh colorgrep.csh colorgrep.sh colorls.csh colorls.sh lang.csh lang.sh less.csh less.sh vim.csh vim.sh which2.csh which2.sh
然后是用户级别的环境变量加载
[root@localhost ~]# ls -a
.bash_profile
环境变量文件说明:
自定义环境变量(全局变量)
设置环境变量
export NAME=zhang
declare -x NAME=zhang
NAME=zhang;export NAME
自定义环境变量生产环境 java 环境配置实例:tomcat,resin,csvn,hadoop
export JAVA_HOME=/application/jdk
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
export RESIN_HOME=/application/resin
常见放在:/etc/profile
显示与取消环境变量
通过 echo 命令打印环境变
$HOME
用户登录时进入的目录
$UID
当前用户的 UID(用户标识)相当于 id -u。
$PWD
当前工作目录的绝对路径名
$SHELL
当前 SHELL
$USER
当前用户
.......省略若干
[root@localhost ~]# echo $HOME
/root
[root@localhost ~]# echo $UID
0
[root@localhost ~]# echo $PWD
/root
[root@localhost ~]# echo $SHELL
/bin/bash
[root@localhost ~]# echo $USER
root
[root@localhost ~]# env XDG_SESSION_ID=3 HOSTNAME=localhost.localdomain SELINUX_ROLE_REQUESTED= TERM=vt100 SHELL=/bin/bash ........................省略若干 提示:1.用 set 显示所有本地变量 2.我们也可以自定义全局环境变量,见如下例子
[root@localhost ~]# echo $USER
root
[root@localhost ~]# unset USER
[root@localhost ~]# echo $USER
#-->此处为输出的空行
提示:这样是临时生效,要想永久生效,写到/etc/profile 文件内即可
有些内部命令在目录是看不见的,它们有的是 Shell 本身提供的,常用的内部命令有:echo、eval、exec、export、readonly、read、shift、wait、exit和点(.)