2016-02-04 6 views
-3

Я пишу небольшой скрипт, где мне нужно проверить, работает ли какой-либо конкретный процесс или нет? а затем, согласно тому, что я должен принять меры. И да раковина - это баш.Ошибка сценария оболочки: «[: too many arguments»

Проверка процесса выполняется или нет? From This Я попытался,

Process_Num='ps -ef | grep /opt/sro/bin/srocmsd | grep -v "grep" | wc -l' 
if [ $Process_Num -eq 1 ] 
then 
     ***Do Stuff*** 
else 
     ***Do Stuff*** 
fi 

, но я получаю сообщение об ошибке:

**Error : line 191: [: too many arguments** 

При выполнении той же команды непосредственно на оболочке/терминал я получаю выход как 1.

Есть ли ошибка синтаксиса ? Может ли кто-нибудь помочь?

+4

Если вы скопировали ответ вы связаны правильно, вы знаете, Process_Num это просто строка, на самом деле не оценивается –

ответ

5

Чтобы поместить результат выполнения команды в переменной окружения, вы должны поместить команду в обратные кавычки (`) или использовать $(command) синтаксис:

Process_Num=$(ps -ef | grep /opt/sro/bin/srocmsd | grep -v "grep" | wc -l) 
+0

Да, Working :) Спасибо – Chirag

+3

btw, ответ на вопрос, который вы связали, дает точно такой же совет;) – kostya

2

Вы, вероятно, имел в виду использовать обратные кавычки здесь:

Process_Num='ps -ef | grep /opt/sro/bin/srocmsd | grep -v "grep" | wc -l' 

т.е.

Process_Num=`ps -ef | grep /opt/sro/bin/srocmsd | grep -v "grep" | wc -l` 
      ^              ^
+0

Да, Работаю ... Спасибо :) – Chirag

2

Вам даже не нужно сделать так, со с помощью вызова grep дважды, а затем wc -l, чтобы подсчитать строки и положить все это в Замена команды.

Вы можете просто использовать grep -q, чтобы получить статус выхода grep:

if ps cax | grep -Fq 'srocmsd' 
then 
    echo "found matching process" 
else 
    echo "Didn't find matching process" 
fi 
+0

У этой проблемы есть определенная проблема, что несколько вероятно, что 'grep' будет соответствовать самому себе. Во всяком случае, это вековой FAQ, на который не нужно отвечать. – tripleee

+0

'grep -q '[s] rocmsd'', чтобы гарантировать, что' grep' не соответствует самому себе, но из-за использования опции '-c' в' ps', которая печатает только ** исполняемое имя **, эта проблема выиграла' Приходите. – anubhava

+0

А, мой плохой. Однако ваше исправленное исправление должно было бы сбросить флаг '-F'. – tripleee