Pages : 1
#1 Le 29/01/2014, à 16:21
- Le Goss
[Résolu] Planning en bash
Bonjour à tous,
N'ayant pas trouvé de script bash pour un planning sur la toile, j'en ai fait un ce matin:
#!/bin/bash
until [ $faire = "x" ]; do
clear
>> evenements
>> afaire
cal -A 2
echo "----------------------------------------------------------------"
date
echo
echo "Évènements du jour :"
sort -o evenements2 evenements
rm evenements
cp evenements2 evenements
rm evenements2
cat -n evenements
echo "----------------------------------------------------------------"
echo "À faire :"
cat -n afaire
echo "----------------------------------------------------------------"
read -p "
Évènements : ajouter [1] supprimer [2] modifier [3] tous [4]
Taches : ajouter [5] supprimer [6] modifier [7]
Afficher le calendrier d'une année particulière [8]
Fermer le script [x] : " faire
if [ $faire = "1" ]
then read -p "Détails évènement : " details
echo $details >> evenements
elif [ $faire = "2" ]
then read -p 'Numéro de ligne : ' ligne
sed -i "$ligne d" evenements
elif [ $faire = "3" ]
then read -p 'Numéro de ligne : ' ligne
head -n $ligne evenements | tail -n 1
read -p 'Nouvelle entrée :
' entree
elif [ $faire = "4" ]
then cat evenements
echo "Appuyer sur [Entrée] pour continuer..."
read
elif [ $faire = "5" ]
then read -p "Détails tache : " details
echo $details >> afaire
elif [ $faire = "6" ]
then read -p 'Numéro de ligne : ' ligne
sed -i "$ligne d" afaire
elif [ $faire = "7" ]
then read -p 'Numéro de ligne : ' ligne
head -n $ligne afaire | tail -n 1
read -p 'Nouvelle entrée :
' entree
sed -i "$ligne c$entree" afaire
elif [ $faire = "8" ]
then read -p 'Année : ' annee
cal $annee
echo "Appuyer sur [Entrée] pour continuer..."
read
fi
done
Pour l'affichage "Évènements du jour :" chaque nouvelle ligne est du type 20140129 bla bla ou approchant, le script triant les lignes du fichier alphabétiquement.
1. Je voudrais que la sortie du script soit sous la forme de la commande date : mercredi 29 janvier 2014 bla bla
mercredi 29 janvier 2014, 14:53:07 (UTC+0100)
sans l'heure et la partie UTC...
2. Existe-t-il une commande qui me mette les dates dans l'ordre chronologique sous ce format, et non alphabétique (comme c'est le cas dans mon script)?
3. Peut-on réduire/supprimer la marge avant le numéro de ligne?
Merci pour votre aide et vos suggestions,
Cordialement
Dernière modification par Le Goss (Le 29/01/2014, à 20:45)
Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags
Hors ligne
#2 Le 29/01/2014, à 16:27
- Le Goss
Re : [Résolu] Planning en bash
J'oubliais ma dernière question:
Comment n'afficher que les évènements de la journée en cours et à venir, sans ceux du passé?
Merci !
Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags
Hors ligne
#3 Le 29/01/2014, à 16:58
- pingouinux
Re : [Résolu] Planning en bash
Bonjour,
Fichier evenements
20140129 bla bla1
20130129 bla bla2
20140127 bla bla3
20140130 bla bla4
sort evenements|while read dat bla;do echo $(date -d $(sed -r 's/^(....)(..)(..)(.*)/\1-\2-\3\4/' <<<"$dat") +"%A %d %B %Y") "$bla";done
Résultat
mardi 29 janvier 2013 bla bla2
lundi 27 janvier 2014 bla bla3
mercredi 29 janvier 2014 bla bla1
jeudi 30 janvier 2014 bla bla4
Ajouté :
Pour n'avoir que les événements du jour et du lendemain :
dat0=$(date +"%Y%m%d")
dat1=$(date -d tomorrow +"%Y%m%d")
sort evenements|grep "$dat0\|$dat1"|while read dat bla;do echo $(date -d $(sed -r 's/^(....)(..)(..)(.*)/\1-\2-\3\4/' <<<"$dat") +"%A %d %B %Y") "$bla";done
Résultat
mercredi 29 janvier 2014 bla bla1
jeudi 30 janvier 2014 bla bla4
Dernière modification par pingouinux (Le 29/01/2014, à 17:04)
Hors ligne
#4 Le 29/01/2014, à 19:45
- Le Goss
Re : [Résolu] Planning en bash
Super!
Des événements lisibles à 15 jours (il y a sûrement plus élégant), un petit peu de couleur (il y a sûrement plus esthétique), et à votre bon cœur M'sieur-dame
Merci pour ton aide!
#!/bin/bash
noir='\e[0;30m'
gris='\e[1;30m'
rougefonce='\e[0;31m'
rose='\e[1;31m'
vertfonce='\e[0;32m'
vertclair='\e[1;32m'
orange='\e[0;33m'
jaune='\e[1;33m'
bleufonce='\e[0;34m'
bleuclair='\e[1;34m'
violetfonce='\e[0;35m'
violetclair='\e[1;35m'
cyanfonce='\e[0;36m'
cyanclair='\e[1;36m'
grisclair='\e[0;37m'
blanc='\e[1;37m'
neutre='\e[0;m'
until [ $faire = "x" ]; do
clear
>> evenements
>> afaire
cal -A 2
#echo "----------------------------------------------------------------"
#date
#echo
echo -e "${orange}\033[7mÉvénements des 15 prochains jours :${neutre}"
echo
sort -o evenements2 evenements
rm evenements
cp evenements2 evenements
rm evenements2
#cat -n evenements
dat0=$(date +"%Y%m%d")
dat1=$(date -d "1 day" +"%Y%m%d")
dat2=$(date -d "2 day" +"%Y%m%d")
dat3=$(date -d "3 day" +"%Y%m%d")
dat4=$(date -d "4 day" +"%Y%m%d")
dat5=$(date -d "5 day" +"%Y%m%d")
dat6=$(date -d "6 day" +"%Y%m%d")
dat7=$(date -d "7 day" +"%Y%m%d")
dat8=$(date -d "8 day" +"%Y%m%d")
dat9=$(date -d "9 day" +"%Y%m%d")
dat10=$(date -d "10 day" +"%Y%m%d")
dat11=$(date -d "11 day" +"%Y%m%d")
dat12=$(date -d "12 day" +"%Y%m%d")
dat13=$(date -d "13 day" +"%Y%m%d")
dat14=$(date -d "14 day" +"%Y%m%d")
dat15=$(date -d "15 day" +"%Y%m%d")
sort evenements|grep "$dat0\|$dat1\|$dat2\|$dat3\|$dat4\|$dat5\|$dat6\|$dat7\|$dat8\|$dat9\|$dat10\|$dat11\|$dat12\|$dat13\|$dat14\|$dat15"|while read dat bla;do echo -e $(date -d $(sed -r 's/^(....)(..)(..)(.*)/\1-\2-\3\4/' <<<"$dat") +"${vertclair}--> ${jaune}%a %d/%m/%Y :${neutre}") "${vertclair}$bla${neutre}";done
echo
echo -e "${orange}\033[7mÀ faire :${neutre}"
echo
cat -n afaire
echo
echo "----------------------------------------------------------------"
read -p "
Événements : ajouter [1] supprimer [2] modifier [3] tous [4]
Taches : ajouter [5] supprimer [6] modifier [7]
Afficher le calendrier d'une année particulière [8]
Fermer le script [x] : " faire
echo
if [ $faire = "1" ]
then read -p "Détails évènement : " details
echo $details >> evenements
elif [ $faire = "2" ]
then cat -n evenements
echo
read -p 'Numéro de ligne : ' ligne
sed -i "$ligne d" evenements
elif [ $faire = "3" ]
then cat -n evenements
echo
read -p 'Numéro de ligne : ' ligne
head -n $ligne evenements | tail -n 1
read -p 'Nouvelle entrée :
' entree
sed -i "$ligne c$entree" evenements
rm liste
elif [ $faire = "4" ]
then #cat evenements
sort evenements|while read dat bla;do echo $(date -d $(sed -r 's/^(....)(..)(..)(.*)/\1-\2-\3\4/' <<<"$dat") +"%a %d/%m/%Y : ") "$bla" >> liste ;done
cat -n liste
echo
echo "Appuyer sur [Entrée] pour continuer..."
read
rm liste
elif [ $faire = "5" ]
then read -p "Détails tache : " details
echo $details >> afaire
elif [ $faire = "6" ]
then read -p 'Numéro de ligne : ' ligne
sed -i "$ligne d" afaire
elif [ $faire = "7" ]
then read -p 'Numéro de ligne : ' ligne
head -n $ligne afaire | tail -n 1
echo
read -p 'Nouvelle entrée :
' entree
sed -i "$ligne c$entree" afaire
elif [ $faire = "8" ]
then read -p 'Année : ' annee
cal $annee
echo "Appuyer sur [Entrée] pour continuer..."
read
fi
done
Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags
Hors ligne
#5 Le 29/01/2014, à 22:08
- pingouinux
Re : [Résolu] Planning en bash
Tu peux remplacer cette séquence
dat0=$(date +"%Y%m%d")
dat1=$(date -d "1 day" +"%Y%m%d")
dat2=$(date -d "2 day" +"%Y%m%d")
dat3=$(date -d "3 day" +"%Y%m%d")
dat4=$(date -d "4 day" +"%Y%m%d")
dat5=$(date -d "5 day" +"%Y%m%d")
dat6=$(date -d "6 day" +"%Y%m%d")
dat7=$(date -d "7 day" +"%Y%m%d")
dat8=$(date -d "8 day" +"%Y%m%d")
dat9=$(date -d "9 day" +"%Y%m%d")
dat10=$(date -d "10 day" +"%Y%m%d")
dat11=$(date -d "11 day" +"%Y%m%d")
dat12=$(date -d "12 day" +"%Y%m%d")
dat13=$(date -d "13 day" +"%Y%m%d")
dat14=$(date -d "14 day" +"%Y%m%d")
dat15=$(date -d "15 day" +"%Y%m%d")
sort evenements|grep "$dat0\|$dat1\|$dat2\|$dat3\|$dat4\|$dat5\|$dat6\|$dat7\|$dat8\|$dat9\|$dat10\|$dat11\|$dat12\|$dat13\|$dat14\|$dat15"|while read dat bla;do echo -e $(date -d $(sed -r 's/^(....)(..)(..)(.*)/\1-\2-\3\4/' <<<"$dat") +"${vertclair}--> ${jaune}%a %d/%m/%Y :${neutre}") "${vertclair}$bla${neutre}";done
par celle-ci
dates=$(for k in {0..15};do printf "%s\|" $(date -d "$k day" +"%Y%m%d"); done); dates=${dates%\\|}
sort evenements|grep "^ *\($dates\)"|while read dat bla;do echo -e $(date -d $(sed -r 's/^(....)(..)(..)(.*)/\1-\2-\3\4/' <<<"$dat") +"${vertclair}--> ${jaune}%a %d/%m/%Y :${neutre}") "${vertclair}$bla${neutre}";done
Dernière modification par pingouinux (Le 29/01/2014, à 22:26)
Hors ligne
#6 Le 30/01/2014, à 09:07
- Le Goss
Re : [Résolu] Planning en bash
C'est à ça que je faisais allusion en parlant d'élégance.
Il faut bien dire qu'à chaque fois que je tombe sur des pages qui en parle, je suis émerveillé de la souplesse de ce langage.
Ce qu'il y a de compliqué parfois, c'est de réinvestir ce qu'on découvre.
Mais, jusque là, j'ai toujours pu faire ce que je recherchais moyennant un peu d'huile de coude... et un bon coup de main!
Au final, tout le monde y est gagnant.
Merci encore
Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags
Hors ligne
#7 Le 30/01/2014, à 10:04
- Le Goss
Re : [Résolu] Planning en bash
Allez,
et un petit
resize -s 50 66
pour mettre le terminal aux bonnes dimensions
Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags
Hors ligne
#8 Le 30/01/2014, à 12:45
- melixgaro
Re : [Résolu] Planning en bash
Salut,
Sinon il y a taskwarrior qui est un puissant agenda en ligne de commande. S'installe avec
sudo apt-get install task
Amitiés.
Linux depuis ~2007. Xubuntu seulement.
Hors ligne
#9 Le 30/01/2014, à 15:41
- Le Goss
Re : [Résolu] Planning en bash
Houla!
C'est l'usine à gaz ton truc. Trop gros pour mes besoins actuels. Mais je me le mets quand même de côté pour regarder ça plus tard d'un peu plus près.
Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags
Hors ligne