Linux Bash Shell学习(二十):命令行处理

 

  本文也即《Learning the bash Shell》3rd Edition的第七章Input/Output and Command-Line Processing之读书笔记之四。我们的目的是把书读薄。我们将审视Linux系统如何解析bash。

 bash3.0701

第一步骤 :将命令分给为token,根据空格,TAB, NEWLINE, ;, (, ), <, >, |, 以及 &。

第二步骤 :检查第一个token是否一些关键字,是否是引号,’/’是否是一个需要组合的符号,例如’{‘或者’(‘,看看是否需要读取下一行命令,如果需要,回到第1步骤,如此循环,直到获取完整的命令。如果不是组合命令的开始,而是其他关键字,例如结束fi等,报告语法错误。如果不是这些关键字,进入第3步骤。

第三步骤 :根据alias列表检查命令的第1个tocken,它取得alias的对应,重新回到第1步骤。回到第一步骤,允许alias的嵌套,就A表示B,B表示C,也允许alias表示一些整合命令的开头。

第四步骤 :大括号解析。例如将a{b,c},解析为ab ac。

第五步骤 :波浪号(~)解析,如果在一个词的最前,解释为用户的$HOME目录路径。

第六步骤 :参数解析。如果词开始为$,解析这个参数变量。

第七步骤 :是否因$的解析而产生命令替换。

第八步骤 :对$((string))的格式进行数学运算。

第九步骤 :经过第5步骤开始的几个步骤,重新将词分离,使用$IFS作为分隔符号。

第十步骤 :路径名处理,通配符处理,包括*,?,/。

第十一步 :根据命令的第一个词去查看,优先权一次是function命令,builtin,$PATH路径下的命令。

第十二步 :在设置重定向I/O后执行命令

  这只是其中的一些步骤,并不是所有的。我们通过一个例子做进一步的解释。在执行这个命令之前,已经通过alias ll=”ls -l”。用户目录为/home/alice,$$的值为2537。看看执行命令ll $(type -path cc) ~alice/.*$(($$%1000))的过程。

    • ll $(type -path cc) ~alice/.*$(($$%1000)) 分为各个词
    • ll 不是keyword,所以第二步骤无需处理任何

    • ls -l $(type -path cc) ~alice/.*$(($$%1000)) 将ls -l来替代别名"ll".这是将重复第一步到第三步。

    • ls -l $(type -path cc) ~alice/.*$(($$%1000)) 在第四步不处理任何

    • ls -l $(type -path cc) /home/alice/.*$(($$%1000)) 进行路径解析,将 ~alice解析为/home/alice .

    • ls -l $(type -path cc) /home/alice/.*$((2537%1000)) 将$$接续为2537。$$的用法在以后学习。

    • ls -l /usr/bin/cc /home/alice/.*$((2537%1000)) 执行命令,替换"type -path cc".

    • ls -l /usr/bin/cc /home/alice/.*537 进行算术运算。

    • ls -l /usr/bin/cc /home/alice/.*537 第九步无处理。

    • ls -l /usr/bin/cc /home/alice/.hist537 将文件名替代了通配符.*537。

    • /usr/bin 中获得ls命令

    • /usr/bin/ls 是带选项-l以及两个参数执行的

相关链接: 我 的Linux操作相关文章

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值