Shell程序充当了一个命令解释器的角色。
Shell的发展和分类:
  Bsh―――20世纪70年代中期―――新泽西的AT&T贝尔实验室
  Csh―――20世纪80年代早期―――加利福尼亚――C语言风格
  Ksh―――AT&T贝尔实验室―――结合了bsh和csh的功能优势。
  Bash――-Bash是Bsh的升级替代产品,在目前大多数linux的发行版本都使用Bash作为默认                                    
  的shell,运行shell程序时,系统实际上运行的是Bash程序。
1、RHEL4中提供的Shell  
/etc/shells  这个文件夹中记录了当前linux系统中能够使用的所有shell。
Example:
  $ cat /etc/shells            
  $ ls –l `cat /etc/shells `  详细显示shell文件夹内容。
2、shell程序的切换
3、用户默认shell的设定与shell的修改
$ cat  /etc/passwd   使用vi编辑器对用户默认shell的修改。
例:
     $ grep teacher /etc/passwd   察看teacher用户在passwd中的信息。
     teacher:x:500:500:---------------/bin/bash /bin/bash是启动时的默认shell。
     $ chsh                         修改shell命令。
     passwd:                     输入管理员密码。
     new shell[etc/bash]:/bin/bsh 输入需要修改的shell。
   chsh命令是通过修改passwd文件中的用户登录shell字段来实现用户登录shell更改的。可以通过vi
编辑器来进行快速修改。(vi编辑器的使用详见第3章)        
Bash的主要功能:
SHELL变量:
  ×环境变量
  ×预定义变量
  ×位置变量
  ×用户自定义变量
环境变量:
1、查看环境变量:
   环境变量是用户登录时linux为用户预先设定好的一类shell变量。
$ set               察看环境变量。
$ set | head -3        察看前3行内容。
$ set | tail -3         察看后3行内容。
$ set | more          分页察看内容。
2、常用环境变量介绍:
$echo $USER           显示用户名。            
$echo $UID           显示用户的uid。
$echo $SHELL         显示当前用户登录的shell。
$echo $HOME          显示当前用户的宿主目录。
$echo $PWD          显示用户当前所在的目录。
$echo $PATH         显示用户的命令搜索路径。
$echo $PS1          显示用户的主提示符。
$echo $PS2           显示用户当前的辅助提示符。
3、全局环境变量配置文件
$ ls –l /etc/bashrc /etc/profile
/etc/profile      文件负责设置全局的环境变量,并应用于所有的用户登陆shell。
/etc/bashrc      文件用于定义全局的函数和别名,文件的内容除了为系统中所有登录用户
              提供设置外,也适用于非交互shell和非登陆shell。
4. 用户环境变量配置文件
/用户宿主目录/.bash_profile和.bashrc用户变量配置文件位于用户的宿主目录中,文件名是:.bash_profile和.bashrc
用户可以通过修改这两个文件来更改自己的环境变量。

/etc/skel   目录中保存了初始的用户配置文件模板,当用户对自己的配置文件进行了
   错误的设置后,可以直接将/etc/skel目录中的模板文件复制到用户目录,
  从而恢复到正确的初始配置。

位置变量:
预定义变量:
    预定义变量是linux系统中已定义好的变量,用户只能使用预定义变量,而不能创建或赋值预定义变量。
所有的预定义变量都是由$和另一个符号组成的,常用的shell预定义变量有:
$#:表示位置参数的数量
$*:表示所有位置参数的内容
$?:表示命令执行后返回的状态
$$:表示当前进程的进程号
$!表示后台运行的最后一个进程号
$0:表示当前执行的进程名
用户自定义变量:
1、自定义变量的设置:
  变量名=变量值
$DAY=sunday         左边的DAY是被赐值的变量名,右边sunday是为变量所赐的值。
2、自定义变量的查看与引用:
example:
$DAY=sunday         将sunday值赐予DAY。
$echo $DAY           察看$DAY的赐值。
sunday  
$set | grep DAY     使用字符查找功能查找set命令显示中的DAY字符。
DAY=sunday
  注:set命令可以显示系统中所有的变量,也包括用户自定义变量。
3、自定义变量的输出:
   用户在当前shell中定义了某个变量后,只能在当前的shell中使用,而在当前shell的子shell中是无效的。
example:
$DAY=sunday
$echo $DAY
sunday
$bash
$echo $DAY
(无显示变量值)
   为了在用户的子shell或脚本程序中使用自定义变量,需要将用户自定义的变量“输出 ”为全局变量。
Export 命令用于输出变量为全局变量:
export [-nf ] [name=[value]……]
example:
$echo $DAY           察看变量值。
sunday             所显示的变量值。
$export DAY          export命令使用变量名作为参数,输出指定名称的变量为全局变量。
$bash             进入子shell。
$echo $DAY          察看变量值。
sunday            所显示的变量值。
$exit             推出。

    export命令可以在输出变量的同时对指定名称的变量进行赋值
$export DAY=sunday MONTH=jan    对指定的多个名称的变量赋值(新建)。
$echo $DAY $MONTH          同时察看多个变量值。
sunday jan               所显示的变量值。

4、自定义变量的清除:
    unset[-f][-v][name...]     unset命令使用变量的名字作为命令参数。
$ echo $DAY               察看变量值。
$ sunday                 所显示的变量值。
$ unset DAY               取消变量值(清除)。
$ echo $DAY               察看变量值。
$                     显