Оператор Bash 'if', сравнивающий результаты различных команд - PullRequest
2 голосов
/ 21 октября 2011

Используя адаптированный пример, данный мне Сэмом Руби , который я настроил, чтобы я мог показать, чего я пытаюсь достичь.

app1=$(someapp -flag | grep usefulstuff | cut -c 5-10)
if [$app1 = (someapptwo -flag | grep usefulstuff | cut -c 20-25)]; then
mkdir IPFolder-1
elif ...blah blah
fi 

Могу ли я использовать grep в качестве шоувыше или я не тот лай?или это должно выглядеть примерно так:

app1=$(someapp -flag | grep usefulstuff | cut -c 5-10)
app2=$(someapptwo -flag | grep usefulstuff | cut -c 20-25)
if [$app1 = $app2]; then
mkdir IPFolder-1
elif ...blah blah
fi 

Ответы [ 2 ]

7 голосов
/ 21 октября 2011

По крайней мере, в других оболочках, вы должны быть намного осторожнее с пробелами;квадратная скобка является именем команды и должна быть отделена от предыдущих и следующих слов.Вам также нужно (опять же в классических оболочках наверняка) заключить переменные в двойные кавычки:

app1=$(someapp -flag | grep usefulstuff | cut -c 5-10)
if [ "$app1" = "$(someapptwo -flag | grep usefulstuff | cut -c 20-25)" ]
then mkdir IPFolder-1
elif ...blah blah
then : do this instead...
fi

Вы можете сделать все это в одну строку (ну, две, потому что я по возможности избегаю горизонтальной полосы прокрутки):

if [ "$(someapp    -flag | grep usefulstuff | cut -c  5-10)" = \
     "$(someapptwo -flag | grep usefulstuff | cut -c 20-25)" ]
then mkdir IPFolder-1
elif ...blah blah
then : do this instead...
fi

Или вы можете сделать это с двумя отдельными захватами команд:

app1=$(someapp    -flag | grep usefulstuff | cut -c  5-10)
app2=$(someapptwo -flag | grep usefulstuff | cut -c 20-25)
if [ "$app1" = "$app2" ]
then mkdir IPFolder-1
elif ...blah blah
then : do this instead...
fi

Обновление: Добавлено несколько дополнительных цитат.Можно было бы также процитировать назначения:

app1="$(someapp -flag | grep usefulstuff | cut -c  5-10)"

Никакого вреда не будет;с bash это строго не обязательно (но вполне возможно, что это необходимо для архаичной оболочки Bourne).

3 голосов
/ 21 октября 2011

Вам нужно сослаться на значение вашего выражения, добавив $:

...
if [ "$app1" = "$(someapptwo -flag | grep usefulstuff | cut -c 20-25)" ]; then
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...