Kontinuierliche Schleifen in Bash

Kontinuierliche Schleifen in Bash

Ich möchte ein Programm schreiben, das die Größe der Mail-Spool-Datei für den Benutzer ermittelt. (Die Spool-Dateien befinden sich unter Linux in /var/spool/mail/$USER). Dazu möchte ich eine Endlosschleife erstellen, die alle 30 Sekunden ausgeführt wird. Bei jeder Ausführung der Schleife wird die Größe der Mail-Spool-Datei mit der Größe der vorherigen Schleife verglichen. Wenn die neue Größe größer als die alte ist, lasse ich die Meldung „Sie haben neue E-Mails“ ausgeben.

Ich habe das folgende Skript geschrieben, aber es funktioniert nicht. Hat jemand Vorschläge für mich??

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 &

Antwort1

Sie können in Bash eine Endlosschleife verwenden:

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

Sie können das Prüfprogramm auch regelmäßig ausführen lassen, indem Siecron.

Antwort2

Ja, Sie benötigen eine Endlosschleife mit einer Ruhepause von 30 Sekunden. Der folgende Codeausschnitt reicht aus:

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

Aber ich denke, Sie werden bald feststellen, dass dies wahrscheinlich nicht das ist, was Sie tun möchten, wenn Sie dies in einem Bash-Skript tun. Aufgaben wie diese erfordern normalerweise eine Art Daemon.

Um Ihre modifizierte Frage zu beantworten, hier ist eine Variante Ihres Skripts, die wie erwartet funktionieren sollte:

#!/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

verwandte Informationen