Bash의 연속 루프

Bash의 연속 루프

나는 사용자의 메일 스풀 파일 크기를 알아내는 프로그램을 작성하고 싶습니다. (Linux의 /var/spool/mail/$USER에 있는 스풀 파일) 이를 위해 30초마다 한 번씩 실행되는 연속 루프를 만들고 싶습니다. 루프가 실행될 때마다 메일 스풀 파일의 크기를 이전 루프의 크기와 비교합니다. 새 크기가 이전 크기보다 크면 "새 메일이 있습니다."라는 메시지를 인쇄하게 됩니다.

아래 스크립트를 작성했지만 제대로 작동하지 않습니다. 누구든지 나에게 어떤 제안이 있습니까??

while true
do    
    clear    
    size= ls -l /var/spool | wc -c    
    sleep 30    
    newsize= ls -l /var/spool | wc -c    
    if [$size < $newsize]
    then    
            echo "You've got mail!"
    else    
            echo "Sorry no mail yet"    
    fi    
    sleep 30    
done &

답변1

Bash에서 무한 루프를 사용할 수 있습니다.

while true ; do
    # Your code here.
    sleep 30;
done

다음을 통해 정기적인 검사 프로그램 실행을 예약할 수도 있습니다.크론.

답변2

예, 30초 동안 절전 모드를 유지하는 무한 루프가 필요합니다. 다음 스니펫이 수행됩니다.

#!/bin/bash
while true
do
    # do any stuff you want
    echo "doing my thing"
    # sleep for 30 seconds
    sleep 30
done

하지만 내 생각에 당신은 bash 스크립트에서 그것을 하는 것이 아마도 당신이 원하는 것이 아니라는 것을 곧 알게 될 것입니다. 이와 같은 작업에는 일반적으로 어떤 형태의 데몬이 필요합니다.

수정된 질문에 답하기 위해 예상대로 작동하는 스크립트 변형은 다음과 같습니다.

#!/bin/bash
while true
do
    clear
    size=$(ls -l /var/spool | wc -c)
    sleep 30
    newsize=$(ls -l /var/spool | wc -c)
    if [ $size -lt $newsize ]
    then
            echo "You've got mail!"
    else
            echo "Sorry no mail yet"
    fi
    sleep 30
done

관련 정보