파일의 문자열 길이를 테스트하십시오.

파일의 문자열 길이를 테스트하십시오.

내 주장을 올바르게 사용하고 있는지 잘 모르겠습니다. 문자열이 포함된 텍스트 파일인 매개변수를 전달하고 싶습니다. 이 스크립트를 실행하면 문자열이 32자 미만인 경우에도 항상 if 문을 입력합니다.

#!/bin/bash
if [ {$1} > 32 ]; then
    echo "Error: Password length invalid"
else
    echo "okay"
fi

답변1

를 사용하여 변수의 문자열 길이를 얻을 수 있습니다 ${#variable}. 그리고 -gt대신 에 표현식을 사용해야 합니다.>[ ]

#!/bin/bash -

pass=$(cat < "$1") || exit
if [ "${#pass}" -gt 32 ]; then
    echo >&2 "Error: Password length invalid"
    exit 1
else
    echo "okay"
fi

후행 줄 바꿈을 제외하고 바이트 수가 아닌 첫 번째 인수로 전달된 파일의 문자 수(현재 로케일 인코딩으로 해석됨)를 계산하므로 텍스트 줄이 포함된 파일의 경우 해당 줄을 제공합니다.

답변2

명령을 사용하여 파일 크기를 얻을 수 있습니다 stat -c %s <file>. 아직 벤치마킹하지는 않았지만 길이를 확인하기 위해 파일의 모든 바이트를 메모리에 로드하는 것보다 메타데이터를 직접 읽는 것이 더 합리적입니다.

관련 정보