Скрипт Bash с базовым if / else и количеством процессов, запущенных на основе шаблона - PullRequest
2 голосов
/ 05 ноября 2010

Я пытаюсь написать скрипт, который подсчитывает количество процессов, запущенных в соответствии с паттерном.Если оно превышает жестко заданное значение, тогда что-то сделать ... иначе сделать что-то еще.

Я выясняю количество процессов, используя:

ps ax | grep process_name | wc -l | sed -e "s: ::g"

Если вывод команды вышебольше 15 .. должно повториться "Готово".В противном случае выведите «Not Complete».

Пока у меня есть это, но оно не работает:

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

Ответы [ 3 ]

9 голосов
/ 05 ноября 2010
numprocesses=$(ps ax | grep '[s]ms_queue' | wc -l)
if [[ $numprocesses -gt 15 ]] ; then
  echo "Done."
else
  echo "Not Complete."
fi

У вас было несколько проблем.

  • Ваш оператор if не совсем соответствовал вашей спецификации.
  • Чтобы получить выходные данные команды xyz, выследует использовать $(xyz).
  • Нет необходимости убирать пробелы из выходных данных.
  • Если вы не хотите использовать также процесс grep (поскольку он также имеет шаблонон ищет), вы должны использовать шаблон [firstchar]rest grep (или вы можете использовать | grep sms_queue | grep -v grep для удаления процесса grep из подсчета.
  • нет необходимости использовать строку "15" в сравнении.
1 голос
/ 05 ноября 2010

Если вы хотите скопировать вывод команды в переменную, используйте следующий синтаксис:

variable=$(my command)
0 голосов
/ 05 ноября 2010

Как насчет

pgrep -c sms_queue

И вся (переносимая) версия скрипта будет выглядеть так:

if [ "$(pgrep -c sms_queue)" -le 15 ]; then
  echo "Done."
else
  echo "Not Complete."
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...