hi ...
ich möchte eine if-schleife erzeugen, die kontinuierlich prüft, ob eine Variable einen bestimmten wert hat
z.Bsp:
#!/bin/sh
SEC=`date | cut -c18-19`
if [ "$DAT"="00" ]; then
echo -e "\<!--no-->007:©<!--char-->"
fi
#nun würde ich gerne wieder zu SEC=`...... springen wollen
Das Programm soll im Hintergrund laufen und Stündlich (hier zur vollen Minute) einen Piepton ausgeben.
Endlosschleife mit if ... fi erzeugen ?
Re: Endlosschleife mit if ... fi erzeugen ?
wäre ein cronjob nicht sinnvoller?
Last edited by trinity on 15. Nov 2001 11:00, edited 1 time in total.
"Korrekt, Freundlich, Kostenfrei", wähle genau zwei. (Lutz Donnerhacke in dcsf)
Re: Endlosschleife mit if ... fi erzeugen ?
nein .. in diesem falle nicht <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">
brauche es sekundengenau
brauche es sekundengenau
Re: Endlosschleife mit if ... fi erzeugen ?
dann solltest du wohl auch eine schleife verwenden. mit if erzeugt man keine schleifen, sondern mit while
"Korrekt, Freundlich, Kostenfrei", wähle genau zwei. (Lutz Donnerhacke in dcsf)
Re: Endlosschleife mit if ... fi erzeugen ?
ich würde mich ehrlich über eine hilfreiche antwort freuen
Re: Endlosschleife mit if ... fi erzeugen ?
while ["1" = "1"]; do
if ["$DAT ....
fi
done
Wäre eine endlosschleife. Allerdings nicht mit "if"
if ["$DAT ....
fi
done
Wäre eine endlosschleife. Allerdings nicht mit "if"
Re: Endlosschleife mit if ... fi erzeugen ?
Ihhhh, Polling auf einem Multitasking-System?!? Na ja...
Sekundengenauigkeit ist mit Shell-Mitteln nicht zu errreichen. Entweder du lässt tatsächlich die Schleife die ganze Zeit ungebremst laufen und damit auch Rechenzeit fressen, die andere Prozesse nutzbringend anlegen könnten, oder Du wartest im Schleifenkörper mittels "sleep 1" eine Sekunde. Allerdings hat das das Problem, dass ja nach Auslastung des Systems "sleep 1" ggf. erst nach vielleicht 1,2 Sekunden zurückkommt. Damit könnte es passieren, dass Du einmal genau die Nuller-Sekunden überschlägst.
Was Du machen wolltest, könnte man also am besten so lösen:<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
while true; do
if [ $(date "+%S") == "00" ] ; then
echo "Piep!"
else
sleep 1
fi
done
</font><hr></pre></blockquote>
Deine Programmausschnitte haben immer so etwas herzzerreissend unvollständiges... SEC wird gesetzt, DAT wird abgefragt. Fehler? Feature? Design?
Jochen
Sekundengenauigkeit ist mit Shell-Mitteln nicht zu errreichen. Entweder du lässt tatsächlich die Schleife die ganze Zeit ungebremst laufen und damit auch Rechenzeit fressen, die andere Prozesse nutzbringend anlegen könnten, oder Du wartest im Schleifenkörper mittels "sleep 1" eine Sekunde. Allerdings hat das das Problem, dass ja nach Auslastung des Systems "sleep 1" ggf. erst nach vielleicht 1,2 Sekunden zurückkommt. Damit könnte es passieren, dass Du einmal genau die Nuller-Sekunden überschlägst.
Was Du machen wolltest, könnte man also am besten so lösen:<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
while true; do
if [ $(date "+%S") == "00" ] ; then
echo "Piep!"
else
sleep 1
fi
done
</font><hr></pre></blockquote>
Deine Programmausschnitte haben immer so etwas herzzerreissend unvollständiges... SEC wird gesetzt, DAT wird abgefragt. Fehler? Feature? Design?
Jochen
Re: Endlosschleife mit if ... fi erzeugen ?
danke jochen
ich schreibe date in eine Variable und schneide es zurecht, so daß TIME="00:00:00" .. das frag ich in ner schleife ab ...
Funktioniert perfekt und auch genau, da die schleiße ja sogar mehrmals pro sekunde durchläuft
ich schreibe date in eine Variable und schneide es zurecht, so daß TIME="00:00:00" .. das frag ich in ner schleife ab ...
Funktioniert perfekt und auch genau, da die schleiße ja sogar mehrmals pro sekunde durchläuft
Re: Endlosschleife mit if ... fi erzeugen ?
Schau noch mal in die man-Page zu date. Mit den Format-Feldern kannst Du Dir das Zurechtschneidern der Date-Ausgabe mittels cut u.ä. sparen.
Jochen
Jochen