In Skript erkennen ob Vormittag oder Nachmittag

Hallo,

hat irgendwer eine Idee, wie man in einem Skript unter Linux in einer Abfrage prüfen kann, ob Vormittag oder Nachmittag ist?

Ich bin für jeden Hinweis dankbar.

Gruß

Thomas

Hallo,

hat irgendwer eine Idee, wie man in einem Skript unter Linux
in einer Abfrage prüfen kann, ob Vormittag oder Nachmittag
ist?

Ich bin für jeden Hinweis dankbar.

Du überlegst Dir, welcher Zeitraum Vor- oder Nachmittag sein soll.
z.B. 9.00 - 12:30 …
Dann fragst Du einfach die aktuelle Zeit ab „date +%X“ und läßt überprüfen ob die aktuelle Zeit in solch einen Zeitraum fällt.

Grüße
K.

Hallo,

Du überlegst Dir, welcher Zeitraum Vor- oder Nachmittag sein
soll.
z.B. 9.00 - 12:30 …

ich habe es sogar noch einfacher…

bis 12:00 ist alles Vormittag und anschließend alles Nachmittag.

Dann fragst Du einfach die aktuelle Zeit ab „date +%X“ und
läßt überprüfen ob die aktuelle Zeit in solch einen Zeitraum
fällt.

wie prüfe ich dann am besten ab, ob die Uhrzeit vor oder nach 12:00 Uhr ist?

Gruß

Thomas

Hallo,

ich habe es sogar noch einfacher…

bis 12:00 ist alles Vormittag und anschließend alles
Nachmittag.

wie prüfe ich dann am besten ab, ob die Uhrzeit vor oder nach
12:00 Uhr ist?

TAGESZEIT=„vormittag“
["$(date +%H)" -ge „12“]&&TAGESZEIT=„nachmittag“
echo $TAGESZEIT

Grüße
K.

1 Like

Hallo,

["$(date +%H)" -ge „12“]&&TAGESZEIT=„nachmittag“

sieht echt genial aus und funktioniert super! Kannst Du mir vielleicht in kurzen Worten beschreiben, was in dem Befehl bis einschließlich der beiden & gemacht wird?

Gruß

Thomas

Hallo,

["$(date +%H)" -ge „12“]&&TAGESZEIT=„nachmittag“

sieht echt genial aus und funktioniert super! Kannst Du mir
vielleicht in kurzen Worten beschreiben, was in dem Befehl bis
einschließlich der beiden & gemacht wird?

Abfrage und Variablenzuweisung.

http://bin-bash.de/scripts.php
http://de.wikibooks.org/wiki/Linux-Kompendium:_Shell…
http://ibiblio.org/pub/Linux/docs/HOWTO/Bash-Prog-In…

Grüße
K.

1 Like

Ich bin für jeden Hinweis dankbar.

Hiho,

der Hinweis lautet in solchen Fällen man date. Dort findet sich dieser Hinweis:

%p locale’s equivalent of either AM or PM; blank if not known

und das erzeugt dann mit
date +%p die Ausgabe AM oder PM.

Gruß,
Stefan

date %p bei deutscher Lokalisation
Hallo Stefan,

%p locale’s equivalent of either AM or PM; blank if not known
und das erzeugt dann mit
date +%p die Ausgabe AM oder PM.

Der letzte Teil

blank if not known

ist da leider der Haken an der Sache. Bei den meisten deutschen Lokalisationen ist diese Variable eben nicht definiert, so daß man sowohl vormittags als auch nachmittags nichts als ein blank erhält :frowning:
Theoretisch könnte man in der Datei /usr/share/i18n/locales/de_DE die Variable am_pm anpassen, z.B. so:

am\_pm "";""

statt des ursprünglich vorhandenen

am\_pm "";""

um dann mit locale-gen die Localization neu zu generieren.
Auf die Art erhält man mit meinem Beispiel bei

date +%p

jetzt die Ausgabe

nm

was n ach m ittag heissen soll :wink:
Könnte man noch wortreicher ausbauen, scheint mir aber zuviel Aufwand für so ein eher theoretisches Problem zu sein…

@Thomas
… oder steckt da mehr dahinter? Etwas, was man vielleicht mit einem (oder zwei?) cronjobs auch lösen könnte?

Viele Grüße
Marvin

Hallo,

Theoretisch könnte man in der Datei …

wobei am/pm auch nicht unbedingt identisch ist, mit dem was wir so als vormittag / nachmittag bezeichnen. Und morgen, mittag, abend, nacht, würden dann auch noch überflüssig.

Grüße
K.

Hallo Klaus,

Theoretisch könnte man in der Datei …

wobei am/pm auch nicht unbedingt identisch ist, mit dem was
wir so als vormittag / nachmittag bezeichnen.

Was noch dazu käme, ja. Aber zum Glück teilt Thomas ja seinen Tag konventionell um 12 Uhr :wink:
Aber das Ganze scheint mir auch eher so eine Fingerübung für die Shell zu sein. Deshalb auch meine Anfrage bei Thomas, ob da noch was anderes dahinter steckt.

Viele Grüße
Marvin

if(((timestamp()+(6*60*60))modulo(24*60*60))

Hallo Safrael,

if(((timestamp()+(6*60*60))modulo(24*60*60))

fängt die
Epoche nicht am 1.1.1970 00:00 Uhr UTC an?
Keine Ahnung, wo Du wohnst, aber in Deutschland kommt man
selbst mit der Sommerzeit nicht auf 18 Stunden Differenz.

Mist, hab die Zeitzone vergesssen. Meine Berechnung basiert auf der Zeitzone EST, das kann man aber leicht korrigieren indem man die Ziffer 6 durch die korrekte ersetzt.
http://www.unixtimestamp.com/index.php
Ich habe die Zeit einfach hier entnommen. Bei timestamp eine „1“ einsetzen und Du weist ab wann sie läuft.

Und bei genauerer Betrachtung fehlt auch noch Sommer/Winterzeit.
Meine Lösung wird also für eine praktische Anwendung zu kompliziert. Die anderen waren da besser.

ist da leider der Haken an der Sache. Bei den meisten
deutschen Lokalisationen ist diese Variable eben nicht
definiert, so daß man sowohl vormittags als auch nachmittags
nichts als ein blank erhält :frowning:

Dann setzt man die LOCALE halt um mit

#!/bin/bash
export LC\_ALL=en\_US
date +%p

Gruß,
Stefan

HAllo Marvin,

@Thomas
… oder steckt da mehr dahinter? Etwas, was man vielleicht
mit einem (oder zwei?) cronjobs auch lösen könnte?

ich habe es momentan mit zwei separaten Cron-Jobs gelöst, möchte aber eigentlich alle diese Dinge wieder in einem Job vereinen, da ich dann bei Änderungen nicht immer bestimmte Befehlssequenzen aus einer Batchdatei herausnehmen muss und in die andere einbauen. Dann kann ich die nämlich innerhalb einer Datei besser „abfangen“.

Gruß

Thomas

Hallo Thomas,
danke für die Rückmeldung. Ja, wenn das so ist, dann hast Du mit dem Vorschlag von Klaus eine prima Lösung.

Viele Grüße
Marvin

Und bei genauerer Betrachtung fehlt auch noch
Sommer/Winterzeit.
Meine Lösung wird also für eine praktische Anwendung zu
kompliziert. Die anderen waren da besser.

Ich finde die Lösung sehr elegant, weil sie universeller und leichter zu erweitern ist als Lösungen, die mit Stunden und Minuten hantieren. Bei Addieren und Vergleichen von Zeitangaben macht man es sich fast immer einfacher, wenn man zunächst alles in Sekunden umwandelt und dann erst mit der Arithmetik beginnt. Die Anpassung an die lokale Zeit inkl. Sommerzeit erhält man dabei durch Addieren von date +%:::z * 3600.

Im vorliegenden Anwendungsfall wäre es damit recht einfach, den Zeitraum für „Vormittag“ frei konfigurierbar zu machen. Natürlich geht das auch mit der Lösung von Klaus, aber wenn „Vormittag“ bedeutet „zwischen 07:30 und 12:00“, oder Nacht „zwischen 20:30 und 06:00“, dann wird damit die Abfrage schon etwas komplex.

Gruß
A.