系统启动什么样的shell程序取决于你个人的用户ID配置。在/etc/passwd文件中,在用户ID记
    录的第7个字段中列出了默认的shell程序。只要用户登录到某个虚拟控制台终端或是在GUI中启动
    终端仿真器,默认的shell程序就会开始运行。
    在下面的例子中,用户christine使用GNU bash shell作为自己的默认shell程序:

    $ cat /etc/passwd
    […]
    Christine:x:501:501:Christine B:/home/Christine:/bin/bash
    $

    bash shell程序位于/bin目录内。从长列表中可以看出/bin/bash(bash shell)是一个可执行程序:

    $ ls -lF /bin/bash
    -rwxr-xr-x. 1 root root 938832 Jul 18 2013 /bin/bash*
    $

    本书所使用的CentOS发行版中还有其他一些shell程序。其中包括tcsh,它源自最初的C shell:

    $ ls -lF /bin/tcsh
    -rwxr-xr-x. 1 root root 387328 Feb 21 2013 /bin/tcsh*
    $

    另外还包括ash shell的Debian版:

    $ ls -lF /bin/dash
    -rwxr-xr-x. 1 root root 109672 Oct 17 2012 /bin/dash*
    $

    最后,C shell的软链接(参见第3章)指向的是tcsh shell:

    $ ls -lF /bin/csh
    lrwxrwxrwx. 1 root root 4 Mar 18 15:16 /bin/csh -> tcsh*
    $

    这些shell程序各自都可以被设置成用户的默认shell。不过由于bash shell的广为流行,很少有
    人使用其他的shell作为默认shell。


    说明 第1章对各种shell有一个简单的描述。如果你想进一步学习GNU bash shell之外的shell,第23章提供了更多的相关信息。


    默认的交互shell会在用户登录某个虚拟控制台终端或在GUI中运行终端仿真器时启动。不过
    还有另外一个默认shell是/bin/sh,它作为默认的系统shell,用于那些需要在启动时使用的系统shell
    脚本。

    你经常会看到某些发行版使用软链接将默认的系统shell设置成bash shell,如本书所使用的
    CentOS发行版:

    $ ls -l /bin/sh
    lrwxrwxrwx. 1 root root 4 Mar 18 15:05 /bin/sh -> bash
    $

    但要注意的是在有些发行版上,默认的系统shell和默认的交互shell并不相同,例如在Ubuntu
    发行版中:

    $ cat /etc/passwd
    […]
    christine:x:1000:1000:Christine,,,:/home/christine:/bin/bash
    $
    $ ls -l /bin/sh
    lrwxrwxrwx 1 root root 4 Apr 22 12:33 /bin/sh -> dash
    $

    注意,用户christine默认的交互shell是/bin/bash,也就是bash shell。但是作为默认系统shell
    的/bin/sh被设置为dash shell。


    窍门 对bash shell脚本来说,这两种不同的shell(默认的交互shell和默认的系统shell)会造成问题。
    一定要阅读第11章中有关bash shell脚本首行的语法要求,以避免这些麻烦。


    并不是必须一直使用默认的交互shell。可以使用发行版中所有可用的shell,只需要输入对应
    的文件名就行了。例如,你可以直接输入命令/bin/dash来启动dash shell。

    $ /bin/dash
    $

    除启动了dash shell程序之外,看起来似乎什么都没有发生。提示符$是dash shell的CLI提示符。
    可以输入exit来退出dash shell。

    $ exit
    exit
    $

    这一次好像还是什么都没有发生,但是dash shell程序已经退出了。为了理解这个过程,我们
    将在下一节中探究登录shell程序与新启动的shell程序之间的关系。