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 21/02/2007, 20h15   #1
Invité régulier
 
Inscription : avril 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 45
Points : 7
Points : 7
Par défaut Vérification d'une date

Bonjour tout le monde,
Je suis entrain de faire un script qui prend en paramètre une date, mais je n'ai sais pas du tout si c'est possible de faire un contrôle sur cette date genre:
1)le format de cette date est yyyy-mm-dd
2)yyyy est un nombre entier
3)mm compris entre 1 et 12
4)dd compris entre 1 et 31

Pour la 1) je vous cache pas que je ne sais pas du tout comment faire.
Pour la 2) j'ai pu récupéré yyyy
Code :
(annee=$(expr "$1" : "\(....\)")
et je cherche comment vérifier que c'est un entier.
Pour la 3_ et la 4) je suis la piste de "index" mais pour l'instant que des échecs.

si vous avez des idées n'hésiter surtout pas.
Merci d'avance
pinacola est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2007, 09h37   #2
Membre Expert
 
Avatar de narmataru
 
Inscription : décembre 2002
Messages : 1 423
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : décembre 2002
Messages : 1 423
Points : 1 491
Points : 1 491
Pour tester la structure d'une chaine grep est une solution :

Citation:
narma@linimi:~$ date="2007-02-22"
narma@linimi:~$ if (echo $date | egrep -q "^[0-9]{4}-[0-9]{2}-[0-9]{2}$") ;then echo "ok"; else echo "erreur"; fi
ok
narma@linimi:~$ date="2007-02-225"
narma@linimi:~$ if (echo $date | egrep -q "^[0-9]{4}-[0-9]{2}-[0-9]{2}$") ;then echo "ok"; else echo "erreur"; fi
erreur
Après pour découper la chaine, regarde du coté de "sed" ou "awk". Pour tester les valeur "test" et sa forme abbrégé avec le "if [ ... ]".

Voici les pages de manuel : http://man.developpez.com/
et un tutoriel sur le shell : http://marcg.developpez.com/ksh/

[EDIT]
Pour l'extraction de sous-chaine il y aussi l'opérateur ${...} qui est peut être plus simple que sed ou awk :
Citation:
narma@linimi:~$ echo ${date:0:4}
2007
__________________
Reportage d'Arte sur Linux
narmataru est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2007, 10h27   #3
Invité régulier
 
Inscription : avril 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 45
Points : 7
Points : 7
je te remercie pour ta réponse je vais voir ça tout de suite.

Merci encore
pinacola est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2007, 22h00   #4
Invité régulier
 
Inscription : avril 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 45
Points : 7
Points : 7
Tout d'abord je te remercie pour les commandes et le tutoriel.
J'ai une autre question : si je passe en paramètre une date yyyymmdd, comment je peux calculer $date+1
exemple: si je passe 20070202 ça me donne 20070203
si je passe 20070228 ça me donne 20070301

Merci
pinacola est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2007, 19h52   #5
Invité régulier
 
Inscription : avril 2006
Messages : 45
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 45
Points : 7
Points : 7
Comme je n'ai rien trouvé au niveau ksh, j'ai fais une classe java (appelé dans mon script avec un parametre date).Cette classe fait le clacule de "date + 1".

C'est ça ma solution.
pinacola 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 18h06.


 
 
 
 
Partenaires

Hébergement Web