bonjour,
je voudrais faire un script en shell de bourne, et dans ce script, je voudrais affecter le résultat de la commande date dans une variable quelqconque (par exemple $var).
comment dois je faire ?
merci.
Version imprimable
bonjour,
je voudrais faire un script en shell de bourne, et dans ce script, je voudrais affecter le résultat de la commande date dans une variable quelqconque (par exemple $var).
comment dois je faire ?
merci.
Ce sont des back-quotes ou back-ticks, obtenus avec [Alt Gr]+[7]Code:var=`date`
ok, merci bcp.
mais une fois affecté à la variable ($var), comment fait on pour isoler des parties de la date ? y'a t il un equivalent de regexp en shell de bourne ?
Deux solutions :
- - tailler dans la date à coup de cut/awk/perl
- utiliser la spécification de format de la fonction date pour n'avoir que ce qui nous intéresse.
La première méthode est à utiliser quand on a plusieurs parties à récupérer dans la même date.
La seconde méthode est adaptée si l'on veut juste récupérer une info donnée. Elle repose sur le fonctionnement du date de GNU et de son oprion de formattage (des trucs du genre "+(%d) %B").
En outre, la seconde méthode ne dispense pas forcément de faire des cut ... elle peut même les faciliter en plaçant dans la date des délimiteurs choisis entre les différentes valeurs sorties.
ok, je vais essayer avec cut/awk/perl, mais je ne connais pas encore la syntaxe pour cette commande. est-ce "cut", "awk" ou "perl" la commande ?
j'utilise unix dans une université, et je ne suis pas sur que gawk est installé.
par contre, cut l'est.
je dis cela car en ayant tapé man awk, il n'y a pas de documenttation, il y'en a pour cut.
voici mon code, mais je sais qu'il n'est pas terrible car il confondrait mardi et mars.
si quelqu'un a une meilleure soluce, merci.
de plus, il n'affiche pas non plus le numéro du jour dans le mois, ni l'année
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #!/bin/sh var=`date` for i in $var do case $i in lun) jour=Lundi;; mar) jour=Mardi;; etc... esac case $i in jan) mois=janvier;; mar) mois=mars;; etc... esac done echo $jour $mois
je n'ai pas le droit d'utiliser du perl, car c'est un cours de systeme d'exploitation, ce doit etre en langage shell de bourneCitation:
Envoyé par 2Eurocents
Juste pour savoir ...
Quel est l'unix ?
Que donne cette commande ?Code:date --version
date coreutils 5.2.1
2004 écrit pas david mackenzie, free software foundation
par contre, pour connaitre la version d'unix ? quelle est la commande ?
je crois que c'est une debian (avant ce devait etre un sco unix)
Alors c'est bien le GNU date !Citation:
Envoyé par harlock59
Regarde le man de date, à la partie spécification de format. Tu y verras tout l'intérêt de faire unCa permet, ensuite, d'utiliser cut à loisir, sur des informations pertinentes.Code:date "+%A %B"
Citation:
Envoyé par harlock59
permet déjà de se faire une bonne idée.Code:uname -a
P.S. Juste pour info, c'est un cours système dans quel établissement ?
en effet, j'ai trouvé une solution en faisant ceci:
mais j'aimerais quand meme en savoir plus sur cut/awk/perlCode:
1
2
3
4
5
6
7
8
9 jour=date +%A num_jour=date +%d mois=date +%B annee=date +%Y echo " " echo aujourd"'"hui, nous sommes le echo $jour $num_jour $mois $annee echo " "
y'a t il des pages de tuto sur cette commande sur le net ?
car perl est un langage a part entiere, non ?
peut on utiliser cut/awk/perl en shell de bourne ?
merci.
Cette démarche, pour satisfaisante qu'elle est, possède une (toute petite) vulnérabilité ...Citation:
Envoyé par harlock59
Tu fais plusieurs appels successifs à date pour récupérer les différentes portions de l'information. Le problème, c'est que le temps passe (un peu) entre deux appels.
C'est vrai que la probabilité que la date change pendant l'exécution d'un tel script est minime, mais elle n'est pas totalement nulle.
C'est pourquoi il est préférable de ne faire qu'un appel à date qui récupère toutes les informations d'un coup :Code:
1
2
3
4
5
6 infodate=date +%A:%d:%B:%Y jour=`echo $infodate | cut -f 1 -d ":" num_jour=echo $infodate | cut -f 2 -d ":" mois=echo $infodate | cut -f 3 -d ":" annee=echo $infodate | cut -f 4 -d ":"
cut, awk et perl sont trois outils/commandes distinctes.Citation:
Envoyé par harlock59
Aucune de ces trois commande n'est une commande native du shell. Ce sont trois commandes externes.
Cut est une commande qui permet le découpage en champs d'une ou plusieurs lignes de textes.
Awk est un langage de traitements plus complexes. On peut soit écrire des scripts awk, soit invoquer awk en lui passant un traitement simple à faire depuis la ligne de commande.
Perl est dans le même cas que awk. Soit on fait un script autonome, soit on écrit un truc qui tient en une ligne pour faire le traitement qui nous intéresse.
Tous ces outils peuvent, bien sûr, être invoqués depuis un shell de bourne.
Citation:
Envoyé par harlock59
mais alors comment se fait-il qu'elle fonctionne (cut) de maniere naturelle dans un script shell (sh)Citation:
Envoyé par 2Eurocents
je crois que j'ai compris: elles ont été rajoutées depuis la création du shell de bourne, c'est çà ?Citation:
Envoyé par 2Eurocents
:oops: les examples des pages de man, à la limite ...Citation:
Envoyé par harlock59
Parce que son chemin d'accès est dans le contenu de la variable d'environnement $PATH.Citation:
Envoyé par harlock59
Toute commande externe trouvable par les répertoires contenus dans le $PATH fonctionnera (presque) comme si elle était intégrée au shell.
Les commandes natives du shell sont celles dont on trouve la liste dans le man de sh (ou de bash, à la limite).
de chez moi (sous mac os x.3 panther), ça donne:
uname -v
Darwin Kernel Version 7.9.0: Wed Mar 30 20:11:17 PST 2005; root:xnu/xnu-517.12.7.obj~1/RELEASE_PPC
mais à la fac, j'ai pas eu le temps de regarder (et comme c'est de la fac que je bossais, tant pis...).
j'ai lu la page man de cut, et je voulais juste savoir si au lieu de faire 4 cut sur 4 lignes successives, on ne pouvait pas plutot faire:
vu que c'est à chaque fois le meme délimiteurCode:
1
2
3
4 var=date +%A:%d:%B:%Y cut -f 1-4 -d ":" $var echo
en fait, non, c'est bon, j'ai compris pkoi ce n'est pas possible, c'est parceque sinon, on se retrouve avec un seule variable et donc ça ne sert plus à rien d'avoir fait un cut.
sur mac, c'est [option-4] (ou encore [alt-'], mais alt=option sur mac et ' et 4 sont sur la meme touche...;-))Citation:
Envoyé par 2Eurocents
oui c'est l'une des raisons, outre la lisibilité, qui fait que la syntaxe ACTUELLE est :Citation:
Envoyé par harlock59
de plus cette syntaxe est plus logique dans la mesure ou $VAR est le resultat d'un test ou lecture de VAR tout comme $(commande) et le test du RESULATCode:
1
2 $(date)
Je devrais pourtant le savoir, à force de le lire ;)Citation:
Envoyé par MarcG
On ne se défait pas comme ça de ses plus anciennes habitudes ...
Heureusement pour moi que la syntaxe "old style" (dixit le man) est encore supportée.