一、环境变量:环境变量设置



### --- 环境变量设置
~~~     使用 export 声明的变量即是环境变量

[root@localhost ~]# export age="18"



二、环境变量查询和删除



### --- 环境变量查询和删除
~~~     删除环境变量 gender
~~~     env 命令和 set 命令的区别是,set 命令可以查看所有变量,而 env 命令只能查看环境变量。

[root@localhost ~]# unset gender
[root@localhost ~]# env | grep gender



三、系统默认环境变量:env



### --- 系统默认环境变量:env

[root@localhost ~]# env
HOSTNAME=localhost.localdomain              // 主机名
SHELL=/bin/bash                             // 当前的 shell
TERM=linux                                  // 终端环境
HISTSIZE=1000                               // 历史命令条数
SSH_CLIENT=192.168.4.159 4824 22            // 当前操作环境是用 ssh 连接的,这里记录客户端 ip
SSH_TTY=/dev/pts/1                          // ssh 连接的终端时 pts/1
USER=root                                   // 当前登录的用户
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;
01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=
01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01
;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=0
1;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31
:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.j
pg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga
=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=
01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01
;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35
:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.
flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=0
1;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;3
6:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*
.wav=01;36:*.axa=01;36:*.
 oga=01;36:*.spx=01;36:*.xspf=01;36:         // 定义颜色显示
age=18                                       // 我们刚刚定义的环境变量
PATH=/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/
root/bin                                     // 系统查找命令的路径
MAIL=/var/spool/mail/root                    // 用户邮箱
PWD=/root                                    // 当前所在目录
LANG=zh_CN.UTF-8                             // 语系
HOME=/root                                   // 当前登录用户的家目录
SHLVL=2                                      // 当前在第二层子 shell 中。还记得我们刚刚进入了一个子 shell 吗?如果是第一层 shell,这里是 1
LOGNAME=root                                 // 登录用户             
_=/bin/env                                   // 上次执行命令的最后一个参数或命令本身



四、系统默认环境变量:set



### --- 系统默认环境变量:set
~~~     env 命令可以查询到所有的环境变量,可是还有一些变量虽然不是环境变量,
~~~     却是和 Bash 操作接口相关的变量,这些变量也对我们的 Bash 操作终端起到了重要的作用。
~~~     这些变量就只能用 set 命令来查看了,我只列出重要的内容吧:

[root@localhost ~]# set
BASH=/bin/bash                               // Bash 的位置
BASH_VERSINFO=([0]="4" [1]="1" [2]="2" [3]="1" [4]="release"
[5]="i386-redhat-linux-gnu")                 // Bash 版本
BASH_VERSION='4.1.2(1)-release'              // bash的版本
COLORS=/etc/DIR_COLORS                       // 淹死记录文件
HISTFILE=/root/.bash_history                 // 历史命令保存文件
HISTFILESIZE=1000                            // 在文件当中记录的历史命令最大条数
HISTSIZE=1000                                // 在缓存中记录的历史命令最大条数
LANG=zh_CN.UTF-8                             // 语系环境
MACHTYPE=i386-redhat-linux-gnu               // 软件类型是 i386 兼容类型
MAILCHECK=60                                 // 每60秒去扫描新邮件
PPID=2166                                    // 父 shell 的 PID。我们当前 Shell 是一个子 shell
PS1='[\u@\h \W]\$ '                          // 命令提示符
PS2='> '                                     // 如果命令一行没有输入完成,第二行命令的提示符
UID=0                                        // 当前用户的 UID



五、系统默认环境变量:PATG



### --- 系统默认环境变量:PATG
~~~     # PATH 变量:系统查找命令的路径先查询下 PATH 环境变量的值:
~~~     PATH 变量的值是用“:”分割的路径,这些路径就是系统查找命令的路径。
~~~     也就是说当我们输入了一个程序名,如果没有写入路径,
~~~     系统就会到 PATH 变量定义的路径中去寻找,是否有可以执行的程序。
~~~     如果找到则执行,否则会报“命令没有发现”的错误。
~~~     那么是不是我们把自己的脚本拷贝到 PATH 变量定义的路径中,
~~~     我们自己写的脚本也可以不输入路径而直接运行呢?

[root@localhost ~]# echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin



### --- 拷贝 hello.sh 到/bin 目录
~~~     hello.sh 可以直接执行了
~~~     那么我们是不是可以修改 PATH 变量的值,而不是把程序脚本复制到/bin/目录中。
~~~     当然是可以的,我们通过变量的叠加就可以实现了:

[root@localhost ~]# cp /root/sh/hello.sh /bin/
[root@localhost ~]# hello.sh
Mr. Shen Chao is the most honest man.



### --- 在变量 PATH 的后面,加入/root/sh 目录

[root@localhost ~]# PATH="$PATH":/root/sh



### --- 查询 PATH 的值,变量叠加生效了
~~~     当然我们这样定义的 PATH 变量只是临时生效,一旦重启或注销就会消失,如果想要永久生效,
~~~     需要写入环境变量配置文件,我们在“环境变量配置文件”小节中再详细介绍。
~~~     PS1 变量:命令提示符设置
~~~     PS1 是一个很有意思的变量(这可不是 SONY 的游戏机哦),是用来定义命令行的提示符的,
~~~     # 可以安装我们自己的需求来定义自己喜欢的提示符。PS1 可以支持以下这些选项:
~~~     \d:显示日期,格式为“星期 月 日”
~~~     \H:显示完整的主机名。如默认主机名“localhost.localdomain”
~~~     \h:显示简写主机名。如默认主机名“localhost”
~~~     \t:显示 24 小时制时间,格式为“HH:MM:SS”
~~~     \T:显示 12 小时制时间,格式为“HH:MM:SS”
~~~     \A:显示 24 小时制时间,格式为“HH:MM”
~~~     \@:显示 12 小时制时间,格式为“HH:MM am/pm”
~~~     \u:显示当前用户名
~~~     \v:显示 Bash 的版本信息
~~~     \w:显示当前所在目录的完整名称
~~~     \W:显示当前所在目录的最后一个目录
~~~     \#:执行的第几个命令
~~~     \$:提示符。如果是 root 用户会显示提示符为“#”,如果是普通用户会显示提示符为

[root@localhost ~]# echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/
bin:/root/sh



六、系统默认环境变量:PS1变量



### --- 系统默认环境变量:PS1变量
~~~     #“$”:这些选项该怎么用啊?我们先看看 PS1 变量的默认值吧:

[root@localhost ~]# echo $PS1
[\u@\h \W]\$



### --- 默认的提示符是显示“[用户名@简写主机名 最后所在目录]提示符”
~~~     在 PS1 变量中,如果是可以解释的符号,如“\u”、“\h”等,则显示这个符号的作用。
~~~     如果是不能解释的符号,如“@”或“空格”,则原符号输出。
~~~     那么我们修改下 PS1 变量,看看会出现社么情况吧:
~~~     修改提示符为‘[用户名@当前时间 当前所在完整目录]提示符’

[root@localhost ~]# PS1='[\u@\t \w]\$ '



~~~     切换下当前所在目录,因为家目录是看不出来区别的
~~~     看到了吗?提示符按照我们的设计发生了变化
~~~     这里要小心,PS1 变量的值要用单引号包含,否则设置不生效。再举个例子吧:

[root@04:46:40 ~]#cd /usr/local/src/
[root@04:47:29 /usr/local/src]#
[root@04:50:08 /usr/local/src]# PS1='[\u@\@ \h \# \W]\$'
[root@04:53 上午 localhost 31 src]#



~~~     提示符又变了。\@:时间格式是 HH:MM am/pm;\#:会显示执行了多少个命令
~~~     PS1 变量可以自由定制,好像看到了点 Linux 可以自由定制和修改的影子,还是很有意思的。
~~~     不过说实话一个提示符已经使用习惯了,如果换一个还是非常别扭的,还是改回默认的提示符吧:

[root@04:53 上午 localhost 31 src]#PS1='[\u@\h \W]\$ '
[root@localhost src]#