Pro-Linux.de

Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 14. Dez 2018 12:55

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: shell: Tage auswerten
BeitragVerfasst: 08. Jul 2005 8:52 
Hallo,

ich würde gerne ein Skript schreiben, das auswertet, ob der heutige Tag gerade oder ungerade ist. Dazu habe ich mir folgendes einfallen lassen, was aber leider einen Fehler auswirft, den ich nicht finde
Code:
#!/bin/sh

UNGERADE=`seq -w 1 2 31`
GERADE=`seq -w 2 2 31`
DATUM=undef
TAG=`date +%d`

for TEST in "${GERADE}; do
   expr "${TEST}" = "${TAG}" && DATUM=GERADER_TAG
done

for TEST in "${UNGERADE}"; do
   expr "${TEST}" = "${TAG}" && DATUM=UNGERADER_TAG
done

echo $DATUM

exit0
[/code ]

Als Ausgabe bleibt  $DATUM auf dem Wert undef. Dafür schmeißt expr eine "0" für jede Schleife auf stdout. Wo ist mein Denkfehler?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08. Jul 2005 10:17 
Offline

Registriert: 19. Mai 2005 11:34
Beiträge: 3
also ich bin auch nicht der grosse Experte (sicher gibt es noch bessere Lösungen), aber so sollte es auch gehen:
[code]
#!/bin/sh

UNGERADE=`seq -w 1 2 31`
GERADE=`seq -w 2 2 31`
DATUM=undef
TAG=`date +%d`

for TEST in "${GERADE}"; do
for TESTI in $TEST; do
if [ $TESTI = $TAG ]; then
DATUM="GERADER TAG"
fi
done
done

for TEST in "${UNGERADE}"; do
for TESTI in $TEST; do
if [ $TESTI = $TAG ]; then
DATUM="UNGERADER TAG"
fi
done
done

echo $DATUM

exit 0
[/code]

Die Ursache war wohl, dass Du die gesamte Reihe mit dem aktuellen Tag vergleichen wolltest.

Gruss
Tom2


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08. Jul 2005 11:32 
Ich habs. Das Problem ist, wenn seq in eine Variable schreibt, dann geht die for Schleife, warum auch immer, nicht jeden Wert durch, sondern nimmt die Variable als einen gesamten String.
Hier nun die Lösung:
Code:
#!/bin/sh

TAG=`date +%d`
ZUSTAND=undef

for TEST in `seq -w 2 2 31`; do
   expr "${TEST}" = "${TAG}" 2>/dev/null 1>&2 && ZUSTAND=GERADER_TAG
done

for TEST in `seq -w 1 2 31`; do
   expr "${TEST}" = "${TAG}" 2>/dev/null 1>&2 && ZUSTAND=UNGERADER_TAG
done

echo ${ZUSTAND}

exit0


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 08. Jul 2005 21:19 
Offline

Registriert: 10. Sep 2004 14:37
Beiträge: 266
mit modulo gehts übrigens auch einfacher:
Code:
#!/bin/sh 
TAG=`date +%e` 
MODULO2=$[ TAG % 2 ]
[ $MODULO2 -eq 0 ] && echo "gerade" || echo "ungerade"
oder wenn man willl auch als einzeiler:
Code:
[ $[ `date +%e` % 2 ] -eq 0 ] && echo gerade || echo ungerade

_________________
"Email und Internet haben gemeinsam, dass sie beide in HTML geschrieben sind" (Peter Huth, TV-Computerexperte). Zitiert nach http://www.antihuth.de/


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de