
나는 다음을 수행하기 위해 간단한 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