date nur werktage
date nur werktage
Ich möchte gerne mit date die letzten werktage ausgeben, also eigentlich die letzten 7 werktage anzeigen, eben ohne samstag und sonntag. mein bisheriges skirpt:
for a in `seq 7`
do
echo "[$a] Datum: $(date +%d.%m.%Y -d "-$a days")"
done
kann ich mit der -d option date irgendwelche parameter angeben die nur werktage erlauben? weder im man noch im info hab ich was passendes gefunden... muss ich mir da quasi was selber bauen?
for a in `seq 7`
do
echo "[$a] Datum: $(date +%d.%m.%Y -d "-$a days")"
done
kann ich mit der -d option date irgendwelche parameter angeben die nur werktage erlauben? weder im man noch im info hab ich was passendes gefunden... muss ich mir da quasi was selber bauen?
-
- Beiträge: 3472
- Registriert: 30.11.2005 10:32:22
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Wald
Re: date nur werktage
Ganz ohne basteln geht's wohl nicht:
Code: Alles auswählen
for a in `seq 7`
do
echo "[$a] Datum: $(date +%d.%m.%Y.%u -d "-$a days")" | grep -vE "\.6$|\.7$" | sed s/\.[1-5]$//g
done
Re: date nur werktage
habs mitlerweile mal anderes versucht:
Mein Problem ist jetzt, dass ja der Counter am anfang auch das Offset bekommen muss, weil ich später dann das mache:
Gäbe es da ne Möglichkeit, dass der Counter normal von 1-5 durchrennt und ich später wenn ich zB 3 wähle den richtigen Tag erwische? Also wenn oben
ausgegeben wird, ich 3 auswähle dann auch der 17.04.2009 verwendet wird?
Code: Alles auswählen
offset=0
for a in `seq 5`
do
if [ "$(date +%A -d "-$a days")" = "Sonntag" ]; then
offset=2
fi
echo "[$(($a+$offset))] Datum: $(date +"%A %d.%m.%Y" -d "-$(($a+$offset)) days")"
done
Code: Alles auswählen
read -n 1 choose
D1=$(date +%Y-%m-%d -d "-$choose days")
D2=$(date +%Y_%m_%d -d "-$choose days")
Code: Alles auswählen
[1] Datum: 21.04.2009
[2] Datum: 20.04.2009
[3] Datum: 17.04.2009
[4] Datum: 16.04.2009
[5] Datum: 15.04.2009
Re: date nur werktage
Vielleicht einfacher
auf 1-5 testen, ala:
NAMES wäre da die Liste der validen Tage, und INSTALLER das gewünschte Datum.
Code: Alles auswählen
%u day of week (1..7); 1 is Monday
%w Tag der Woche (0..6); 0 steht für Sonntag
Code: Alles auswählen
$ date +%u -d -1days
2
select kann dann eine Liste erstellen, Ausschnitt aus meinem Skript zur nvidia-Treiberwahl:reox hat geschrieben:wenn ich zB 3 wähle den richtigen Tag erwische?
Code: Alles auswählen
NAMES=$( for i in $TREIBERLISTE ; do
basename $i | sed 's@^NVIDIA-Linux-@@'
done
)
select NAME in $NAMES quit; do
INSTALLER=$(echo $TREIBERLISTE | sed 's@ @\n@g' | grep $NAME)
break
done
$INSTALLER $SCHALTER $WHAT
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
Re: date nur werktage
Nur so als Hinweis:
Es ist sinnvoll, wenn man die Ausgabe von date in einem if vergleichen will, beim Aufruf von date vorher LANG=C oder LC_TIME=C zu setzen, sonst funzt das ganze nicht mehr, sobald sich an den locales was ändert. Wenn man den DayOfWeek als Zahl verwendet, dann ist das natürlich überflüssig.
Es ist sinnvoll, wenn man die Ausgabe von date in einem if vergleichen will, beim Aufruf von date vorher LANG=C oder LC_TIME=C zu setzen, sonst funzt das ganze nicht mehr, sobald sich an den locales was ändert. Wenn man den DayOfWeek als Zahl verwendet, dann ist das natürlich überflüssig.
Re: date nur werktage
ok danke für die guten tipps, so hab ich das auch erstmal umgesetzt:
geht auch super, nur kann man das datumsformat was ich jetzt ausgebe nicht besonders toll lesen... Gibt es da eine variante, wie ich die Ausgabe ändern kann ohne das $DATES array zu verändern oder kann man da bei date noch was drehen? Eine Funktion zum anzeigen der eingabe maske hab ich auch net gefunden...
edit: ok der totale workaround aber es geht:
wer ne bessere idee hat: bitte bin für konstruktive kritik immer zu haben!
aber schonmal ein großes danke an alle! Wieder was gelernt
Code: Alles auswählen
#!/bin/sh
case $1 in
*)
offset=0
DATES=$(for a in `seq 5`
do
if [ "$(date +%u -d "-$a days")" = "7" ]; then
offset=2
fi
echo "$(date +%Y%m%d -d "-$(($a+$offset)) days")"
done)
echo "Choose your destiny..."
select DATE in $DATES quit; do
D1=$(date +%Y-%m-%d -d "$DATE")
D2=$(date +%Y_%m_%d -d "$DATE")
cvlc "http://ondemand.orf.at/news/playlist.php?id=zib2&day=$D1&fname=zib2200_$D2.wmv&offset=00:00:00"
break;
done
;;
esac
edit: ok der totale workaround aber es geht:
Code: Alles auswählen
#!/bin/sh
timeoffset=0
[ "$(date +%H)" == "23" ] && timeoffset=-1 # wird gebraucht, da ja schon um 23 Uhr die neuste ZIB2 vorhanden ist
case $1 in
*)
offset=0
for a in `seq 5`
do
[ "$(date +%u -d "-$(($a+$timeoffset)) days")" = "7" ] &&offset=2
day=$(($a+$offset))
day=$(($day+$timeoffset))
DATES[$a]=$(date +"%A-%d.%m.%Y;%Y%m%d" -d "-$day days")
done
counter=1
for date in ${DATES[@]}; do
newdate=${date%;*}
echo "[$counter]: ${newdate%-*} - ${newdate#*-}"
counter=$(($counter+1))
done
echo "Choose 1-5 or q for exit!"
read -n 1 choose
[ "$choose" = "q" ] && exit 0
zibdate=${DATES[$choose]#*;}
D1=$(date +%Y-%m-%d -d "$zibdate")
D2=$(date +%Y_%m_%d -d "$zibdate")
cvlc "http://ondemand.orf.at/news/playlist.php?id=zib2&day=$D1&fname=zib2200_$D2.wmv&offset=00:00:00"
;;
esac
aber schonmal ein großes danke an alle! Wieder was gelernt
Re: date nur werktage
schönes Ding!
Woher kommt dein cvlc - hast du den vlc selbst übersetzt?
Ich benutzte ein amd64 lenny mit debian-multimedia Paketen, aber mein vlc kann deinen Stream nicht spielen, weil er die wma2 bzw wma3 Dateien nicht decoden kann. Würdest du mir bitte verraten mit welchen Paketen du arbeitest?
(mein 32bit etch kann damit umgehen)
Woher kommt dein cvlc - hast du den vlc selbst übersetzt?
Ich benutzte ein amd64 lenny mit debian-multimedia Paketen, aber mein vlc kann deinen Stream nicht spielen, weil er die wma2 bzw wma3 Dateien nicht decoden kann. Würdest du mir bitte verraten mit welchen Paketen du arbeitest?
(mein 32bit etch kann damit umgehen)
Re: date nur werktage
ich bin auf sid
clvc ist bei vlc dabei afaik
ist aber nur ein sh skript:
Code: Alles auswählen
ii vlc 0.9.9a-2 multimedia player and streamer
Code: Alles auswählen
% which cvlc
/usr/bin/cvlc
Code: Alles auswählen
#! /bin/sh
exec /usr/bin/vlc -I "dummy" "$@"
Re: date nur werktage
danke für die Info, dann baue ich mir mal nen backport.
ich hab gesehen, dass dmm.org für lenny gar keine Version bietet. Also habe ich noch die 0.8.x
ich hab gesehen, dass dmm.org für lenny gar keine Version bietet. Also habe ich noch die 0.8.x
Re: date nur werktage
ja ich glaube lenny hat kein vlc, wegen nem bug oder so? vlc ist auf jeden fall seit längerem nicht in stable und testing so wie ich das noch mitbekommen hab
Re: date nur werktage
Nee, lenny hat schon vlc aber eben noch eine uralte Version aus etch.
Re: date nur werktage
So, nun funktioniert dein Script auch bei mir unter lenny mit vlc (Version 0.9.8a-3 aus testing).
Ich hab 28 Backportspakete gebaut ( fürs Archiv, meine Vorlage: http://forums.debian.net/viewtopic.php?t=37420 ) und habe nun endlich ein aktuelles vlc.
Ich hab 28 Backportspakete gebaut ( fürs Archiv, meine Vorlage: http://forums.debian.net/viewtopic.php?t=37420 ) und habe nun endlich ein aktuelles vlc.