Как проверить, содержит ли вывод команды строку, а затем выполнить команду, если строка существует

Пример

if "darwin" in $MACHTYPE; 
  then
    echo "whoa it's a mac!"
fi

И вывод должен быть

Вау, это Mac, если Дарвин найден в выводе $MACHTYPE

Пожалуйста, ведите меня!

4 ответа

Если у вас нет версии bash который поддерживает регулярные выражения, то вы можете использовать globbing:

if [[ $MACHTYPE = *darwin* ]]  
then
    echo "whoa it's a mac!"
fi

Обратите внимание, что вы должны использовать [[не [,

Другие снаряды, такие как sh может поддержать [[ но это не гарантируется стандартом.

При условии, что вы используете bashВы могли бы использовать =~ оператор:

if [[ "$MACHTYPE" =~ "darwin" ]]; 
then
  echo "whoa it's a mac!"
fi

От bash справочная страница:

Доступен дополнительный двоичный оператор =~ с тем же приоритетом, что и == и!=. Когда это используется, строка справа от оператора считается расширенным регулярным выражением и соответствует соответствующим образом (как в регулярном выражении (3)).

Вы можете оценить вашу команду напрямую, например:

if uname -a | grep -i "darwin" > /dev/null; then
    echo "it is a mac"
fi

В этом случае, grep выйдет 0, если найдет значение и вывод будет перенаправлен на /dev/null Если попытаться, то вы можете вызвать вашу команду, в этом случае: echo "it is a mac"

Приведенный ниже код может получить выходные данные вашей команды в cmd, а затем проверить, есть ли конкретное слово.

command="command here"

if[ `echo $command | grep -c "\"darwin\""` -gt 0 ]; then
    Do anything you want here
fi
Другие вопросы по тегам