1)变量类型
1)变量可分为俩类:环境变量(全局变量),和普通变量(局部变量),
环境变量也称为全局变量,可以在创建他们的Shell及其派生出来的任意子进程Shell中使用,环境变量又可以分为自定义环境变量和bash内置的环境变量,环境变量可以在命令行中设置和创建,用户退出命令行时这些变量值就会丢失,想要永久保存环境变量,可在用户家目录下的. bash_profile或. bashrc(非用户登录模式特有,如:SSH)文件中,或在/etc/profile文件中定义,这样每次用户登录时这些变量都将被初始化。
普通变量也可成为局部变量,只能在创建它们的Shell函数或Shell脚本中使用,普通变量一般由开发者在开发脚本程序时创建,
2)查看设置的变量
set命令输出所有的变量,包括全局变量和局部变量
1 [root@king ~]# set 2 APACHEERR=hello world 3 BASH=/bin/bash 4 BASH_ALIASES=() 5 BASH_ARGC=() 6 BASH_ARGV=() 7 BASH_CMDS=() 8 BASH_LINENO=() 9 BASH_SOURCE=() 10 BASH_VERSINFO=([0]="4" [1]="1" [2]="2" [3]="1" 11 中间和结尾省略若干代码
env(printenv)命令只显示全局变量,
1 [king@king~]$ env 2 HOSTNAME=king 3 SHELL=/bin/bash #大家可以自行查看一下哦
declare命令输出所有的变量,函数,整数,和已经导出的变量,set -o命令显示bashShell的所有参数配置信息
3)自定义环境变量
如果想设置环境变量,就要给在给变量赋值后或在设置变量时使用export命令,export命令和declare命令的格式:
- export 变量名=value
- 变量名=value ; export 变量名
- declare - x 变量名=value
小试牛刀:定义环境变量并赋值的方法:
- export NAME=qzlking
- declare -x NAME=qzlking
- NAME=qzlking ; exprot NAME
1 [root@king script]# cat /etc/profile|grep qzl 2 export qzl='qzlking' #<==编辑/etc/profile,然后输出此行并保存 3 [root@king script]# source /etc/profile #<==或./etc/profile使其生效 4 [root@king script]# echo $qzl #<==在变量前加$符号并打印变量值 5 qzlking 6 [root@king script]# env|grep qzl #<==查看定义结果 7 qzl=qzlking
我们一起来看一下让环境变量永久生效的常用配置文件
a)用户环境变量配置
1 [root@king scripts]# ls /root/.bashrc 2 /root/.bashrc 3 [root@king scripts]# ls /root/.bash_profile 4 /root/.bash_profile
说明:对于用户的环境变量设置,常见的是用户家目录下的.bashrc和.bash_profile。
b)全局环境变量的配置
常见的全局环境变量配置文件,/etc/profile;/etc/bashrc;/etc/profile.d这三个配置文件,如果想要在登陆后初始化或者显示加载的内容,只需要把脚本文件放在/etc/profile.d文件下即可(不需要加执行权限)。
在Java环境中,自定义环境变量,通常放在/etc/profile全局环境变量里哦,
1 export JAVA_HOME=/application/jdk 2 export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib 3 export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin 4 export RESIN_HOME=/application/resin
4)查看/取消环境变量
我们通常在工作中要查看一下环境变量中都配置了什么,需要做什么更改,所以我们就有了ehco或printf命令来打印查看环境变量。
- $HOME:用户登录时进入的目录
- $UID:当前用户的uid( 也就是用户的标识,相当于人的身份证)相当于id -u
1 [king@king ~]$ echo $HOME 2 /home/king 3 [king@king ~]$ echo $UID 4 300
我们可以用unset来消除本地变量和环境变量
1 [king@king ~]$ echo $USER 2 nane 3 [king@king ~]$ unset $USER 4 [king@king ~]$ echo $USER #<这里输出是个空行 5
小结:
- 变量名一定要大写,可以在自身的Shell及子Shell中使用,常用export来定义环境变量
- 执行enc默认可以显示所有的环境变量名称及对应的值
- 输出时用“$变量名”,取消用“unset 变量名”
2)环境变量初始化与对应文件的生效顺序
1.登陆Shell读取环境变量文件的流程
用户登录系统后首先会加载/etc/profile全局环境变量文件,加载完后,执行/etc/profile.d目录下的脚本文件(如:系统的字符集设置/etc/sysconfigil8n),然后在运行$HOME/.bash_profile(用户环境变量文件),在这文件里会找$HOME/.bashrc(用户环境变量文件),有就执行,没有就不执行。在$HOME/.bashrc找/etc/bashrc(全局环境变量文件)有就执行,没有就不执行。如果希望用户的Shell不是登陆时启动的(如:手动敲下bash时启动或者远程ssh连接情况),非登陆Shell只会加载$HOME/.bashrc(用户环境变量文件),并会去找/etc/bashrc(全局环境变量文件)。即非登陆Shell想读到设置的环境变量,需要将变量设定等写入$HOME/.bashrc(用户环境变量文件)或etc/bashrc(全局环境变量文件)不是$HOME/.bash_profile或/etc/profile。。。
3)定义本地变量
1)普通变量的定义,有三种写法
- 变量名=value #不加引号时,值里有变量的会被解析后输出。
- 变量名='value' #输出变量内容时单引号里是什么就输出什么,不管什么都原样输出。
- 变量名="value" #输出变量内容时引号里的变量和命令经过解析后输出。
2)命令结果作为的变量内容来赋值
- 变量名=`mkdir` #这里是反引号,
- 变量名=$(mkdir) #把命令$()括起来,来赋值。
4)变量定义的技巧总结
- 变量名只能为字母,数字或者下划线,只能以字母或下划线开头,要见名知意。
- 一般变量的定义,赋值常用双引号,希望原样输出的加单引号。
- 希望变量的内容是命令的解析结果时,要用反引号``,或者用$()把命令括起来在赋值
- 打印输出或使用变量时,变量名前要接$符号。
变量定定义示例:
1 KingAge=25 #<==每个单词的首字母大写的写法 2 king_age=25 #<==单词之间用"_"的写法 3 kingAgeSex=25 #<==驼峰语法: 首个单词的首字母小写,其余单词首字母大写 4 kingAGE=25 #<==单词全大写的写法