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"

관련 정보