Linux Bash Shell学习(二十):命令行处理
来源:互联网 发布:人工智能图片 编辑:程序博客网 时间:2024/05/23 01:57
本文也即《Learning the bash Shell》3rd Edition的第七章Input/Output and Command-Line Processing之读书笔记之四。我们的目的是把书读薄。我们将审视Linux系统如何解析bash。
第一步骤:将命令分给为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 不是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操作相关文章
- Linux Bash Shell学习(二十):命令行处理
- Bash Shell 命令行处理
- Linux Bash Shell学习(十四):命令行选项
- Linux Bash Shell学习(二):目录和通配符
- linux学习之旅(二)&& shell命令行基础讲解
- 《学习bash》笔记--命令行处理
- linux Bash 命令行操作(学习笔记)
- Linux Bash Shell学习(十):流程控制——for
- learning bash shell 学习笔记(二)
- Bash Shell 学习记录(二)
- linux bash shell 学习
- Bash Shell 命令行 选项/参数处理
- Bash Shell中命令行选项/参数处理
- Bash Shell中命令行选项/参数处理
- Bash Shell中命令行选项/参数处理
- Bash Shell中命令行选项/参数处理
- Bash Shell中命令行选项/参数处理
- Bash Shell中命令行选项/参数处理
- C++笔记——c++编程思想(下)第一章异常处理
- (转)如何利用书签向word文档读取或写入数据[C#]
- 上传图片和图片处理
- 谁分享了谁的月光
- 国内最新最全面IP数据库
- Linux Bash Shell学习(二十):命令行处理
- squid 2.7 终极配置
- 周志强:“80后”集体焦虑是社会转型的代价
- T-SQL入门攻略之1-初识T-SQL
- 学习编程语言,不让自己成为浮躁的人!
- vncviewer 启动gnome窗口
- [草稿]IBF得失录
- [搭建开发环境]在Zend Studio中结合Zend Debugger调试 【转】
- Expression Blend实例中文教程(3) - 布局控件快速入门Grid