在bash shell中,环境变量分为两类:
- 全局变量
- 局部变量
全局环境变量不仅对shell会话课件,对所有shell创建的子进程也可见。局部变量则只对创建它们的shell课件。
1.系统环境变量一律使用大写字母以区别于普通用户的环境变量。
查看全局变量,可用printenv命令
2.设置全局环境变量
创建全局环境变量的方法是先创建一个局部环境变量,然后再把它导出到全局环境中。这个过程通过export命令来完成:
ubuntu@VM-150-204-ubuntu:~$ test='testing a long string'
ubuntu@VM-150-204-ubuntu:~$ echo $test
testing a long string
ubuntu@VM-150-204-ubuntu:~$ export test
ubuntu@VM-150-204-ubuntu:~$ bash
ubuntu@VM-150-204-ubuntu:~$ echo $test
testing a long string
3.unset命令删除环境变量
ubuntu@VM-150-204-ubuntu:~$ echo $test
testing a long string
ubuntu@VM-150-204-ubuntu:~$ unset test
ubuntu@VM-150-204-ubuntu:~$ echo $test
ubuntu@VM-150-204-ubuntu:~$
注:如果在子进程中删除了一个全局环境变量,它只对子进程有效。该全局环境变量在父进程中依然有效。
4.PATH环境变量
ubuntu@VM-150-204-ubuntu:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
这说明shell将在这些目录中查找命令,我们可以添加新的搜索目录到现有的PATH环境变量:
ubuntu@VM-150-204-ubuntu:~$ PATH=$PATH:/home/ubuntu
ubuntu@VM-150-204-ubuntu:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/ubuntu
PATH中的目录之间是用冒号分隔的,所以只需引用原来的PATH值,然后再给字符串添加新目录就行了
5.登录shell时会从4个不同的启动文件读取命令
- /etc/profile
- $HOME/.bash_profile
- $HOME/.bash_login
- $HOME/.profile
/etc/profile文件是系统上默认的bash shell的主启动文件,系统上的每个用户登录时都会执行这个启动文件,另外3个启动文件是用户专有的。