Shell识别三种基本命令:内建命令、Shell函数以及外部命令:
* 内建命令就是由Shell本身所执行的命令。有些命令是由于其必要性才内建的,例
如cd用来改变目录,read会将来自用户(和文件)的输入数据传给Shell变亮。另
一种内建命令的存在则是为了效率,其中最典型的就是test命令,编写脚本时经常
会用到它。另外还有I/O命令,例如echo于printf.
* Shell函数是功能健全的一系列程序代码,以Shell语言写成,它们可以像命令那样
引用。
* 外部命令就是由Shell副本(新的进程)所执行的命令,基本的过程如下:
a.
建立一个新的进程。此进程即为Shell的一个副本。
b.
在新的进程里,在PATH变量内所列出的目录中,寻找特定的命令。/bin:/usr/bin:
/usr/X11R6/bin:/usr/local/bin为PATH变量典型的默认值。当命令名称包含
有斜杠(/)符号时,将略过路径查找步骤。
c.
在新的进程里,以所找到的新程序取代执行中的Shell程序并执行。
d.
程序完成后,最初的Shell会接着从终端读取下一条命令,和执行脚本里的下一条命令。
内置命令属于shell的一部分(内置在系统中)。如果用一个简单文件名作为命令,shell将首先检查它是否是某条内置命令的名字。如果是内置命
令名称,那么shell将其作为调用进程的一部分执行,也就是说shell并不会创建新的进程执行内置命令。shell并不需要在文件结构中搜索内置命令
程序,这是因为shell可以立即访问它们。
如果用户输入的简单文件名不是内置命令,shell将使用PATH变量作为指南,搜索目录结构,以查找用户想要的程序。如果shell找到这个程序,那么它将创建一个新的进程以执行这个程序。
Shell如何执行命令
执行交互式命令
用户在命令行输入命令后,一般情况下Shell会fork并
exec该命令,但是Shell的内建命令例外,执行内建命令相当于调用Shell进程中的一个函数,并不创建新的进程。以前学过的cd、alias、
umask、exit等命令即是内建命令,凡是用which命令查不到程序文件所在位置的命令都是内建命令,内建命令没有单独的man手册,要在man手
册中查看内建命令,应该
$ man bash-builtins
内建命令,如export、shift、if、
eval、[、for、while等等。内建命令虽然不创建新的进程,但也会有Exit
Status,通常也用0表示成功非零表示失败,虽然内建命令不创建新的进程,但执行结束后也会有一个状态码,也可以用特殊变量$?读出。
阅读(1709) | 评论(0) | 转发(1) |