1. 环境变量的概念
环境变量是用来存储shell会话和工做环境,方便shell轻松访问到设定值中的程序,环境变量分为全局变量和局部变量linux
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 nameshell
4. 其余类型变量
本地变量:仅对当前shell进程生效,对当前shell以外的shell和zishell都无效。
位置变量:$1;$2......来表示,用于让脚本在脚本代码中调用经过命令行传递它的参数;
$1;$2......:对应调用第一、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;
只能使用数字、字母及下划线,且不能以数字开头
见名知义bash
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[*]}dom
[root@localhost ~]#
ide