#!/bin/bash # Quelle: https://de.wikipedia.org/wiki/Ewiger_Kalender Stand: 2014-07-25 usage() { echo "Aufruf: $0 " echo "Rückgabe: Wochentag, abgekürzt (Mo, Di, Mi, Do, Fr, Sa, So)" } # usage getWochentag() { # Fehlerabfangversuch SOLLTAG=$1 SOLLMON=$2 SOLLJHR=$3 FEHLER=0 [ -z "$SOLLTAG" ] && FEHLER=1 VERS=$(echo "$SOLLTAG" | tr -d '[0-9]') [ -z "$VERS" ] || FEHLER=1 [ -z "$SOLLMON" ] && FEHLER=1 VERS=$(echo $SOLLMON | tr -d '[0-9]') [ -z "$VERS" ] || FEHLER=1 [ "x${#SOLLJHR}" != "x4" ] && FEHLER=1 VERS=$(echo $SOLLJHR | tr -d '[0-9]') [ -z "$VERS" ] || FEHLER=1 if [ $FEHLER -ne 0 ]; then usage exit 1 fi # SOLLTAG=$(echo "$SOLLTAG" | tr -d '0') # Pech am 10., 20. und 30. eines Monats # SOLLMON=$(echo "$SOLLMON" | tr -d '0') # Pech im Oktober [ "y${SOLLTAG:0:1}" = "y0" ] && SOLLTAG="${SOLLTAG:1:1}" [ "y${SOLLMON:0:1}" = "y0" ] && SOLLMON="${SOLLMON:1:1}" # Jahre im Jahrhundert, relevant ist die Spalte J00=1 J06=1 J17=1 J23=1 J28=1 J34=1 J45=1 J51=1 J56=1 J62=1 J73=1 J79=1 J84=1 J90=1 J01=2 J07=2 J12=2 J18=2 J29=2 J35=2 J40=2 J46=2 J57=2 J63=2 J68=2 J74=2 J85=2 J91=2 J96=2 J02=3 J13=3 J19=3 J24=3 J30=3 J41=3 J47=3 J52=3 J58=3 J69=3 J75=3 J80=3 J86=3 J97=3 J03=4 J08=4 J14=4 J25=4 J31=4 J36=4 J42=4 J53=4 J59=4 J64=4 J70=4 J81=4 J87=4 J92=4 J98=4 J09=5 J15=5 J20=5 J26=5 J37=5 J43=5 J48=5 J54=5 J65=5 J71=5 J76=5 J82=5 J93=5 J99=5 J04=6 J10=6 J21=6 J27=6 J32=6 J38=6 J49=6 J55=6 J60=6 J66=6 J77=6 J83=6 J88=6 J94=6 J05=7 J11=7 J16=7 J22=7 J33=7 J39=7 J44=7 J50=7 J61=7 J67=7 J72=7 J78=7 J89=7 J95=7 # Zahl der Jahrhunderte (jul./greg.) HJ03=1 HJ10=1 HJ17=1 HJ04=2 HJ11=2 HJ18=2 HG15=2 HG19=2 HJ05=3 HJ12=3 HJ19=3 HG16=3 HG20=3 HJ06=4 HJ13=4 HJ20=4 HJ00=5 HJ07=5 HJ14=5 HJ21=5 HG17=5 HG21=5 HJ01=6 HJ08=6 HJ15=6 HJ22=6 HJ02=7 HJ09=7 HJ16=6 HJ23=7 HG18=7 HG22=7 # Monate M01=2 M02=5 M03=5 M04=1 M05=3 M06=6 M07=1 M08=4 M09=7 M10=2 M11=5 M12=7 # Sonntagsbuchstaben S11='F' S12='E' S13='D' S14='C' S15='B' S16='A' S17='G' S21='G' S22='F' S23='E' S24='D' S25='C' S26='B' S27='A' S31='A' S32='G' S33='F' S34='E' S35='D' S36='C' S37='B' S41='B' S42='A' S43='G' S44='F' S45='E' S46='D' S47='C' S51='C' S52='B' S53='A' S54='G' S55='F' S56='E' S57='D' S61='D' S62='C' S63='B' S64='A' S65='G' S66='F' S67='E' S71='E' S72='D' S73='C' S74='B' S75='H' S67='G' S77='F' # Monatstage MT01=1 MT08=1 MT15=1 MT22=1 MT29=1 MT02=2 MT09=2 MT16=2 MT23=2 MT30=2 MT03=3 MT10=3 MT17=3 MT24=3 MT31=3 MT04=4 MT11=4 MT18=4 MT25=4 MT05=5 MT12=5 MT19=5 MT26=5 MT06=6 MT13=6 MT20=6 MT27=6 MT07=7 MT14=7 MT21=7 MT28=7 # Wochentage WT11='Mo' WT12='Di' WT13='Mi' WT14='Do' WT15='Fr' WT16='Sa' WT17='So' WT21='Di' WT22='Mi' WT23='Do' WT24='Fr' WT25='Sa' WT26='So' WT27='Mo' WT31='Mi' WT32='Do' WT33='Fr' WT34='Sa' WT35='So' WT36='Mo' WT37='Di' WT41='Do' WT42='Fr' WT43='Sa' WT44='So' WT45='Mo' WT46='Di' WT47='Mi' WT51='Fr' WT52='Sa' WT53='So' WT54='Mo' WT55='Di' WT56='Mi' WT57='Do' WT61='Sa' WT62='So' WT63='Mo' WT64='Di' WT65='Mi' WT66='Do' WT67='Fr' WT71='So' WT72='Mo' WT73='Di' WT74='Mi' WT75='Do' WT76='Fr' WT77='Sa' # Vorgehen: # -> man sucht die beiden letzten Stellen des Jahrs in der Jahrestabelle: Spalte merken # -> man sucht das Jahrhundert in der Jahrhunderttabelle: Zeile merken # -> an dieser Zeile und Spalte der Sonntagsbuchstabentabelle findet man den Sonntagsbuchstaben # -> man sucht die Monatstabelle den Monat und in der selben Zeile wieder den oben gefundenen Sonntagsbuchstaben: Spalte merken # -> in der Monatstagetabelle sucht man den Tag des Zieldatums: Zeile merken # -> im Schnittpunkt Monatstagszeile/2. Sonntagsspalte findet sich der Wochentag # Jahresspalte JHRSTR=${SOLLJHR:(-2)} printf -v JHRZHL "%02d" $JHRSTR JHRVAR="J${JHRZHL}" eval JAHRESSPALTE=\$$JHRVAR # Jahrhundertzeile JHUSTR=${SOLLJHR:0:2} if [ $JHUSTR -lt 15 ]; then JHHUVAR="HJ${JHUSTR}" else JHHUVAR="HG${JHUSTR}" fi eval JHHUZEILE=\$$JHHUVAR # Sonntagsbuchstabe SONNBUCHVAR="S${JHHUZEILE}${JAHRESSPALTE}" eval SONNBUCHST=\$$SONNBUCHVAR # Monatszeile printf -v MONSTR "%02d" $SOLLMON MONVAR="M$MONSTR" eval MONZEILE=\$$MONVAR SCHAJA=$(is_Leapyear $SOLLJHR) if [ $SCHAJA -eq 1 ]; then if [ "$MONSTR" = '01' -o "$MONSTR" = '02' ]; then let "MONZEILE -= 1" fi fi # Wochentagsspalte WTSPALTE=0 TESTSP=1 while [ $WTSPALTE -eq 0 ]; do TESTFLD="S${MONZEILE}${TESTSP}" eval TESTWRT=\$$TESTFLD [ "$TESTWRT" = "$SONNBUCHST" ] && WTSPALTE=$TESTSP let "TESTSP += 1" done # Tageszeile printf -v WUTAG "%02d" $SOLLTAG TAGVAR="MT${WUTAG}" eval TAGZEILE=\$$TAGVAR # Wochentag ZIELVAR="WT${TAGZEILE}${WTSPALTE}" eval ZIELWERT=\$$ZIELVAR echo "$ZIELWERT" } # getWochentag