Como faço algo como:
if !("abc" in file1 and "def" in file2)
then
echo "Failed"
fi
Eu já sabia como verificar "abc" no arquivo1: grep -Fxq "abc" file1
, mas eu não consigo obter o if not (command1 and command2)
parte para o trabalho.
Respostas:
4 para resposta № 1Você entendeu quase certo. Basta adicionar um espaço entre o ponto de exclamação e os comandos do grep e isso funcionaria:
if ! (grep -Fxq "abc" file1 && grep -Fxq "def" file2); then
echo "Failed"
fi
Assumindo bash
, não há necessidade de extra else
.
Observe que o uso de parênteses executa os greps em um ambiente de subshell, como um processo de shell filho. Você pode facilmente evitar isso usando chaves (essa coisa é chamada de comando de grupo):
if ! { grep -Fxq "abc" file1 && grep -Fxq "def" file2; }; then
echo "Failed"
fi
Note que você precisa de mais espaços e um ponto e vírgula adicional - isn "t bash
sintaxe tão engraçado!?!
2 para resposta № 2
Você poderia fazer:
$ grep -Fxq "abc" file1 && grep -Fxq "def" file2 || echo "Failed"
Isso usa o bash
operadores lógicos E &&
e OU ||
.
Isso pode ser dividido em várias linhas como:
$ grep -Fxq "abc" file1 &&
> grep -Fxq "def" file2 ||
> echo "Failed"
2 para resposta № 3
if (grep -Fxq "abc" file1 && grep -Fxq "def" file2);
then
echo ""
else
echo "failed"
fi