Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
shell: Tage auswerten

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Hora
Gast





BeitragVerfasst am: 08. Jul 2005 8:52   Titel: shell: Tage auswerten

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?
 

Tom2



Anmeldungsdatum: 19.05.2005
Beiträge: 3

BeitragVerfasst am: 08. Jul 2005 10:17   Titel:

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
 
Benutzer-Profile anzeigen Private Nachricht senden

Hora
Gast





BeitragVerfasst am: 08. Jul 2005 11:32   Titel:

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
 

kanonenfutter



Anmeldungsdatum: 10.09.2004
Beiträge: 266

BeitragVerfasst am: 08. Jul 2005 21:19   Titel:

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/
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy