が true でないecho
場合にコマンドを実行したいと思います。cat /etc/passwd | grep "sysa"
何が間違っているのでしょうか?
if ! [ $(cat /etc/passwd | grep "sysa") ]; then
echo "ERROR - The user sysa could not be looked up"
exit 2
fi
ベストアンサー1
試す
if ! grep -q sysa /etc/passwd ; then
grep
true
検索対象が見つかった場合は を返し、false
見つからなかった場合は を返します。
したがって、偽 ( ! false
) == ではありませんtrue
。
if
シェルでの評価は非常に柔軟に設計されており、多くの場合、コマンドのチェーンは必要ありません (あなたが書いたように)。
また、コードをそのまま見ると、$( ... )
cmd-substitution 形式を使用していることは賞賛に値しますが、プロセスから何が出てくるかを考えてみてください。私の言っていることを理解してみてください。grepに (count) オプションをecho $(cat /etc/passwd | grep "sysa")
使用してから実行することで、さらに進めることができますが、これは機能しますが、かなり古い方法です。-c
if ! [ $(grep -c "sysa" /etc/passwd) -eq 0 ] ; then
しかし、次のような最新のシェル機能(算術評価)を使用することもできます。
if ! (( $(grep -c "sysa" /etc/passwd) == 0 )) ; then ...`
これにより、C-lang ベースの比較演算子==,<,>,>=,<=,%
やその他のいくつかの演算子を使用できるという利点も得られます。
この場合、Orwellophileのコメントによれば、算術評価はさらに次のように削減できる。
if ! (( $(grep -c "sysa" /etc/passwd) )) ; then ....
または
if (( ! $(grep -c "sysa" /etc/passwd) )) ; then ....
最後に、という賞がありますUseless Use of Cat (UUOC)
。:-) 飛び上がってゴスカと叫ぶ人もいるでしょう。 はgrep
コマンドラインでファイル名を取得できるので、必要がないのに余分なプロセスやパイプ構造を呼び出す必要はないとだけ言っておきます。;-)
これが役に立つことを願っています。