저는 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
명령줄 인수가 아닌 스크립트 이름으로 확장됩니다.
명령줄 인수가 없는지 확인하려면 다음을 사용할 수 있습니다.
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"