Wie mache ich etwas wie:
if !("abc" in file1 and "def" in file2)
then
echo "Failed"
fi
Ich wusste bereits, wie man "abc" in file1 überprüft: grep -Fxq "abc" file1
, aber ich kann es nicht schaffen if not (command1 and command2)
Teil zur Arbeit.
Antworten:
4 für die Antwort № 1Du hast es fast richtig verstanden. Fügen Sie einfach ein Leerzeichen zwischen dem Ausrufezeichen und den grep-Befehlen hinzu und es würde funktionieren:
if ! (grep -Fxq "abc" file1 && grep -Fxq "def" file2); then
echo "Failed"
fi
Angenommen bash
Es besteht keine Notwendigkeit für extra else
.
Beachten Sie, dass die Verwendung von Klammern die Greps in einer Subshell-Umgebung als Child-Shell-Prozess ausführt. Sie können dies leicht vermeiden, indem Sie geschweifte Klammern verwenden (diese Funktion heißt Gruppenbefehl):
if ! { grep -Fxq "abc" file1 && grep -Fxq "def" file2; }; then
echo "Failed"
fi
Beachten Sie, dass Sie mehr Leerzeichen und ein zusätzliches Semikolon benötigen - isn "t bash
Syntax nur so lustig!?!
2 für die Antwort № 2
Du könntest es tun:
$ grep -Fxq "abc" file1 && grep -Fxq "def" file2 || echo "Failed"
Dies verwendet die bash
logische Operatoren UND &&
und ODER ||
.
Dies kann auf mehrere Zeilen aufgeteilt werden:
$ grep -Fxq "abc" file1 &&
> grep -Fxq "def" file2 ||
> echo "Failed"
2 für die Antwort № 3
if (grep -Fxq "abc" file1 && grep -Fxq "def" file2);
then
echo ""
else
echo "failed"
fi