UUGRN Stammtisch.sh
Dieses Script ermittelt durch Ausnutzen von Seiteneffekten die Stammtischtermine in Mannheim und Heidelberg und gibt passenden SQL-Code für die Kalender-Tabelle aus.
Funktionsweise
Mittels GNU date wird für alle in Frage kommenden Tage der Wochentag %u ausgegeben, dieser wird von folgenden sed-Ausdruck mit 3 für Mittwoch = Heidelberg und 4 für Donnerstag = Mannheim umgewandelt. Durch die for D-Schleife werden nur die in Frage kommenden Tage durchlaufen, daher kann es keine false positives geben.
Die abschließende while-Schleife übernimmt die Ausgabe von sed und erzeugt das passende, hier unix epoch-Zeitformat und die restlichen Felder.
Script
1 #! /bin/sh
2 #
3 # Berechnet die UUGRN-Stammtische und erzeugt das SQL für die Datenbank
4 #
5 # Jeden 2. Donnerstag im Monat um 19 Uhr in Mannheim (ORT=5)
6 # Jeden 4. Mittwoch im Monat um 20 Uhr in Heidelberg (ORT=6)
7 #
8 # Das Scriptgeht von der Annahme aus, dass der 2. Donnerstag im Monat immer zwischen dem 8. und 14. liegen muss
9 # und dass der 4. Mittwoch im Monat immer zwischen 22. und 28. liegt.
10 # Die Schleifen als auch der egrep | sed Ausdruck gehen direkt darauf ein.
11 #
12 #
13 # Raphael.Becker <rabe@uugrn.org>
14
15 JAHR=2007
16
17 for M in 01 02 03 04 05 06 07 08 09 10 11 12; do
18 for D in 08 09 10 11 12 13 14 22 23 24 25 26 27 28 ; do
19 gdate "+%u %d %Y-%m-%d" --date "$JAHR-$M-$D"
20 done
21 done |
22 egrep "^(4 [01]|3 2)" |
23 sed -e 's,^3 [0-9]* ,20:00:00|6|"kleiner" Stammtisch|,;
24 s,^4 [0-9]* ,19:00:00|5|Stammtisch|,;' |
25 while IFS='|' read ZEIT ORT BEZ DATUM junk; do
26 echo "insert into KALENDER set ID=0, DATUM=$(gdate +%s --date "$DATUM $ZEIT"), ORT_ID=$ORT, TEXT='$BEZ';"
27 done
Ausgabe für 2007
$ bin/uugrn_stammtischkalender.sh insert into KALENDER set ID=0, DATUM=1168538400, ORT_ID=5, TEXT='Stammtisch'; insert into KALENDER set ID=0, DATUM=1169665200, ORT_ID=6, TEXT='"kleiner" Stammtisch'; insert into KALENDER set ID=0, DATUM=1170957600, ORT_ID=5, TEXT='Stammtisch'; insert into KALENDER set ID=0, DATUM=1172689200, ORT_ID=6, TEXT='"kleiner" Stammtisch'; insert into KALENDER set ID=0, DATUM=1173376800, ORT_ID=5, TEXT='Stammtisch'; insert into KALENDER set ID=0, DATUM=1175104800, ORT_ID=6, TEXT='"kleiner" Stammtisch'; insert into KALENDER set ID=0, DATUM=1176397200, ORT_ID=5, TEXT='Stammtisch'; insert into KALENDER set ID=0, DATUM=1177524000, ORT_ID=6, TEXT='"kleiner" Stammtisch'; insert into KALENDER set ID=0, DATUM=1178816400, ORT_ID=5, TEXT='Stammtisch'; insert into KALENDER set ID=0, DATUM=1179943200, ORT_ID=6, TEXT='"kleiner" Stammtisch'; insert into KALENDER set ID=0, DATUM=1181840400, ORT_ID=5, TEXT='Stammtisch'; insert into KALENDER set ID=0, DATUM=1182967200, ORT_ID=6, TEXT='"kleiner" Stammtisch'; insert into KALENDER set ID=0, DATUM=1184259600, ORT_ID=5, TEXT='Stammtisch'; insert into KALENDER set ID=0, DATUM=1185386400, ORT_ID=6, TEXT='"kleiner" Stammtisch'; insert into KALENDER set ID=0, DATUM=1186678800, ORT_ID=5, TEXT='Stammtisch'; insert into KALENDER set ID=0, DATUM=1187805600, ORT_ID=6, TEXT='"kleiner" Stammtisch'; insert into KALENDER set ID=0, DATUM=1189702800, ORT_ID=5, TEXT='Stammtisch'; insert into KALENDER set ID=0, DATUM=1190829600, ORT_ID=6, TEXT='"kleiner" Stammtisch'; insert into KALENDER set ID=0, DATUM=1192122000, ORT_ID=5, TEXT='Stammtisch'; insert into KALENDER set ID=0, DATUM=1193248800, ORT_ID=6, TEXT='"kleiner" Stammtisch'; insert into KALENDER set ID=0, DATUM=1194544800, ORT_ID=5, TEXT='Stammtisch'; insert into KALENDER set ID=0, DATUM=1196276400, ORT_ID=6, TEXT='"kleiner" Stammtisch'; insert into KALENDER set ID=0, DATUM=1197568800, ORT_ID=5, TEXT='Stammtisch'; insert into KALENDER set ID=0, DATUM=1198695600, ORT_ID=6, TEXT='"kleiner" Stammtisch';