shell不同于其他程序。除了解读元字符之外,它还代表一个环境,用户可以对其进行定制,以满足自己的需要。这些需要包括:设计快捷方式、控制shell变量、设置启动脚本。
[root@min ~]# echo $SHELL //正在使用的哪种shell
/bin/bash
[root@min ~]# chsh //将C shell作为登录shell的一个子shell来运行
Changing shell for root.
New shell [/bin/bash]: exit //终止C shell,返回登录shell
chsh: shell must be a full path name.
[root@min ~]#
shell变量有两种——局部变量和环境变量。PATH、HOME和SHELL是环境变量。之所以这样称呼它们,是因为它们在用户的整个环境中都可以使用,包括运行shell脚本的子shell、邮件命令和编辑器。局部变量在作用域上受到更大的限制。
[root@min ~]# DOWNLOAD_DIR=/home/test/download
[root@min ~]# echo $DOWNLOAD_DIR
/home/test/download
[root@min ~]# bash //创建一个子shell
[root@min ~]# echo $DOWNLOAD_DIR //DOWNLOAD_DIR 在子shell中是否可见?
//不能见
[root@min ~]# echo $PATH //但PATH可见
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@min ~]# exit //终止子shell,返回登录shell
exit
DOWNLOAD_DIR是一个局部变量;它的值不能供子进程使用。
set语句显示当前shell中的所有可用变量,但env命令仅显示环境变化。
环境变量名用大写字母定义,env是一个外部命令,在子进程中运行。它仅列出那些从其父进程(shell)继承而来的变量。但set是shell的内置命令,会显示当前shell中的所有可见变量。set将显示DOWNLOAD_DIR的值,但env不会。
export :创建环境变量
使DOWNLOAD_DIR能够在所有子进程中都可见,需要将其导出,用shell的export来实现变量继承。export就是将局部变量转变为环境变量;
export DOWNLOAD_DIR
export DOWNLOAD_DIR=/home/test/download
常见环境变量:
变量 | 意义 |
HOME | 主目录---用户在登录时所在的目录 |
PATH | shell在查找一条命令时搜索的目录列表 |
LOGNAME | 用户的登录名 |
USER | 用户的登录名 |
用户邮件的的绝对路径名 | |
MAILCHECK | 接收邮件的检查间隔 |
MAILPATH | shell检查是否有邮件到达的邮箱列表 |
TERM | 终端的类型 |
PWD | 当前目录的绝对路径名 |
CDPATH | 在与非绝对路径名一起使用时,cd查找的目录列表 |
PS1 | 主要提示符字符串 |
PS2 | 辅助提示符字符串 |
SHELL | 用户的登录shell,以及由拥有shell临时出口(escape)的程序调用的一个shell |
命令查找路径(PATH) PATH 列出了shell在其中查找可执行命令的目录,我们经常对PATH进行重新赋值,使其中包含一个或多个目录。要将/usr/game 添加到PATH列表,可以将原有值与新值串联在一起,重新为这个变量赋值: