shell 内建命令、 函数和外部命令

9 篇文章 0 订阅
Shell识别三种基本命令:内建命令、Shell函数以及外部命令:
(1)内建命令就是由Shell本身所执行的命令。
   有些命令是由于其必要性才内建的,例如cd用来改变目录,read会将来自用户(和文件)的输入数据传给Shell外亮。
   另一种内建命令的存在则是为了效率,其中最典型的就是test命令,编写脚本时经常会用到它。另外还有I/O命令,例如echo于printf.
(2)Shell函数是功能健全的一系列程序代码,以Shell语言写成,它们可以像命令那样引用。
(3)外部命令就是由Shell副本(新的进程)所执行的命令 ,基本的过程如下:
   a. 建立一个新的进程。此进程即为Shell的一个副本。
   b. 在新的进程里,在PATH变量内所列出的目录中,寻找特定的命令。
      /bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin为PATH变量典型的默认值。
      当命令名称包含有斜杠(/)符号时,将略过路径查找步骤。
   c. 在新的进程里,以所找到的新程序取代执行中的Shell程序并执行。
   d. 程序完成后,最初的Shell会接着从终端读取下一条命令,和执行脚本里的下一条命令。

使用type可以查看是否是内建命令:
  type (不带参数)会显示命令是内建命令还是外部命令
       -t :file 外部命令;alias 命令别名;builtin 内置命令
       -a :会将命令PATH路径显示出来
如何执行交互式命令:
用户在命令行输入命令后,一般情况下Shell会fork并exec该命令,但是Shell的内建命令例外,执行内建命令相当于调用Shell进程中的一个函数,并不创建新的进程.

比如:cd、alias、umask、exit等命令即是内建命令,凡是用which命令查不到程序文件所在位置的命令都是内建命令,内建命令没有单独的man手册,要在man手册中查看内建命令,应该man bash-builtins,内建命令虽然不创建新的进程,但也会有Exit Status,通常也用0表示成功非零表示失败,虽然内建命令不创建新的进程,但执行结束后也会有一个状态码,也可以用特殊变量$?读出

     为了不同的需要,UNIX提供了不同的Shell。现在的UNIX大部分都支持BourneShell,以下教程就以BourneShell(Bsh)为例,一步步的领略UNIX Shell的强大功能,占先其强大魅力,达到更方便灵活的管理、应用UNIX的目的。 
  1.UNIX内核和Shell的交互方法 
  启动UNIX时,程序UNIX(内核)将被调入计算机内存,并一直保留在内存中直到机器关闭。在引导过程中,程序init将进入后台运行一直到机器关闭。该程序查询文件/etc/inittab,该文件列出了连接终端的各个端口及其特征。当发现一个活动的终端时,init程序调用getty程序在终端上显示login等登陆信息。(username和passwd),在输入密码后,getty调用login进程,该进程根据文件/etc/passwd的内容来验证用户的身份。若用户通过身份验证,login进程把用户的home目录设置成当前目录并把控制交给一系列setup程序。setup程序可以是指定的应用程序,通常setup程序为一个Shell程序,如:/bin/sh 即Bourne Shell(command出来了,呵呵)。 
  得到控制后,Shell程序读取并执行文件/etc/.profile以及.profile。这两个文件分别建立了系统范围内的和该用户自己的工作环境。最后Shell显示命令提示符,如$。(这是以bsh为例,若是csh,为.cshrc,ksh为.kshrc,bash为.bashrc等等) 注不妨把/etc/.profile和.profile看成DOS的autoexec.bat 或config.sys文件) 
  当shell退出时,内核把控制交给init程序,该程序重新启动自动登陆过程。有两种方法使shell退出,一是用户执行exit命令,二是内核(例如root用kill命令)发出一个kill命令结束shell进程。shell退出后,内核回收用户及程序使用的资源。 
  用户登陆后,用户命令同计算机交互的关系为:命令进程--->Shell程序--->UNIX内核--->计算机硬件。当
用户输入一个命令,如$ls, Shell将定位其可执行文件/bin/ls并把其传递给内核执行。内核产生一个新的子进程调用并执行/bin/ls。当程序执行完毕后,内核取消该子进程并把控制交给其父进程,即Shell程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值