使用有限状态机(FSM)解释shell 命令

3 篇文章 0 订阅

一、有限状态机(Finite State Machine,FSM)是表示有限个状态及在这些状态之间的转移和动作等行为的数学模型,在计算机领域有着广泛的应用。FSM一个常见的应用就是用来负责Parser复杂的数据结构,比如解释URI协议(uri-rfc239、uri-rfc3986)(注释:统一资源标识符(Uniform Resource Identifier,或URI)),在这里以Linux下shell命令字符串解释为列子,说明FSM的应用。

二、简单介绍shell中的各种符号应用
1、shell脚本中的单引号和双引号一样都是字符串的界定符,而不是字符的界定符。单引号用于保持引号内所有字符的字面值,即使引号内的\和回车也不例外,但是字符串中不能出现单引号。(注意是所有,只是单引号本身不能够出现在其中)。

2、双引号用于保持引号内所有字符的字面值(回车也不例外),但以下情况除外:
escape$ 的字面值
`表示`的字面值
\”表示”的字面值
\表示\的字面值
除以上情况之外,在其它字符前面的\无特殊含义,只表示字面值。

双引号还有一个作用,引用的字符串包含空格的时候,可以用双引号括起来。

3、环境变量,使用 () USER, HOME使 {USER},${HOME}形式引用环境变量。

三、基于以上认识,设计了下面的状态图,系统初始状态是TEXT状态,其中ESC是ESCAPE,表示转义字符状态,举个列子,提供shell字符串cmdline,逐个每个输入的字符,如果遇到输入进来的字符是 \ 表示进入ESC状态,在ESC状态输入任何字符立即进入TEXT状态。在看,TEXT状态,如果输入的字符是$,系统进入VAR环境变量状态,再接下来如果是 { 字符, 系统进入 VARNAME2 状态,否则进入 VARNAME状态。待系统遍历完所有的cmdline上的字符,就完成了shell 命令的解释(parser)工作。

这里写图片描述

四、上代码

这里写代码片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值