Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/06/2007, 17h54   #1
Membre à l'essai
 
Avatar de Matmal11
 
Inscription : juillet 2006
Messages : 111
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : juillet 2006
Messages : 111
Points : 21
Points : 21
Par défaut Fonction avec parametre entree et sortie

Bonjour,

Je voudrais faire des calculs sur des dates dans un script bash shell.

Pour le moment, je récupère les minutes, secondes et nanos dans des variables, je les traites ensuite par une fonction, mais c'est assez lourd en code (passage à + de 60s..etc).

Je récupère mes valeurs ainsi:

Code :
1
2
3
4
TIME=`date +"%M:%S.%N"`
MIN=`echo TIME | sed 's/:[0-9]*.[0-9]*$//"`
SEC=`echo TIME | sed -e 's/^[0-9]*://' -e 's/.[0-9]*$//"`
NANO=`echo TIME | sed 's/^[0-9]*:[0-9]*.//"`
et je fais ensuite des opérations sur mes variables.

Est-il possible d'effectuer des opérations sur les dates (additions, soustractions) dans le script shell sans passer par ce genre de fonction que je dois me créer???
Matmal11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 22h17   #2
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
Citation:
Envoyé par Matmal11
Bonjour,
Je voudrais faire des calculs sur des dates dans un script bash shell.

Déja, tu peux remplacer :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
MIN=`echo TIME | sed 's/:[0-9]*.[0-9]*$//"`
par :
MIN=`date +%M`
 
SEC=`echo TIME | sed -e 's/^[0-9]*://' -e 's/.[0-9]*$//"`
par :
SEC=`date +%S`
 
NANO=`echo TIME | sed 's/^[0-9]*:[0-9]*.//"`
par :
NANO=`date +%N`
Pour le reste, tu ne dis pas ce qui tu veux faire comme calcul, alors ...
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 22h26   #3
Membre habitué
 
Avatar de baroudi
 
Inscription : avril 2006
Messages : 117
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : avril 2006
Messages : 117
Points : 129
Points : 129
Envoyer un message via MSN à baroudi
yes , bonne idée
baroudi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 09h18   #4
Membre à l'essai
 
Avatar de Matmal11
 
Inscription : juillet 2006
Messages : 111
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : juillet 2006
Messages : 111
Points : 21
Points : 21
Désolé de ne pas avoir le type de calcul, mais pour des opérations sur les dates, je pensais à la "soustraction" de 2 date pour savoir le temps écoulé entre 2 dates.

Code :
1
2
3
DATE_BEGIN=`date +"%H:%M:%S.%N"`
DATE_END=`date +"%H:%M:%S.%N"`
ECART=DATE_BEGIN-DATE_END
Faire les opérations sur les nano, secondes, minutes et heures est assez lourd en code, donc si vous connaissez quelquechose deja existant ce serait cool.

Merci
Matmal11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 21h37   #5
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
Citation:
Envoyé par Matmal11
Désolé de ne pas avoir le type de calcul, mais pour des opérations sur les dates, je pensais à la "soustraction" de 2 date pour savoir le temps écoulé entre 2 dates.
Si la précision à la seconde te convient, utilise date +%s

http://man.developpez.com/man1/date.1.php

%s secondes écoulées depuis `00:00:00 1970-01-01 UTC' (une extension GNU)

DATE_BEGIN=`date +%s`; echo $DATE_BEGIN
1182367452
.../...
DATE_END=`date +%s` ; echo $DATE_END
1182367546

((ECART=DATE_END-DATE_BEGIN)) ; echo $ECART
94

((MIN=ECART/60)) ; echo $MIN
1

((SEC=ECART%60)) ; echo $SEC
34
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2007, 09h14   #6
Membre à l'essai
 
Avatar de Matmal11
 
Inscription : juillet 2006
Messages : 111
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : juillet 2006
Messages : 111
Points : 21
Points : 21
ok, ca va nikel.

merci beaucoup
Matmal11 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h22.


 
 
 
 
Partenaires

Hébergement Web