파일이나 디렉터리를 매개 변수로 사용하는 스크립트가 있고 파일을 메가바이트 단위로 비교하여 파일이 1MB보다 크거나 작거나 같은지 확인하려고 합니다.
내 생각에 대답은 다음과 같다.
#!/bin/bash
FILE=$1
export FILE1
if [ -f$1 ];
then
echo "Hello world!"
fi
if [ $# -lt 1 ]; then
echo "This file is less than 1 megabyte"
fi
이 파일을 매개변수로 전달하여 1MB 미만인지 확인하려고 합니다. 이제 $# -lt 1이 실제로 1MB보다 작은지 아니면 정수 1보다 작은지 알아야 합니다.
답변1
일부 댓글 작성자/답변자가 말했듯이 스크립트가 들어오는 파일의 크기를 가져오지 못합니다. 메가바이트와 비교하려면 이 작업을 수행해야 합니다.
한 가지 옵션은 stat
다음 명령입니다.
bytes=$(stat -c %s filename_here)
또 다른 옵션은 wc
다음 명령입니다.
bytes=$(wc -c < filename_here)
다음으로 이를 1MB와 비교하려고 합니다. bash 산술은 정수로 제한되므로 소수와 비교하려는 시도는 실패할 수 있습니다. 대신 1048576바이트와 비교하세요.
요약하면 다음과 같습니다.
#!/bin/bash
if [ -f "$1" ];
then
echo "Hello world!"
bytes=$(stat -c %s "$1")
if [ "$bytes" -lt 1048576 ]; then
echo "This file is less than 1 megabyte"
fi
fi
크기 수를 첫 번째 if
명령문으로 옮겼습니다. 존재하지 않는 파일의 크기를 확인하는 것은 의미가 없습니다. 또한 매개변수로 다른 작업을 수행하지 않는 한 다른 변수 이름을 사용할 필요가 없으므로 그냥 $1
.
답변2
스크립트에 논리 및 구문 오류가 있습니다.
- 할당
FILE
하고 내보냅니다FILE1
(해롭지는 않지만 의미가 없습니다). - 더 이상 사용하지도 사용
FILE
하지도FILE1
않습니다(동일). - "조건 마스터"와 파일 이름 사이에 공백이 필요합니다.
[ -f$1 ]
$#
파일 크기가 아닌 스크립트의 매개변수 수를 생성합니다 (Filipe Brandenburger가 이미 지적했듯이).stat
귀하에게 제공되는 정보 외에도 대체 정보 소스가 필요합니다 .du -b file