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

一、有限状态机(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)工作。

这里写图片描述

四、上代码

这里写代码片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/242743.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从今天起,逃离迷茫与枯燥,做一个与快乐常伴的人

-0-又是一个下雨天,郑州连着下了一个星期的雨了。国庆长假,街道上褪去了往日的繁华,空荡荡的,连几家最爱吃的商铺也关门回家团圆了。今天中秋节,你在哪里?又在做着什么呢?-1-一个人猫在家里&…

搭建JAVAEE环境

搭建JAVAEE环境 ./表示在当前目录下查找文件所以需要配置环境变量 在Linux下下载 或者在window下传输

小数延迟滤波器

作者:桂。 时间:2017-10-10 22:38:46 链接:http://www.cnblogs.com/xingshansi/p/7648274.html 前言 阵列信号处理中,经常用到小数延迟(fractional delay,FD)的思路,例如Beamformi…

387. First Unique Character in a String QuestionEditorial Solution

Given a string, find the first non-repeating character in it and return it’s index. If it doesn’t exist, return -1. Examples: s “leetcode” return 0. s “loveleetcode”, return 2. Note: You may assume the string contain only lowercase letters. …

AD提高动态的方法(附SNR计算)

作者:桂。 时间:2017-10-10 23:36:40 链接:http://www.cnblogs.com/xingshansi/p/7648475.html 前言 主要分析AD的基本特性,以及动态的计算方法。并总结量化位数确定的前提下,提高信号精度的一般性方法。 未完待续..…

空间谱专题13:联合解算DOA(ML/AP)

其中作者:桂。 时间:2017-10-16 07:51:40 链接:http://www.cnblogs.com/xingshansi/p/7675380.html 前言 主要记录二维测向中,分别利用两个一维阵联合解算的思路。 一、AP算法思想 信号模型: 对应相关矩阵 假设噪声为…

现代C++函数式编程

链接 http://geek.csdn.net/news/detail/96636 概述 函数式编程是一种编程范式,它有下面的一些特征: 函数是一等公民,可以像数据一样传来传去。 高阶函数 递归 pipeline 惰性求值 柯里化 偏应用函数 C98/03中的函数对象&#xff0c…

机器学习之正则化

根据上一篇博客《统计学习概论》可以知道,正则化的作用是选择经验风险和模型复杂度同时较小的模型。下面从过拟合的角度来理解正则化。 #过拟合问题 例子说明,线性回归问题(房价) 分析: 1)左边第一幅图&am…

python开发平台Ubuntu

python开发平台Ubuntu APT软件管理和远程登录

a.out、coff、elf三种文件格式

转自:http://blog.chinaunix.net/uid-11469366-id-1747286.html 补充:a.out早期并不是elf格式的,而是unix下另一种可执行格式,新的a.out是 本文讨论了 UNIX/LINUX 平台下三种主要的可执行文件格式:a.out(…

投影矩阵

作者:桂。 时间:2017-10-19 06:02:00 链接:http://www.cnblogs.com/xingshansi/p/7690292.html 前言 最近在交替投影算法中,用到投影矩阵,简单记录。 一、投影矩阵定义 此处以列满秩为例,行满秩可依次类推…

不同维度极值点查找

作者:桂。 时间:2017-10-19 17:00:12 链接:http://www.cnblogs.com/xingshansi/p/7693557.html 前言 主要梳理不同维度信号极值点的查找思路。 一、思想 思想都是一个,通过极值点的定义:数值高于相邻的点&#xff0c…

俯仰角/偏航角的转化

作者:桂。 时间:2017-10-20 10:29:52 链接:http://www.cnblogs.com/xingshansi/p/7698237.html 前言 主要记录坐标系的转化。 一、坐标转化 对于坐标系: 设方位角为φ,俯仰角为theta,仰角β与偏航角α&am…

安装Centos8.1

安装Centos8.1 按回车

Ubuntu 14.04 LTS 下升级 gcc 到 gcc-4.9、gcc-5 版本

转载: http://www.cnblogs.com/BlackStorm/p/5183490.html Ubuntu 14.04 LTS 下升级 gcc 到 gcc-4.9、gcc-5 版本 如果没记错的话,阿里云ECS上的Ubuntu也是LTS版本。 如果还在使用较旧版本的Ubuntu,或者是Ubuntu LTS,那么我们是…

SVM学习——在matlab上安装libsvm库(一)

环境搭建平台: Windows PCMATLAB 软件libsvm库(SVM工具箱)安装步骤 准备工作 安装对应的编译器,在网站上查看当前matlab版本支持的编译器版本。本文使用的matlab 2015a版本(支持编译器详情)。通过查询&…

正则表达式练习笔记

下面的内容是一个 data1.txt 文本内容,里面记录了一些正则表达式的笔记 long long ago there is girl, shes name is little redhat.. long_long_long#long;long:long This is a test txt... my phone number is 18621735531There are a lot of good books,220123 …

逾期后,如何修复个人征信?

个人征信大家都是知道很宝贵,但是有些朋友会在有意无意之间造成逾期,结果给申请贷款、申请信用卡带来了诸多不便。逾期是谁也不想看到的,但是如果逾期已经发生了,我们就无法改变,唯一能做的就是努力去修复,…

空间谱专题16:信号个数估计

作者:桂。 时间:2017-10-24 21:50:16 链接:http://www.cnblogs.com/xingshansi/p/7726082.html 前言 记录阵列信号在DOA估计中,信源个数估计的基本方法。 一、基本估计方法 参考:王永良《空间谱估计》p42: 以MDL为例&#xff1a…