中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > Shell
shell command line 执行顺序
作者:未知 时间:2005-09-13 23:23 出处:Blog.ChinaUnix.net 责编:chinaitpower
              摘要:shell command line 执行顺序

var1=AB
var2=CD
var3=var1
不准直接用var1 ,将AB变量赋值为CD
unset AB
eval ` eval echo '$'$var3'='$var2`
echo $AB


这样就将AB赋值为CD

                                      +-------------+           单引号
    |------------------------->|                 |--------------------------|
    |  ----------------------->| 1.分隔成记号|---- ---------------|     |
    |  |   ------------------->|                    |       双引号        |     |
    |  |   |                          +-------------+                         |     |
    |  |   |                                 ||                                    |     |
    |  |   |读取下一个命令            \/                                    |     |
    |  |   |     +-------------------------------------------+        |     |
    |  |   |     |                    2.                                |         |     |
    |  |   ------|              检验第一个记号                   |         |     |
    |  |         |开放的关键字                    其他关键字   |         |     |
    |  |         |               非关键字                             |         |     |
    |  |         +-------------------------------------------+         |     |
    |  |                              ||                                            |     |
    |  |                              \/                                            |     |
    |  |               +-----------------------------+                     |     |
    |  |  扩展别名  |           3. 检验第一个记号 |                     |     |
    |  |------------|  别名                               |                     |     |
    |                   |              不是别名            |                     |     |
    |                   +-----------------------------+                     |     |
    |                                 ||                                             |     |
    |                                 \/                                             |     |
    |                           +--------------+                                |     |
    |                           | 4.大括号扩展 |                               |     |
    |                           +--------------+                                |     |
    |                                 ||                                              |     |
    |                                 \/                                              |     |
    |                           +--------------+                                 |     |
    |                           | 5.~符号扩展  |                                |     |
    |                           +--------------+                                 |     |
    |                                 ||                                               |     |
    |                                 \/                                               |     |
    |                           +--------------+       双引号                  |     |
    |                           |  6.参数扩展  |<--------------------------|     |
    |                           +--------------+                                         |
    |                                 ||                                                      |
    |                                 \/                                                      |
    |                    +------------------------------+                            |           
    |                    |  7.命令替换(嵌套命令行处理)  |                         |
    |                    +------------------------------+                            |
    |                                 ||                                                      |
    |                                 \/                                                      |
    |                           +--------------+      双引号                          |
    |                           |  8.算术扩展  |----------------------------|     |
    |                           +--------------+                                   |     |
    |                                 ||                                                |     |
    |                                 \/                                                 |     |
    |                           +--------------+                                    |     |
    |                           |  9.单词分割  |                                     |     |
    |                           +--------------+                                    |     |
    |                                 ||                                                  |     |
    |                                 \/                                                  |     |
    |                           +--------------+                                    |     |
    |                           | 10.路径名扩展|                                   |     |
    |                           +--------------+                                    |     |
    |                                 ||                                                 |     |
    |                                 \/                                                 |     |
    |               +----------------------------------------+               |     |
    |               | 11.命令查寻:函数,内置命令,可执行文件|<----|----|
    |               +----------------------------------------+
    |                                           ||
    |                                           \/
    |将参数带入下一个命令        +-------------+
    |----------eval--------------| 12.运行命令 |
                                           +-------------+

在回车之后会发生什么?

回车之后会发生什么?
l shell解释你的命令行
l shell执行一些替换
l shell在内存中装载你的命令
l shell建立I/O的重定向
l shell执行你的命令程序
l shell等待你程序执行结束
l shell等待下一条命令

当用户输入命令按回车之后,shell在执行命令之前会先解释该命令。当shell执行脚本文件时也是相同的顺序。
命令执行的次序是相当重要的。如果你违反了执行的次序将会得到意想不到的结果。下面将帮助你了解shell执行的次序。为了更清楚,一些关于shell关键字的内部控制命令已经得到了简化。



Shell 处理过程
1.Shell首先从命令行中找出特殊字符(元字符),在将元字符翻译成间隔符号。元字符将命令行划分成小块tokens。Shell中的元字符如下所示:
SPACE , TAB , NEWLINE , & , ; , ( , ) ,< , > , |
2. 程序块tokens被处理,检查看他们是否是shell中所引用到的关键字。
3. 当程序块tokens被确定以后,shell根据aliases文件中的列表来检查命令的第一个单词。如果这个单词出现在aliases表中,执行替换操作并且处理过程回到第一步重新分割程序块tokens。
4.Shell对~符号进行替换。
5.Shell对所有前面带有$符号的变量进行替换。
6.Shell将命令行中的内嵌命令表达式替换成命令;他们一般都采用$(command)标记法。
7.Shell计算采用$(expression)标记的算术表达式。
8.Shell将命令字符串重新划分为新的块tokens。这次划分的依据是栏位分割符号,称为IFS。缺省的IFS变量包含有:SPACE , TAB 和换行符号。
9.Shell执行通配符* ? [ ]的替换。
10.shell把所有從處理的結果中用到的注释删除,並且按照下面的顺序实行命令的检查:
A. 内建的命令
B. shell函数(由用户自己定义的)
C. 可执行的脚本文件(需要寻找文件和PATH路径)
11.在执行前的最后一步是初始化所有的输入输出重定向。
12.最后,执行命令。
最后执行的命令的形式可能与开始时敲进去的命令形式大不相同。这就是POSIX shell的强大之处:非常简短的指令可以产生不同凡响的结果。


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有