如何检查命令的输出是否包含字符串,然后在字符串存在时运行命令

时间:2018-06-07 06:07:50

标签: bash shell loops sh flow-control

实施例

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

输出应为

如果在$ MACHTYPE的输出中找到darwin

,那么它是一个mac

请指导我!

4 个答案:

答案 0 :(得分:1)

如果您使用bash,则可以使用=~运算符:

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

来自bash手册页:

  

可以使用另外的二元运算符=〜,其优先级与==和!=相同。使用它时,操作符右侧的字符串被视为扩展正则表达式并相应匹配(如在regex(3)中)。

答案 1 :(得分:1)

如果您没有支持正则表达式的bash版本,那么您可以使用 globbing

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

请注意,您必须使用[[,而不是[

sh 等其他shell可能支持[[,但标准无法保证这一点。

答案 2 :(得分:0)

您可以直接评估您的命令,例如:

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

在这种情况下,grep如果找到值将退出0并且输出将被重定向到/dev/null如果尝试然后您可以调用您的命令,在这种情况下:echo "it is a mac"

答案 3 :(得分:0)

下面的代码可以在cmd上获取命令的输出,然后检查是否有特定的单词。

command="command here"

if[ `echo $command | grep -c "\"darwin\""` -gt 0 ]; then
    Do anything you want here
fi