最近 一个非常喜欢吃马斯卡彭的学长正在上Linux课程,对Linux的知识充满了兴趣,非常喜欢使用Shell编程。但是Shell编程写起来非常的痛苦。
在Linux的终端中。你可以执行各种各样的
命令,比如 `ls`列出当前目录下有什么。
定义:一个合法的命令一定是由:小写字母,数字,减号组成的非空字符串。
当然每一个命令是可以有选项的:
localhost@LingNc:~$ ls -l
drwxr-xr-x 2 lingnc lingnc 4096 Mar 27 2024 C++
定义:一个合法的选项一定是由一个 减号 - 开头长度为2的字符串,命令与选项之前只有一个空格,例如 `-a`。
一个完整的命令行的组成如下:
ls -a dir -l
其中 `ls`是命令,`-l `与 `-a`都是选项,而 `dir`是 `-a`选项的参数。
参数由小写字母,数字和减号组成。
爱吃马斯卡彭的学长非常好奇这些参数是怎么被程序处理的,但是学长的知识有限,所以请你来写一个程序,为这个 `bash`终端的执行的命令解析他们的参数。
在一个命令输入的选项中有两种:
-
无参选项,即像 `ls -l`中的 `-l`一样后面没有附带参数。合法的选项
-
有参选项,比如 `ls -a root`中的 `-a`这个选项后面需要接一个 `root`字符串作为 `-a`选项的参数。
因为在Linux中命令非常的多,爱吃马斯卡彭的学长通过查阅手册得知了 `ls`这个命令有哪些选项的字符串,比如:`la:r:`。
-
如果一个字母带了冒号`a:`或者`r:`那么他就是有参数的选项
-
如果一个字符不带冒号`l`那么他就是无参数的选项。
现在爱吃马斯卡彭的获得了一些命令(不一定是`ls`)对应的命令行,他想知道这个命令行中的参数是不是合法的,他通过查阅手册知道了每个命令的
格式字符串,现在请你帮帮他吧。
对于每个命令行(每一行),你的工具应当一直向这一行后分析。当你的工具遇到某个字符串既不是合法的选项,又不是某个合法选项的参数时,分析就停止。命令行剩余的该行未分析部分不构成该行命令的选项,因此你的程序应当忽略它们,只输出前面合法的选项。