#1 Le 09/01/2012, à 19:08
- weezixx
[résolu]problème de variable
Bonjour
je fais un script (je débute) dont le but est de me dire quand un de mes produits alimentaires dont la date de péremption est à la même date qu'aujourd'hui.
Mais voila j'ai un petit heurt qui selon moi vient de ma déclaration de variable.
Mon script :
#!/bin/bash
$p1=$(09/01/2012)
if [$p1=$(date "+%x")]
then
espeak -v fr "finito"
else
espeak -v fr "Rien à signaler pour la nourriture"
fi
exit
Et la console me répond :
peremption.sh: 3: 09/01/2012: not found
peremption.sh: 3: =: not found
peremption.sh: 13: [=09/01/12]: not found
Je veux rentrer mes dates limites sous le format : jj/mm/aa
et donc je les fais comparer à la date d'aujourd'hui sous le même format, mais rien n'y fait.
Merci
Dernière modification par weezixx (Le 12/01/2012, à 00:02)
Hors ligne
#2 Le 09/01/2012, à 20:27
- Levi59
Re : [résolu]problème de variable
2 problemes :
- On ne met pas de "$" lors de la définition d'une variable.
- $(...) sert à lancer une commande, toi tu cherche à définir une variable texte donc il suffit de mettre des guillemets
Var="Ton texte"
echo $Var
En plus je doute que le test fonctionne car tu vérifies une égalité de texte avec un test de nombre. En gros le test ne sauras pas que la date en est une.
Dernière modification par Levi59 (Le 09/01/2012, à 20:29)
Hors ligne
#3 Le 09/01/2012, à 20:42
- weezixx
Re : [résolu]problème de variable
T'aurai pas une solution ?
Moi ce que je veux c'est juste comparer par exemple : 7/01/2012 à 9/01/2012
Donc on pourrai comparer deux chaînes de caractère non ?
Hors ligne
#4 Le 09/01/2012, à 21:10
- pingouinux
Re : [résolu]problème de variable
Salut,
p1="09/01/2012"
if [ $p1 = $(date +"%d/%m/%Y") ] ;then echo égal; else echo différent; fi
Ajouté :
date +"%x" # Place le mois en tête, et non le jour
01/09/2012
Dernière modification par pingouinux (Le 09/01/2012, à 21:12)
Hors ligne
#5 Le 09/01/2012, à 21:17
- Levi59
Re : [résolu]problème de variable
Méa culpa pour le test qui est effectivement possible par contre il ne différenciera pas si c'est avant ou après la date limite, seulement si c'est le même jour ou non avec ce test.
Hors ligne
#6 Le 09/01/2012, à 21:35
- pingouinux
Re : [résolu]problème de variable
il ne différenciera pas si c'est avant ou après la date
En fait, c'est possible, mais il faut ruser. Pour que la comparaison de dates soit possible avec une comparaison de chaînes, il faut que la date soit sous cette forme :
AAAA/MM/JJ => 2012/01/09
Exemple :
comparaison() {
if [ "$1" == "$2" ] ;then echo égal;
elif [ "$1" \< "$2" ] ;then echo avant;
elif [ "$1" \> "$2" ] ;then echo après; fi
}
aujourd_hui=$(date +"%Y/%m/%d") # Ce test a été fait le 09/01/2012
comparaison "2012/01/08" "$aujourd_hui"
comparaison "2012/01/09" "$aujourd_hui"
comparaison "2012/01/10" "$aujourd_hui"
Résultat :
avant
egal
après
Dernière modification par pingouinux (Le 10/01/2012, à 06:37)
Hors ligne
#7 Le 09/01/2012, à 21:39
- Levi59
Re : [résolu]problème de variable
Sympa! J'aurais testé le jour et le mois à part mais c'est bien plus rapide comme ça! ^^
Hors ligne
#8 Le 11/01/2012, à 20:33
- weezixx
Re : [résolu]problème de variable
J'ai un peu changé le code :
#!/bin/bash
let p1=11012012
if [$p1==$(date +"%d""%m""%Y" )]
then
espeak -v fr "finito"
else
espeak -v fr "Rien à signaler pour la nourriture"
fi
exit
À présent, pour faire le test, je compare 2 variables numériques (11012012 qui est la date d'aujourd'hui), mais ça ne marche toujours pas, la j'essayais qu'il dise "finito" car les deux variables sont les mêmes …
Hors ligne
#9 Le 11/01/2012, à 20:52
- pingouinux
Re : [résolu]problème de variable
Il n'est pas interdit de consulter les réponses données à la question posée, notamment #4 et #6.
Hors ligne
#10 Le 11/01/2012, à 21:00
- weezixx
Re : [résolu]problème de variable
Oui mais leurs système ce n'est que pour la comparaison de chaînes de caractères, la moi à présent je travaille avec des nombres.
C'est une bonne idée ou je me fourvoie totalement ?
Hors ligne
#11 Le 11/01/2012, à 21:08
- pingouinux
Re : [résolu]problème de variable
Une variable qui contient un nombre peut aussi être utilisée comme une chaîne. Il n'y a une différence que si on fait des calculs numériques dessus. Il faut regarder la syntaxe utilisée dans les exemples : espaces de part et d'autre de [, ] et ==.
Hors ligne
#12 Le 11/01/2012, à 21:47
- weezixx
Re : [résolu]problème de variable
Oui je veux faire des maths avec après, donc dans mon code je dois juste changer les espaces ?
Hors ligne
#13 Le 11/01/2012, à 21:51
- pingouinux
Re : [résolu]problème de variable
donc dans mon code je dois juste changer les espaces ?
Oui, les ajouter.
Quels genres de calculs comptes-tu faire avec la date ?
Hors ligne
#14 Le 11/01/2012, à 21:55
- weezixx
Re : [résolu]problème de variable
Ben je me disais qu'avec mon système je pourrais faire de sorte que le programme me dise que dans 2 jours le produit serait périmé, 2000000 vaut 2 jours avec mon système de notation … Mais bon je peux me tromper
Hors ligne
#15 Le 11/01/2012, à 21:58
- weezixx
Re : [résolu]problème de variable
Ha non je devrai plutôt mettre les années puis les mois et ensuite les jours … Sinon c'est pas logique Sionen ça serait 01012012 devrait être plus grand que 01022012 ce qui est faux
Hors ligne
#16 Le 11/01/2012, à 22:27
- pingouinux
Re : [résolu]problème de variable
Dans ce cas, il vaut mieux convertir les dates en secondes écoulées depuis le 01/01/1970 (Epoch), sachant qu'une journée compte 86400 secondes. Par exemple, pour calculer la date dans deux jours :
# Aujourd'hui : 11/01/2012
$ date_actuelle_en_secondes=$(date -d now +"%s")
$ date_plus_2j_en_secondes=$((date_actuelle_en_secondes+2*86400))
$ date_plus_2j=$(date -d @$date_plus_2j_en_secondes +"%d/%m/%Y")
$ echo $date_plus_2j
13/01/2012
Hors ligne
#17 Le 11/01/2012, à 22:31
- weezixx
Re : [résolu]problème de variable
Ouais mais alors si je prend en compte les année 2013 2014 etc je suis dans le caca non ? Tandis qu'avec mon système peut être pas, ou en tout cas je le vois pas encore le problème
Hors ligne
#18 Le 11/01/2012, à 22:46
- weezixx
Re : [résolu]problème de variable
Bon voila mon code toujours inopérant, qqn sait pas me le corriger directement parce que la j'en peux vraiment plus …
#!/bin/bash
p1=11012012
if ["$p1" == "$(date +"%d""%m""%Y")"];
then
espeak -v fr "finito";
else
espeak -v fr "Rien à signaler pour la nourriture";
fi
exit
Hors ligne
#19 Le 11/01/2012, à 23:06
- Sciensous
Re : [résolu]problème de variable
peut-être qu'avec des espaces en plus et des guillemets en moins...
(ligne du if)
#!/bin/bash
p1=11012012
if [ "$p1" == "$(date +%d%m%Y)" ];
then
espeak -v fr "finito";
else
espeak -v fr "Rien à signaler pour la nourriture";
fi
exit
Dernière modification par Sciensous (Le 11/01/2012, à 23:06)
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#20 Le 11/01/2012, à 23:22
- weezixx
Re : [résolu]problème de variable
Même pas :
#!/bin/bash
p1=11012012
if["$p1" == "$(date +%d%m%Y)"];
then
espeak -v fr "finito";
else
espeak -v fr "Rien à signaler pour la nourriture";
fi
exit
Avec comme réponse terminale :
peremption.sh: 5: if[11012012: not found
peremption.sh: 7: Syntax error: "then" unexpected
J'utilise VIM pour coder et le "if" n'est pas surligner comme "then" ou "fi"
Dernière modification par weezixx (Le 11/01/2012, à 23:24)
Hors ligne
#21 Le 11/01/2012, à 23:25
- Sciensous
Re : [résolu]problème de variable
ben si il faut les espaces après [ et avant ] !!!!!
c'est sur que si t'oublies tes lunettes ...:o
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#22 Le 11/01/2012, à 23:29
- weezixx
Re : [résolu]problème de variable
!!!!!]
Montre moi avec mon code si tu veux bien parce que pour finir je vois plus rien …
Hors ligne
#23 Le 11/01/2012, à 23:32
- Sciensous
Re : [résolu]problème de variable
regarde bien la ligne du if de mon post 19 (c'est ton code corrigé)
Dernière modification par Sciensous (Le 11/01/2012, à 23:35)
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#24 Le 11/01/2012, à 23:39
- weezixx
Re : [résolu]problème de variable
J'ai fais un copier coller et j'ai toujours la 2e phrase qui est prononcée au lieu de la 1ère
#!/bin/bash
p1=11012012
if [ "$p1" == "$(date +%d%m%Y)" ];
then
espeak -v fr "finito";
else
espeak -v fr "Rien à signaler pour la nourriture";
fi
exit
Hors ligne
#25 Le 11/01/2012, à 23:44
- Sciensous
Re : [résolu]problème de variable
au moins tu n'as plus d'erreurs; de rien !
que dit dans une console:
echo $(date +%d%m%Y)
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne