Bash脚本,具有基于模式运行的基本if/else和进程计数

And*_*ndy 3 bash shell scripting

我正在尝试编写一个脚本来计算与patern匹配的进程数.如果它超过硬编码值,那么做一些事情......否则做其他事情.

我发现使用的进程数:

ps ax | grep process_name | wc -l | sed -e "s: ::g"
Run Code Online (Sandbox Code Playgroud)

如果上述命令的输出大于15,则应该回显"完成".否则,回显"未完成".

到目前为止,我有这个,但它没有工作:

numprocesses=ps ax | grep sms_queue | wc -l | sed -e "s: ::g"
if [ $numprocesses -le "15" ] ; then
  echo "Done."
else
  echo "Not Complete."
fi
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 10

numprocesses=$(ps ax | grep '[s]ms_queue' | wc -l)
if [[ $numprocesses -gt 15 ]] ; then
  echo "Done."
else
  echo "Not Complete."
fi
Run Code Online (Sandbox Code Playgroud)

你有一些问题.

  • 您的if语句与您的规范不完全匹配.
  • 要捕获xyz命令的输出,您应该使用$(xyz).
  • 无需从输出中剥离空格.
  • 如果你不想也接受这个grep过程(因为它也有它正在寻找的模式),你应该使用[firstchar]restgrep模式(或者你可以用来从计数中| grep sms_queue | grep -v grep删除grep进程).
  • 在比较中不需要使用字符串 "15".

  • 由于这个答案列出了除主要错误之外的各种改进,我想添加使用算术表达式的建议:`if(($ numprocesses> 15)); 然后......` 这更好看. (2认同)
  • 不需要`| wc -l`,只需将`-c`标志添加到grep (2认同)