Bash 脚本:检查命令列表

Bash 脚本:检查命令列表

我有一个 bash 脚本,它ps使用如下命令列表启动一个命令:

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

$2 必须是以下形式的变量:command1command1 command2 command3 ... commandn

我如何检查此变量以避免错误?我需要一个控件(带有 if)来检查模式。

编辑:ps可以这样调用:

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

答案1

你应该避免将命令放在变量中

如果空格让你感到困惑,你可以像这样去掉它们:

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

这将剥夺全部但是,如果您的任何命令字符串包含空格,它将破坏它们。这将删除前导空格和尾随空格以及逗号两侧的空格:

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"

如果您想返回错误而不是清理并运行输入,只需执行空格删除或其他清理操作,然后检查结果是否等于输入。如果不相等,则输出错误。

答案2

它可以与 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 命令。

相关内容