1

我该怎么做:

if !("abc" in file1 and "def" in file2)
then
  echo "Failed"
fi

我已经知道如何检查 file1: 中的“abc” grep -Fxq "abc" file1,但我无法让该if not (command1 and command2)部分正常工作。

4

3 回答 3

4

你几乎是对的。只需在感叹号和 grep 命令之间添加一个空格,它就可以工作:

if ! (grep -Fxq "abc" file1 && grep -Fxq "def" file2); then
     echo "Failed"
fi

假设bash,不需要额外的else

请注意,使用括号在子 shell 环境中运行 greps,作为子 shell 进程。您可以通过使用花括号轻松避免这种情况(这称为组命令):

if ! { grep -Fxq "abc" file1 && grep -Fxq "def" file2; }; then
     echo "Failed"
fi

请注意,您需要更多的空格和一个额外的分号——bash语法是不是很有趣!?!

于 2013-03-14T11:51:07.023 回答
2

你可以这样做:

$ grep -Fxq "abc" file1 && grep -Fxq "def" file2 || echo "Failed"

这使用bash逻辑运算符 AND&&和 OR ||

这可以分成多行,例如:

$ grep -Fxq "abc" file1 && 
> grep -Fxq "def" file2 ||
> echo "Failed" 
于 2013-03-14T11:47:54.537 回答
2
if (grep -Fxq "abc" file1 && grep -Fxq "def" file2);
then
  echo ""
else
  echo "failed"
fi
于 2013-03-14T11:49:07.700 回答