
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