동일한 if/then bash 스크립트 문에서 문자열 일치와 빈 파일을 어떻게 확인할 수 있나요?

동일한 if/then bash 스크립트 문에서 문자열 일치와 빈 파일을 어떻게 확인할 수 있나요?

나는 다음을 수행하기 위해 간단한 bash 스크립트를 작성하고 있습니다.

1) 두 개의 파일(foo1 및 foo2)을 확인합니다.

2) foo1이 foo2와 다르고 foo1이 비어 있지 않은 경우 이메일을 보냅니다.

3) foo1이 foo2와 동일하거나... 또는 foo1이 비어 있으면... 아무것도 하지 않습니다.

공백 상태가 나를 혼란스럽게 만듭니다. 먼저 시작해야 할 내용은 다음과 같습니다.

diff --brief <(sort ./foo1) <(sort ./foo2) >/dev/null
comp_value=$?

if [ $comp_value -ne 0 ]
then
        mail -s "Alert" [email protected] <./alertfoo

fi

분명히 이것은 빈 내용을 확인하지 않습니다. 그렇게 하는 방법에 대한 생각이 있나요?

답변1

테스트 -s연산자를 사용하여 파일이 비어 있는지 확인할 수 있으며 일반적으로 파일이 동일한지 확인하는 가장 간단한 방법입니다( 종료 상태를 0과 비교하는 것보다 더 간단한 대안으로 명령문 cmp에서 직접 명령을 사용할 수 있습니다 ). if나는 두 파일을 비교하기 전에 두 파일을 정렬하는 부분을 유지하고 있습니다. 필요하지 않은 경우 두 파일을 cmp.

if [ -s ./foo1 ] && ! cmp -q <(sort ./foo1) <(sort ./foo2); then
    ...

위의 내용을 다음과 같이 읽을 수 있습니다. "./foo1이 비어 있지 않은 경우( [ -s ... ]) AND ( &&) ./foo1 및 ./foo2의 정렬된 형식은 !동일하지 않습니다( cmp)".

답변2

-s를 사용하여 파일이 비어 있는지 확인할 수 있습니다.

if [[ -s $FILE ]] ; then
echo "$FILE has data."
else
echo "$FILE is empty."
fi

문자열이 비어 있는지 여부를 알고 싶다면 -z 옵션을 사용하여 비어 있는지 확인하십시오.

STRING="test"
if [[ -n "$STRING" ]]; then
    echo "String is not empty"
fi

또는 -n을 사용하여 비어 있지 않은지 확인합니다.

STRING=""
if [[ -z "$STRING" ]]; then
    echo "String is empty"
fi

관련 정보