Bash脚本:检查命令列表

我有一个bash脚本,用这样的命令列表启动一个ps命令:

 comando="ps -o pid,pcpu,cmd -C \"$2\"" 

$ 2必须是这种forms的variables: command1command1 command2 command3 ... commandn

我怎样才能检查这个variables,以避免错误? 我需要一个控制(与if)来检查模式。

编辑: ps可以这样调用:

ps -o pid,pcpu,cmd -C "command1 command2 ... commandn" 。 如果有人以script.sh -C " command1 command2"调用这个bash脚本,ps命令返回“IMPROPER LIST”。 我想在启动ps命令之前避免ps错误并回显我的错误。

你应该避免把命令放在variables中 。

如果空间是让你绊倒的东西,你可以像这样去除它们:

 ps -o pid,pcpu,cmd -C ${2// } 

这将删除所有的空间,所以如果你的任何命令string包含空格将会毁了他们。 这将删除逗号两边的前后空格和空格:

 commands=${2/# } # leading space commands=${command/% } # trailing space commands=${command/, /,} # spaces after commas commands=${command/ ,/,} # spaces before commas ps -o pid,pcpu,cmd -C "$commands" 

如果您想要返回一个错误而不是清理和运行input,只需执行空间移除或其他清理,并检查结果是否与input相同。 如果他们不是,那么输出一个错误。

它可以使用for循环

 arguments="command1 command2 command3 command4 command5" for arg in $arguments do ps -o pid,pcpu,cmd -C $arg done 

结果:

 ps -o pid,pcpu,cmd -C command1 ps -o pid,pcpu,cmd -C command2 ps -o pid,pcpu,cmd -C command3 ps -o pid,pcpu,cmd -C command4 ps -o pid,pcpu,cmd -C command5 

也许你能给出一个更好的例子,说明它应该如何工作,你期望的是什么……它对我来说看起来并不太清楚。


要从命令行调用它,我在注释中解释的方式只是使用$*来捕获所有传递的参数。

 for arg in $* do ps -o pid,pcpu,cmd -C $arg done 

然后像这样调用它:

 ./test.sh command1 command2 command3 command4 command5 command6 

它会运行每个参数的ps命令。