Shell 编程基础之变量和环境变量
一、变量赋值和引用
Shell 编程中,使用变量无需事先声明,同时变量的命名不惜遵循如下规则:
- 首个字符必须为字母(a-z,A-Z)或者_
- 变量名中间不能有空格,可以使用_连接
- 不能使用其他表达符号
需要给变量赋值时,可以这么写
变量名=值
给变量赋值时,=两边不能留空格
取用一个变量的值,可以使用${变量名},当然在一般情况下,可以简写为$变量名
user@ae01:~$ HELLO="HELLO" #等号两边不能有空格 user@ae01:~$ echo ${HELLO} HELLO user@ae01:~$ echo $HELLO HELLO user@ae01:~$
在某些情况下,需要使用${变量名}而不能用$获取变量,
echo $HELLOabc user@ae01:~$ echo ${HELLO}abc HELLOabc
二、环境变量的设置和查看
显示某一环境变量
user@ae01:~$ echo $HOME /home/user
设置一个环境变量的方法
- 可以通过配置文件来添加环境变量的文件 (需要通过 source file 命令来重新读取和执行文件使得这次改动生效)
- /etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行
- /etc/environment:在登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量
- ~/.bash_profile:在登录时用到的第三个文件是.profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变游戏量,执行用户的.bashrc文件。/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
- ~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取
- /etc/rc.local:自动执行的脚本
- 直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】
user@ae01:~$ export HELLO="hello" user@ae01:~$ echo $HELLO hello
使用 env 命令将显示所有的环境变量
user@ae01:~$ env TERM=xterm SHELL=/bin/bash HADOOP_HOME=/usr/local/ae/hadoop-1.2.1 ...... _=/usr/bin/env
使用 set 命令将显示本地所有的 Shell 变量,这里数据太多我们只通过 less 查看前面的一小部分
user@ae01:~$ set | less ANT_HOME=/usr/local/ae/apache-ant-1.9.4 BASH=/bin/bash BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() BASH_CMDS=() BASH_COMPLETION=/etc/bash_completion BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.d BASH_COMPLETION_DIR=/etc/bash_completion.d BASH_LINENO=() BASH_SOURCE=() BASH_VERSINFO=([0]="4" [1]="2" [2]="24" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu") BASH_VERSION='4.2.24(1)-release' CLASSPATH=:.:/usr/local/ae/jdk1.7.0_51/lib:/usr/local/ae/jdk1.7.0_51/jre/lib COLUMNS=80 DIRSTACK=() EUID=1000 GROUPS=() HADOOP_HOME=/usr/local/ae/hadoop-1.2.1 HADOOP_HOME_WARN_SUPPRESS=1 :
使用 unset 来清除环境变量
user@ae01:~$ echo $HELLO hello user@ae01:~$ unset HELLO user@ae01:~$ echo $HELLO user@ae01:~$
使用 readonly 设置环境变量为只读
user@ae01:~$ export HELLO="hello" user@ae01:~$ echo $HELLO hello user@ae01:~$ readonly HELLO
注意:环境变量设置为只读后不能修改和删除