Bashで1000を超える数値を検索する

Bashで1000を超える数値を検索する

私はbash初心者で、次の問題を解決したいと思います。ディレクトリ内の1000を超える数値を含むコマンドライン引数で受け取ったすべてのファイルを見つけます。コマンドラインに引数がない場合、メッセージが表示され終了します。

まず、grepを使用して大きいことを確認する方法がわからないので、1000のような数字があるかどうかを確認したいと思います。これは私のコードです。

#!/bin/bash

if [ $0 -eq 0 ]
then
    echo "No arguments"
    exit 0
fi

for filename in $1
do
    if [ -f filename ]
    then
        if grep -q "1000" $filename
            echo $filename
        fi
    fi
done

3行と15行でエラーが発生しますが、理由はわかりません。

誰でも私を助けることができますか?

更新されたコード:

#!/bin/bash

if [ $1 -eq 0 ]
then
    echo "No arguments"
    exit 0
fi

for filename in $1
do
    if [ -f filename ]
    then
        if grep -q "1000" $filename
        then
            echo $filename
        fi
    fi
done

答え1

$0コマンドライン引数ではなくスクリプト名に展開されます。

3.4.2 特殊パラメータ

コマンドライン引数がないことを確認するには、次のようにします。

if (($#==0)); then
    echo "No arguments" >&2
    exit 1
fi

$#コマンドライン引数の数だけ拡張されます。また、エラーをstderrにリダイレクトし、0ではなくコード1で終了することに注意してください。 0 は通常成功を示し、0 以外の場合はエラーを示します。

$1常にオプションですので、循環する必要はありません。また、あなたのスクリプトは目次-fパラメータとして、これは技術的にはファイルですが、テストに合格しません。

grep -q "1000" $filenameファイルが存在するかどうかが検索され1000、実際に1000が含まれていない場合(たとえば)、1000より大きい数字は検索されません101000

ディレクトリで再帰 grep を使用して正規表現検索を実行して、1000 以上の数値を見つけることができます。

grep -rE '[1-9][0-9]{3,}' "$1"

これにより、ファイル名と一致が印刷されますが、ファイル名のみを印刷するには、次の手順を実行できます。

grep -rEl '[1-9][0-9]{3,}' "$1"

関連情報