Chinaunix首页 | 论坛 | 博客
  • 博客访问: 39355
  • 博文数量: 15
  • 博客积分: 94
  • 博客等级: 民兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-18 20:03
文章分类

全部博文(15)

文章存档

2012年(15)

最近访客

分类:

2012-08-23 00:07:40

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表示成功非零表示失败,虽然内建命令不创建新的进程,但执行结束后也会有一个状态码,也可以用特殊变量$?读出。
阅读(1085) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~