Benutzer-Werkzeuge

Webseiten-Werkzeuge


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 2014-07-25
 
# 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.)
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
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
 
# 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'
 
usage() {
    echo "Aufruf: $0 <tag> <monat> <jahr>"
    echo "Rückgabe: Wochentag, abgekürzt (Mo, Di, Mi, Do, Fr, Sa, So)"
} # usage
 
# Vorgehen:
SOLLTAG=$1
SOLLMON=$2
SOLLJHR=$3
if [ -z "$1" -o -z "$2" -o -z "$3" ]; then
    usage
    exit 1
fi
 
# Jahresspalte
JHRSTR=${SOLLJHR:(-2)}
printf -v JHRZHL "%02d" $JHRSTR
JHRVAR="J${JHRZHL}"
eval JAHRESSPALTE=\$$JHRVAR
 
JHUSTR=${SOLLJHR:0:2}
if [ $JHUSTR -lt 15 ]; then
    JHHUVAR="HJ${JHUSTR}"
else
    JHHUVAR="HG${JHUSTR}"
fi
eval JHHUZEILE=\$$JHHUVAR
 
SONNBUCHVAR="S${JHHUZEILE}${JAHRESSPALTE}"
eval SONNBUCHST=\$$SONNBUCHVAR
 
printf -v MONSTR "%02d" $SOLLMON
MONVAR="M$MONSTR"
    eval MONZEILE=\$$MONVAR
if [ "$MONSTR" = '01' -o "$MONSTR" = '02' ]; then
    let "MONZEILE += 1"
fi
 
WTSPALTE=0
TESTSP=1
while [ $WTSPALTE -eq 0 ]; do
    TESTFLD="S${MONZEILE}${TESTSP}"
    eval TESTWRT=\$$TESTFLD
    [ "x$TESTWRT" = "x$SONNBUCHST" ] && WTSPALTE=$TESTSP
    let "TESTSP += 1"
done
 
printf -v WUTAG "%02d" $SOLLTAG
TAGVAR="MT${WUTAG}"
eval TAGZEILE=\$$TAGVAR
 
ZIELVAR="WT${TAGZEILE}${WTSPALTE}"
eval ZIELWERT=\$$ZIELVAR
 
echo "$ZIELWERT"
comp/ewkalbash.1406290112.txt.gz · Zuletzt geändert: 2014-07-25 1408 von werner

Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki