ifステートメントで使用されている結果を見つける

ifステートメントで使用されている結果を見つける

if文でfindコマンドの結果をどのように使用し、それをtrueまたはfalseと比較できますか?

このような:

if [ `find . -name test.txt -size 156c`="true" ]; then echo Found; fi

完全なスクリプトは次のとおりです。

#!/bin/bash
if [ $# -ne 2 ]
then
    echo Not enough params
fi

if [ `find . -name $1 -size $2c | grep -q .` -eq 0 ]
then
    echo OK
fi  

ベストアンサー1

findたぶん、単に出力をパイプに接続するだけでgrepトリックを実行できます。

if find . -name test.txt -size 156c | grep -q .; then echo Found; fi

find設定した名前とサイズの基準に一致するファイルが見つからない限り、呼び出しには出力がなく、grep .入力が空でない場合にのみ終了ステータスは0(「true」)になります。このオプションを-q使用するには、出力を印刷しないでください。ここでは終了状態のみを考慮するので、ここでは重要ではありません。


混乱の別の原因を取り除くには:@derobertがコメントで述べたように、括弧は構成構文の一部ではありません。ブール式を評価する役割を担うコマンドが次の形式でifあることがわかります。[終了コードの実際の値を返します([シェル組み込みの場合もあります)。このコマンドは、閉じ括弧があることを確認します。

$ [ 3 -gt 2 ] ; echo $?
0

$ [ 3 -lt 2 ] ; echo $?
1

$ [ 3 -lt 2 ; echo $?
bash: [: missing `]'
2

上記のコマンドでは、0は真、1は偽、2はエラーを意味します。

おすすめ記事