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 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

Levi59 #5 a écrit :

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 ? big_smile

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

weezix #12 a écrit :

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... tongue
(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

ben si il faut les espaces après [ et avant  a écrit :

!!!!!]

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