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はエラーを意味します。