shell命令的执行步骤(不完整)

来源:互联网 发布:手机淘宝怎么改用户名 编辑:程序博客网 时间:2024/06/10 03:46
(1)将命令分割成令牌,用元字符进行分割,包括空格、Tab键、换行字符、分号、圆括号、输如重定向符、输出重定向符、管道符和&符等等。令牌可以是单词,也可以是I/O重定向符

(2)检查第一个令牌是否不带引号或反斜线的关键字。如果令牌是开发关键字,开放关键字是指,if while ,for或其他控制语句的开始,Shell就认为此命令是复合命令,并为该复合命令进行内部设置
  ,并读取下一个命令,并且再次启动进程。如果此令牌不是复合命令,而是fi,done,then,else等,如果还是在首位,则认为该命令是错误的,抛出错误。

(3)检查该命令是否是命令的别人,检查命令的别名表,如果该命令是别名,则对该命令进行别人还原(也就是替换掉原来的令牌),并且进入步骤(1),如果不是别名,则进行下一步

(4)把花括号的内容展开,比如hel{o,j}o ,展开之后为heloo和heljo

(5)将单词开头的波浪号(~),替换成用户的家目录,比如是root用户,他的家目录就是/root

(6)将$开头的令牌进行变量替换,比如$JAVA_HOME,则是把环境变量中的JAVA_HOME中的值(/usr/local/jdk)取出来进行替换

(7)将反引号(`)的内容进行命令替换,比如 `echo "ABC"` ,则被替换成ABC

(8)将$((express))的内容进行算术运算并替换,比如$((2+1+5)),则把$((2+1+5))替换为8

(9)从变量、命令、算术运算符中替换的结果中取出命令行,用IFS(内部域)分割符

(10)进行通配符展开,比如 /etc/rd* ,展开之后就是在/etc目录下,所有以rc开头的文件

(11)取出通过IFS分割后的第一个字符串作为命令,他可以是二进制文件,shell脚本,

(12)进行IO的重定向操作
 
(13)执行命令
0 0
原创粉丝点击