Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 datemercredi 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. cool
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