-2

我正在从输入中读取一些命令并在运行时在我的 java 程序中执行。如果有任何语法或语义错误,它将在运行时失败。相反,我想早点失败。所以我想在执行之前验证命令。

我怎样才能做到这一点??有没有简单的方法。

前任:

grep -P -o "cpums=[^ ]+" | cut -f2 -d= | cut -f1 -d"]" | awk '{a+=$1;}
END {print a;}

在此命令末尾缺少单引号 (')。它会在我的 java 程序中运行时失败。如果能早点失败就好了。所以我只想在我的程序开始时验证每个命令。

我正在寻找一种最佳方式。

4

4 回答 4

2

不,没有简单的方法。有一个艰难的方法,它涉及你提出一组规则并使用某种解析器。有一种低效的方法,它涉及尝试执行命令只是为了查看它是否有效。可能还有其他方法,但我认为它们中的任何一种都不会简单。

你试过用谷歌搜索这个吗?其他人已经编写了它的可能性很小但非零。

于 2013-09-24T12:00:54.633 回答
1

检查语法和参数的最佳方法是使用与您期望的内容相对应的正则表达式来解析用户输入。

如果它与您等待的 wath 不匹配,那么您可以向用户提示“使用说明”。

于 2013-09-24T12:03:52.473 回答
0

尝试这个 :

sh -n yourscriptfile
bash -n yourscriptfile

set -u还有助于捕捉拼写错误和未初始化的变量

于 2013-09-24T12:01:31.513 回答
0

哦,这真的很“容易”。

  1. 采用 bash 语法,例如从这里或采用 ANTLR 语法形式在这里
  2. 将语法移植到java。您可以去掉所有 C 部分并从真正的 bahs 语法中移植核心语法,或者使用预分解的 ANTLR 语法。将您的语法与ANTLRxText解析器组合器一起使用。这三种解决方案都需要外部工具。
  3. 在运行 bash 命令之前,您可以使用语法对其进行验证。
于 2013-09-24T13:26:55.190 回答