文章目录
什么是环境变量全局环境变量局部环境变量创建自己的局部变量设置局部用户定义变量设置全局环境变量删除环境变量默认shell环境变量设置PATH环境变量定位环境变量登录shell交互shell非交互shell环境变量持久化数组变量什么是环境变量
环境变量存储shell会话和工作环境信息,允许在内存中存储数据,让程序和脚本能快速访问,存储了持久的数据
分类
全局变量局部变量
注意:不同的linux发行版有自己的环境变量
全局环境变量
系统环境变量基本使用全大写字母,区分普通环境变量全局环境变量作用范围:所有会话和所有生成的子shell查看环境变量使用env或者printenv
$env //查看环境变量$printenv HOME //不能使用env/home/50485581$echo $HOME //引用环境变量,加上$/home/50485581
局部环境变量
作用范围:定义在它们的进程中可见目前没有一个命令可以查看局部环境变量
set命令:全局变量、局部变量、用户定义变量,按照字母顺序对结果排序
创建自己的局部变量
设置局部用户定义变量
$my_variable="hello world"$echo $my_variablehello world
字符串用双引号
注意:设置局部变量后,生成一个子shell,那么在子shell中不可用
$my_variable="hello world"$bash$echo $my_variable$exitexit$echo $my_variablehello world
在子进程中设置局部变量,退出子进程,局部变量失效
设置全局环境变量
先创建一个局部环境变量,再把它导出到全局环境中
使用export命令
$my_variable="hello"$export my_variable$echo $my_variablehello$bash$echo $my_variablehello$exitexit[50485581@shell.testing- ~]$echo $my_variablehello
子shell中改变全局变量只对子shell有效,不会反映到父shell中,并且子shell中,使用export也不能改变父shell的值
$echo $my_variablehello$bash$my_variable="world"$echo $my_variableworld$exitexit$echo $my_variablehello
删除环境变量
使用unset命令,删除环境变量,不用$
$my_variable="hello"$echo $my_variablehello$unset my_variable$echo $my_variable
子进程中对全局变量进行修改和删除,均在子进程中生效,实际上在父进程中依然可用
默认shell环境变量
bash shell保留了unix bourne shell的环境变量,可以查看列表,不多进行描述
设置PATH环境变量
查看PATH环境变量
$echo $PATH/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/50485581/.local/bin:/home/50485581/bin
PATH中的目录使用冒号分割
添加PATH环境变量
$echo $PATH/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/50485581/.local/bin:/home/50485581/bin$PATH=$PATH:/home/50485581/test$echo $PATH/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/50485581/.local/bin:/home/50485581/bin:/home/50485581/test
定位环境变量
启动bash shell的3种方式
登录时作为默认登录shell作为非登录shell的交互式shell作为运行脚本的非交互shell
登录shell
5个不同文件里提取命令
/etc/profile //默认的bash shell主启动文件$HOME/.bash_profle,每个用户登录时都会执行$HOME/.bashrc$HOME/.bash_login$HOME/.profile
1./etc/profile文件
每个发型版本是不一样的
2.用户目录下的4个文件
都是隐藏文件,每个用户可以编辑并添加用户的环境变量
交互shell
交互shell,比如bash命令,不会执行/etc/profile文件,会检查用户HOME下的.bashrc文件
$cat .bashrc# .bashrc# Source global definitionsif [ -f /etc/bashrc ]; then. /etc/bashrcfi# Uncomment the following line if you don't like systemctl's auto-paging feature:# export SYSTEMD_PAGER=# User specific aliases and functions
非交互shell
系统执行shell脚本使用,可以通过BASH_ENV来查看,但是BASH_ENV没有配置
$printenv BASH_ENV$
环境变量持久化
数组变量
$my_test=(one two three four file) //定义数组$echo ${my_test[0]} //输出单个值one$echo ${my_test[*]} //输出整个数组one two three four file $echo ${my_test[@]}one two three four file $my_test[1]=six //修改某个值$echo ${my_test[1]}six$unset my_test[1] //删除某个值$echo ${my_test[*]}one three four file$unset my_test //删除整个数组,只要加上数组名$echo ${my_test[*]}