comp:ewkalbash
Dies ist eine alte Version des Dokuments!
Bash-Script: ewiger Kalender
Es musste ziemlich fix eine Bestimmung des Wochentags zu einem beliebigen Datum her. Also nimmt man die geeignetste Programmiersprache und tippt los…
Mir ist klar, dass das Script in keiner Weise elegant ist. Es fehlen auch sämtliche Eingabeüberprüfungen. Es ging mir eher um einen „Proof of Concept“. Naja, seht selbst:
- /usr/local/bin/gibwotag
#!/bin/bash # Quelle: https://de.wikipedia.org/wiki/Ewiger_Kalender Stand: 2014-07-25 usage() { echo "Aufruf: $0 <tag> <monat> <jahr>" 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
comp/ewkalbash.1407855449.txt.gz · Zuletzt geändert: 2014-08-12 1657 von werner