我们在使用shell时,经常会碰到shell变量这个名词,那么,什么是shell变量呢?shell变量就是在shell程序中保存系统和用户所需要的各种各样的值。这个值就是变量,这个值可以由我们自己来定义。shell变量可以分为以下几种类型:
1 环境变量
2 预定义变量
3 位置变量
4 用户自定义变量(也叫本地变量)
    1 首先讲一下什么是环境变量,环境变量是linux系统为用户提前设定好的一类shell变量,它的功能是设置当前shell中的工作环境,包括用户的宿主目录,命令查找的路径等。
    我们如何查看我们的环境变量呢?我推荐大家使用#set | more命令,set命令用于查看系统的环境变量,由于环境变量可能会比较长,这是我们可以加上一个| more用于分页查看。屏幕上输出了很多信息,我们该怎么看这些信息呢?举个简单的例子,“BASH=/bin/bash”等号左边的代表变量名称,右边代表变量值。还有没有别的方法查看环境变量呢?答案是有,我们可以使用#echo $BASH命令,请注意,echo语句的作用是显示字符串或shell变量的值,当使用“$变量名”作为echo的输出命令参数的时候,就显示的是指定的变量值。如果不加“$”,则表示输出echo后面的字符串。
    下面讲一下常见的环境变量:
    USER表示当前登入用户的名称
    UID表示当前登入用户的UID号
    SHELL表示当前登入用户使用的shell
    HOME表示当前用户登入的宿主目录
    PWD表示当前登入用户所在的位置
    PATH表示用户敲入命令的搜索路径,我们在linux执行的命令一般都位于/XX/bin下面,我们每次敲命令都不需要将路径输入完整这就是PATH变量的功劳,shll程序根据PATH变量中设定的路径会自动搜索命令。
    PS1和PS2分别代表主提示符和辅提示符。主提示符是用户在命令行状态下看到的提示符字符串,如[root@localhost ~]#之类的。辅提示符是用于我们如果输入一个比较长的命令的时候需要换行的时后,在命令的第二行出现的提示符,默认为“>”。如何换行呢?只需要在命令的行尾输入“\”回车即可。
    说完常见的环境变量,再说说环境变量配置文件。环境变量配置文件可以分为全局配置文件和用户配置文件。
    全局配置文件:profile和bashrc,profile负责全局环境设置,并应用于说有用户登入的shell;bashrc用于定义全局函数和别名。这两个配置文件都位于/etc目录下,修改全局配置文件需要root权限。
    用户配置文件:.bash_profile和.bashrc。.basj_profile的作用类似于全局环境变量的profile,但只对当前用户起作用;.bashrc的作用类似于全局环境变量的bashrc,用于定义函数和别名。这两个文件分别位于当前登入用户的宿主目录下,由于是隐藏文件,用户可以使用ls -al命令来查看。如果对用户的配置文件做了错误的修改,可以通过复制/etc/skel/目录下模板的所有文件复制到宿主目录中,从而恢复初始配置。
    2 预定义变量
    预定义变量是系统中已经定义好的变量,我们只能使用预定义变量而不能创建或修改它。预定义变量的格式为“$”符号加上另外一个符号组成的。下面介绍一些常见的预定义变量。
    $#表示位置参数的数量
    $*表示所有位置参数的内容
    $?表示表示命令执行后返回的状态,它用于检查上一个命令执行是否正确;当你输入#$?后显示的值为0则表示之前输入到值为正确的;若为其它值都代表错误的。
    $$表示当前进程的进程号
    $!表示后台运行的最后一个进程的进程号
    $0表示当前执行的进程名
    3 位置变量
    位置变量与shell脚本程序所执行时使用的命令参数行对应,命令行中的参数是按照从左到右顺序付给位置变量的。
    4 用户自定义变量(本地变量)
    用户自定义变量顾名思义就是用户自己定义的变量,只在自己的系统中有效。设置方法为#DAY=Sunday,使用方法为#echo $DAY命令输出的格式为Sunday。这个定义的变量只能在当前shell中使用,要是想在其他shell中使用的话,就必须将它设置为全局变量,方法为#export DAY即可在任何本地shell中生效。如果你想删除用户自定义变量,那么就要使用#unset DAY即可,unset命令无论是否输出为全局变量,都可以删除。