Shell(本身就是个程序)的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive),Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。
由于历史原因,UNIX系统上有很多种Shell:
1. sh(Bourne Shell):由Steve Bourne开发,各种UNIX系统都配有。
2. csh(C Shell):由Bill Joy(软件爱迪生)开发,随BSD UNIX发布,它的流程控制语句很像C语言,支持很多Bourne Shell所不支持的功能:作业控制,命令历史,命令行编辑。
3. ksh(Korn Shell):由David Korn开发,向后兼容sh的功能,并且添加了引入的新功能,是目前很多UNIX系统标准配置的Shell,在这些系统上往往是指向的符号链接。
4. tcsh(TENEX C Shell):是的增强版本,引入了命令补全等功能,在FreeBSD、Mac OS X等系统上替代了csh。
5. bash(Bourne Again Shell):由GNU开发的Shell,主要目标是与POSIX标准保持一致,同时兼顾对的兼容,从和借鉴了很多功能,是各种Linux发行版标准配置的Shell,在Linux系统上往往是指向的符号链接
文件etc/shells给出了系统中所有已知(不一定已安装)的Shell,除了上面提到的Shell之外还有很多变种。
leon@leon-desktop:~$ cat /etc/shells
# /etc/shells: valid login shells
/bin/csh
/bin/sh
/usr/bin/es
/usr/bin/ksh
/bin/ksh
/usr/bin/rc
/usr/bin/tcsh
/bin/tcsh
/usr/bin/esh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/screen
用户的默认Shell设置在/etc/passwd文件中,
leon:x:1000:1000:leon,,,:/home/leon:/bin/bash
用户leon从字符终端登录或者从图形终端登录,就会执行/bin/bash,如果要切换到其它Shell,可以在命令行输入程序名,例如:sh。