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 set -x ziff2octo() { ZIFF=$1 [ -z "$ZIFF" ] && return 1 case "$ZIFF" in '18') RETVAL='I' ;; '17') RETVAL='H' ;; '16') RETVAL='G' ;; '15') RETVAL='F' ;; '14') RETVAL='E' ;; '13') RETVAL='D' ;; '12') RETVAL='C' ;; '11') RETVAL='B' ;; '10') RETVAL='A' ;; *) RETVAL="$ZIFF" ;; esac echo "$RETVAL" } # ziff2octo octo2ziff() { ZIFF=$1 [ -z "$ZIFF" ] && return 1 case "$ZIFF" in 'I') RETVAL='18' ;; 'H') RETVAL='17' ;; 'G') RETVAL='16' ;; 'F') RETVAL='15' ;; 'E') RETVAL='14' ;; 'D') RETVAL='13' ;; 'C') RETVAL='12' ;; 'B') RETVAL='11' ;; 'A') RETVAL='10' ;; *) RETVAL="$ZIFF" ;; esac echo "$RETVAL" } # octo2ziff # 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.1406290047.txt.gz · Zuletzt geändert: 2014-07-25 1407 von werner