2

bashシェルスクリプトの変数を1未満と比較するにはどうすればよいですか?

以前に実行しましたが、「1:そのようなファイルまたはディレクトリはありません」というメッセージが表示されます。

grep_result=`grep -r $ID . | wc -l`

echo $grep_result
# it said '1: No such file or directory'
if [ $grep_result < 1 ]; then
    echo "Wrong id.
    exit 1
fi
4

4 に答える 4

3

bashの観点からは、これは呼び出さ1れたファイルを$grep_result変数にパイプすることを意味します。-ltこの場合、演算子を使用する必要があります。(leは未満を表します)

grep_result=`grep -r $ID . | wc -l`

echo $grep_result
# it said '1: No such file or directory'
if [ $grep_result -lt 1 ]; then
    echo "Wrong id.
    exit 1
fi
于 2012-11-21T19:10:28.987 に答える
1

コードを変更する2つの異なる方法は次のとおりです。

ルート#1:

コードを次のように変更します。

grep_result=$(grep -r $ID .)

echo $grep_result

if [ -z "$grep_result" ]; then
    echo "Wrong id."
    exit 1
fi

説明:

  • grep_result=$(grep -r $ID .)grep -r $ID .サブシェルで実行し、結果の出力をに保存しstdoutますgrep_result。この$(...)表記はコマンド置換と呼ばれ、読みやすさを向上させるためにバッククォートを使用するよりも優先されます+コマンドのネストを可能にします
  • if [ -z "$grep_result" ]; then:組み込みの「テスト」シェルの-zオプションは、が空の文字列であるかどうかをチェックします。その場合、条件はtrueと評価されます。["$grep_result"

ルート#2:

または、代わりに:

grep_result_count=$(grep -rc $ID .)

echo $grep_result_count

if [ $grep_result_count -eq 0 ]; then
    echo "Wrong id."
    exit 1
fi

説明:

  • grep_result_count=$(grep -rc $ID .):上記と同様のアイデアですが、 ;の代わりに-rcforのオプションを使用していることに注意してください。オプションの一部は、「一致した行を出力せず、代わりに見つかった一致の数の数値集計を出力する」ことを意味します。したがって、この場合、0以上の整数を取得します。grep-rc
  • if [ $grep_result_count -eq 0 ]; then-eqここでのオプションは、左側の値が右側の値と等しいかどうかをチェックします。この場合、前のgrepコマンドからの一致の数が正確に0に等しいかどうかを確認します。
于 2012-11-21T19:12:15.863 に答える
1

一致しないことを確認する適切な方法は次のとおりです。

if ! grep -q -r "$ID" . ; then
    echo Wrong id.
    exit 1
fi

そうです。ifの目的ifは、コマンドを実行してその終了コードを確認することです。 grep一致した場合は成功終了コードを返し、そうでない場合は1(エラー)を返します。ほとんどのUnixツールは、まさにこの目的のために、そのように書かれています。

一致する場合にカウントを取得することは、マイナーな変更です。

if matches=$(grep -r "$ID" .) ; then
    echo "$matches" | wc -l
else
    echo Wrong Id.
    exit 1
fi

grep -qを使用してエラーコードを返すだけで、何も出力しないことに注意してください。単一のファイルのカウント(またはファイルごとの一致数)が必要な場合は、それがgrep -c出力されます。

于 2012-11-21T19:42:17.203 に答える
0

より効率的なものを使用することもできます。

if ! grep -qr "$ID" . ; then
    echo "Wrong id."
    exit 1
fi

お役に立てれば。

この-qオプションを使用すると、grep静かになり、パターンが見つかるとすぐに停止し(見つかった場合)、trueパターンが見つかった場合は戻り値を出力しfalseます。これはおそらくあなたの問題を解決するための最も効率的な方法です。

于 2012-11-21T19:28:25.083 に答える