1. 环境变量的概念
环境变量是用来存储shell会话和工作环境,方便shell轻松访问到设定值中的程序,环境变量分为全局变量和局部变量
2. 全局变量
全局变量在shell和它的子shell中都生效,可以通过env和printenv命令来查看当前环境变量
[root@localhost ~]# env
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
TERM=linux
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.186.1 63544 22
SELINUX_USE_CURRENT_RANGE=
QTDIR=/usr/lib64/qt-3.3
QTINC=/usr/lib64/qt-3.3/include
SSH_TTY=/dev/pts/1
[root@localhost ~]# print env
-bash: print: command not found
[root@localhost ~]# printenv
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
TERM=linux
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=192.168.186.1 63544 22
SELINUX_USE_CURRENT_RANGE=
QTDIR=/usr/lib64/qt-3.3
QTINC=/usr/lib64/qt-3.3/include
SSH_TTY=/dev/pts/1
USER=root
3. 局部变量
局部变量仅对当前shell生效,没有特定的命令可以查看,可以通过set命令可显示所有已定义的变量
变量赋值:
变量名='变量值'
变量值:
直接用字串;name='username'
变量引用;name='$username'
命令引用;name=`COMMAND`,name=$(COMMAND)
变量引用:$(name),$name
"":弱引用,其中的变量引用会被替换成变量值
'':强引用,其中的变量引用不会被替换成变量值而保持原字符串
变量销毁:
unset name
4. 其他类型变量
本地变量:仅对当前shell进程生效,对当前shell之外的shell和zishell都无效。
位置变量:$1;$2......来表示,用于让脚本在脚本代码中调用通过命令行传递它的参数;
$1;$2......:对应调用第1、2.......参数
shift [n]
$0:命令本身
$*:传递给脚本所有参数,把所有参数一个个传给脚本
$@:传递脚本给所有参数,把所有参数当成一个成体传递给脚本
$#:传递给脚本参数的个数。
5. 设置全局环境变量
变量申明、赋值:
export name=VALUE
declare -x name=VALUE
变量引用:
$name;$(name)
显示所有环境变量:
export;env;printenv
销毁:
unset name
修改当前SHELL的全局环境变量可对当前shell和其子shell生效,但是对其父shell没有影响。
bash中有很多内建的环境变量:PATH;SHELL;UID;HISTSIZE;HOME;PWD;OLD;HISTFILE;PS1
只读变量:
readonly name
declare -r name
变量命令法则:
不能使用程序中的保留字,如if,for;
只能使用数字、字母及下划线,且不能以数字开头
见名知义
6. 设置PATH环境变量
使用echo $PATH 命令可查看当前PATH环境变量,PATH变量所有的参数通过(:)隔开,增加PATH变量可使用 PATH=$PATH:newpath,来修改。
长期生效则需要修改配置文件
BASH配置文件按照生效范围划分,可分为如下两类:
全局配置:
/etc/profile/etc/profile.d/*.sh/etc/bashrc
个人配置:
~/.bash_profile~/.bashrc
按照功能可分为两类:
profile类:为交互式登录的shell提供配置
全局:/etc/profile/etc/profile.d/*.sh
个人:~/bash_profile
功能:定义环境变量,运行命令或脚本
bashrc类:为非交互式的shell提供配置
全局:/etc/bashrc
个人:~/bashrc
功能:定义变量别名,定义本地变量
配置文件读取次序:
交互式登录:在终端使用用户名密码登录或在当前用户下使用su - USERNAME 和 su -l USERNAME 切换用户。
/etc/profile --> /etc/profile.d/*.sh --> ~/bash_profile --> ~/.bashrc --> /etc/bashrc
非交互式登录:使用su USERNAME切换用户或图形界面下打开的终端
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
7. 数组变量
数组能存储多个值,可以整体调用,也可单独待用,示例如下:
创建一个数组:
[root@localhost ~]# mytest=(one two three four five six) ####数组中存储了6个值,分别对应位置编号0-5
显示数组中第二个值:
[root@localhost ~]# echo ${mytest[2]}
three
显示数组中所有值:
[root@localhost ~]# echo ${mytest[*]}
one two three four five six
销毁数组中0位对应的值:
[root@localhost ~]# unset mytest[0]
[root@localhost ~]# echo ${mytest[*]}
two three four five six
销毁0对应的值one后,该位置仍被占用:
[root@localhost ~]# echo ${mytest[0]}
[root@localhost ~]#
销毁数组:
[root@localhost ~]# unset mytest
[root@localhost ~]# echo ${mytest[*]}
[root@localhost ~]#