どうすれば次のようになりますか。
if !("abc" in file1 and "def" in file2)
then
echo "Failed"
fi
file1の「abc」をチェックする方法はすでに知っていますgrep -Fxq "abc" file1
が、パーツを機能させることができませんif not (command1 and command2)
。
あなたはそれをほぼ正しく理解しました。感嘆符とgrepコマンドの間にスペースを追加するだけで、次のように機能します。
if ! (grep -Fxq "abc" file1 && grep -Fxq "def" file2); then
echo "Failed"
fi
と仮定するとbash
、余分なものは必要ありませんelse
。
括弧を使用すると、子シェルプロセスとして、サブシェル環境でgrepsが実行されることに注意してください。中括弧を使用すると、これを簡単に回避できます(これはグループコマンドと呼ばれます)。
if ! { grep -Fxq "abc" file1 && grep -Fxq "def" file2; }; then
echo "Failed"
fi
より多くのスペースと追加のセミコロンが必要であることに注意してください–bash
構文はそれほど面白いものではありません!?!
あなたができること:
$ grep -Fxq "abc" file1 && grep -Fxq "def" file2 || echo "Failed"
これは、bash
論理演算子AND&&
およびORを使用し||
ます。
これは、次のように複数の行に分割できます。
$ grep -Fxq "abc" file1 &&
> grep -Fxq "def" file2 ||
> echo "Failed"
if (grep -Fxq "abc" file1 && grep -Fxq "def" file2);
then
echo ""
else
echo "failed"
fi