Как проверить, содержит ли вывод команды строку, а затем выполнить команду, если строка существует
Пример
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